MySQL 쿼리문
SQL (Structured Query Language)
• SQL은 관계형 데이터 모델을 따르는 DBMS의 표준 데이터베이스 언어
• 관계 대수를 기초로 만드러진 DB관련 명령어 형식
SQL 명령어 분류
1 )
데이터 정의어 DDL, Data Definition Language
- 데이터베이스나 테이블 등을 생성, 삭제하거나 그 구조를 변경하기 위한 명령어
- 데이터베이스를 정의하거나 수정
- 명령어 수행시 이전 상태로 복귀 불가
구분 | DDL 명령어 | 내용 |
생성 | CREATE | 데이터베이스 오브젝트 생성 |
변경 | ALTER | 데이터베이스 오브젝트 변경 |
삭제 | DROP | 데이터베이스 오브젝트 삭제 |
TRUNCATE | 데이터베이스 오브젝트의 내용 삭제 |
2 ) 데이터 조작어 DML, Data Manipulation Language
- 데이터베이스에 저장된 데이터를 처리하거나 조회, 검색하기 위한 명령어
- 데이터를 검색, 삽입, 삭제, 갱신
- 사용자와 데이터베이스 관리 시스템간의 인터페이스 제공
- 트랜잭션 제어어를 활용하여 실행 전 상태로 복귀 가능
구분 | DML 명령어 | 내용 |
데이터 삽입 | INSERT | 삽입 형태로 신규 데이터를 테이블에 저장 |
데이터 수정 | UPDATE | 테이블의 내용을 수정 |
데이터 삭제 | DELETE | 테이블의 내용을 삭제 |
데이터 조회 | SELECT | 테이블의 내용을 조회 |
3 ) 데이터 제어어 DCL, Data Control Language
- 무결성을 유지시키면서 내부적으로 여러가지 규정이나 제약조건 등을 기술하기 위해 사용되는 명령어
- 사용자 별로 데이터베이스에 접근할 수 있는 권한을 부여하거나 회수
DCL 명령어 | 내용 |
GRANT | 데이터베이스 사용자에게 권한을 부여 |
REVOKE | 데이터베이스 사용자에게 권한을 회수 |
• 테이블 : 서로 연관된 레코드의 집합
• 레코드, 튜플 : 하나의 단위로 취급되는 자료의 집합. DB에서는 행(Row)에 해당, 관계된 데이터의 묶음
• 필드, 속성 : 가장 작은 단위의 데이터를 의미. DB에서는 열(Column)에 해당, 자신만의 타입을 가진다.
데이터베이스
• 데이터베이스 조회
SHOW DATABASES;
• 데이터베이스 사용
USE 데이터베이스명;
• 데이터베이스 생성
CREATE 데이터베이스명;
• 데이터베이스 삭제
DROP DATABASES 데이터베이스명;
테이블
• 테이블 정의
CREATE TABLE 테이블 이름(
필드명 데이터타입(자리 수) 조건;
필드명 데이터타입 조건;
필드명 데이터타입 조건;
PRIMARY KEY(기본키로 지정한 필드명)
);
CREATE TABLE posts (
id bigint(20) unsigned NOT NULL AUTO_INCREMENT,
subject varchar(255) NOT NULL,
content mediumtext,
created datetime,
user_id int(10) unsigned NOT NULL,
user_name varchar(32) NOT NULL,
hit int(10) unsigned NOT NULL default '0',
PRIMARY KEY (id)
);
• 제약 조건(constraint)
- 제약 조건(constraint)이란 데이터의 무결성을 지키기 위해 데이터를 입력받을 때 실행되는 검사 규칙을 의미
- ALTER 문으로 필드를 추가할 때도 설정할 수도 있다.
CREATE TABLE 문에서 사용할 수 있는 제약 조건
1 ) NOT NULL : 해당 필드는 NULL 값을 저장할 수 없게 됩니다.
2 ) UNIQUE : 해당 필드는 서로 다른 값을 가져야만 합니다.
3 ) PRIMARY KEY : 해당 필드가 NOT NULL과 UNIQUE 제약 조건의 특징을 모두 가지게 됩니다.
4 ) FOREIGN KEY : 하나의 테이블을 다른 테이블에 의존하게 만듭니다.
5 ) DEFAULT : 해당 필드의 기본값을 설정합니다.
또한, AUTO_INCREMENT 키워드를 사용하면 해당 필드의 값을 1부터 시작하여 새로운 레코드가 추가될 때마다 1씩 증가된 값을 저장합니다. 이때 AUTO_INCREMENT 키워드 다음에 대입 연산자(=)를 사용하여 시작값을 변경할 수 있습니다.
• 테이블 정보 조회
DESCRIBE 테이블명; // "DESC 테이블명;"
• 테이블 삭제
DROP TABLE 테이블명;
• 테이블 수정
ALTER TABLE 테이블명 ADD COLUMN 필드명 데이터 타입;
ALTER TABLE table_name ADD COLUMN ex_column varchar(32) NOT NULL;
ALTER TABLE 테이블명 MODIFY COLUMN 필드명 데이터 타입;
ALTER TABLE table_name MODIFY COLUMN ex_column varchar(16) NULL;
ALTER TABLE 테이블명 DROP COLUMN 필드명;
ALTER TABLE table_name DROP COLUMN ex_column;
ALTER TABLE 테이블명1 RENAME 테이블명2;
ALTER TABLE table_name1 RENAME table_name2;
레코드
• 레코드 조회
SELECT * FROM 테이블명; // * 를 사용하면 테이블의 모든 데이터 조회
SELECT 필드명1, 필드명2 FROM 테이블이름; // 필드명1,2만 조회
SELECT * FROM 테이블이름 WHERE 필드명 = '내용'; // 해당 필드에서 값이 '내용'인 레코드 조회
SELECT * FROM 테이블이름 WHERE 필드명 BETWEEN 00:00:00 AND 12:00:00 // 00시~12시 사이
SELECT * FROM 테이블이름 WHERE 필드명 IN (A, B); // 괄호 내의 일치하는 값이 있다면 조회
SELECT * FROM 테이블이름 WHERE 필드명 LIKE '%문자열%'; // 문자열 포함된 레코드 조회
SELECT * FROM 테이블이름 WHERE 필드명 IS NULL; // 또는 "IS NOT NULL"
SELECT COUNT(*) FROM 테이블명 WHERE 필드명='내용'; // 해당 필드에서 값이 '내용'인 레코드 개수
SELECT * FROM Customers WHERE country='KR';
SELECT * FROM Customers WHERE id='asd111';
SELECT * FROM Costomers ORDER BY age; // 오름차순 정렬
SELECT * FROM Costomers ORDER BY age DESC; // 내림차순 정렬
SELECT DISTINCT 필드명 FROM 테이블이름; // 해당 필드 기준으로 중복된 레코드제거
// Info 데이터베이스의 Users 테이블에서 userName이 'A'로 시작하는 레코드들의 userId, userName 필드 조회
SELECT userId, userName FROM Info.Users WHERE userName LIKE 'A%'
SELECT COUNT(*) FROM Customers WHERE age='25';
• 레코드 추가
INSERT INTO 테이블명 (필드명1, 필드명2) VALUES (필드값1, 필드값2); // 테이블에 새 레코드 추가
INSERT INTO 목적지테이블명 SELECT * FROM 출발지테이블명; // 모든 필드 복사
INSERT INTO 목적지테이블명 (필드1,필드2,필드3) SELECT 필드1,필드2,필드3 FROM 출발지테이블명; // 지정 필드 복사
INSERT INTO Customers (userName, age) VALUES ('John', '25'), ('coco', '27');
• 레코드 수정
UPDATE 테이블명 SET 필드명1=필드값1, 필드명2=필드값2 WHERE 조건;
UPDATE Reservation SET RoomNum = 2002 WHERE Name = '홍길동';
• 레코드 삭제
DELETE FROM 테이블명 WHERE 조건;
DELETE FROM Reservation WHERE Name = '홍길동';
조인
• 왼쪽 외부 조인 (left outer join)
SELECT * FROM A
LEFT JOIN B ON A.key = B.key
• 오른쪽 외부 조인 (right outer join)
SELECT * FROM A
RIGHT JOIN B ON A.key = B.key
• 내부 조인 (inner join)
SELECT * FROM A
INNER JOIN B ON A.key = B.key
• 왼쪽 안티 조인 (left anti join)
SELECT * FROM A
LEFT JOIN B ON A.key = B.key
WHERE B.key IS NULL
• 오른쪽 안티 조인 (right anti join)
SELECT * FROM A
RIGHT JOIN B ON A.key = B.key
WHERE A.key IS NULL
• 전체 조인 (full outer join)
SELECT * FROM A
FULL OUTER JOIN B ON A.key = B.key
• 전체 조인 변형 (full outer join 변형)
SELECT * FROM A
FULL OUTER JOIN B ON A.key = B.key
WHERE A.key IS NULL OR B.key IS NULL
학습에 많은 도움이 된 링크를 참조했습니다. 🙂
참조 및 출처