Data Definition Language
DDL은 데이터를 정의할 때 사용하는 언어이다
테이블을 만들 때 사용하는 CREATE
이나 테이블을 제거할 때 사용되는 DROP
등이
DDL에 포함된다
-> 데이터베이스의 테이블과 같은 오브젝트를 정의할 때 사용한다
Data Manipulation Language
DML은 데이터베이스에 데이터를 저장할 때 사용하는 언어이다.
INSERT
처럼 새로운 레코드를 추가할 때 사용되는 문법을 포함해 데이터를 삭제하는 나, 변경하는 UPDATE
가 DML에 포함된다
GRANT
나, 권한을 가져가는 REVOKE
등이 DCL에 포함된다SELECT
가 DQL에 해당하는데, 이렇게 언어를 분류했어도 DQL을 DML의 일부분으로 취급하기도한다.COMMIT
처럼 DML이 작업한 내용을 데이터베이스에 커밋하거나, ROLLBACK
처럼 커밋했던 내용을 다시 롤백하는 문법이 있다.SQL에서도 프로그래밍 언어의 if문과 같은 기능을 사용할 수 있다.
SELECT CASE
WHEN CustomerId <= 25 THEN 'GROUP 1'
WHEN CustomerId <= 50 THEN 'GROUP 2'
ELSE 'GROUP 3'
END
FROM customers
이 쿼리문은 CustomerId
필드값에 따라 3개의 그룹 ('GROUP1', 'GROUP2', 'GROUP3')으로 나뉜다.
CustomerId
필드값이 25이하인 경우엔 'GROUP1', 26부터 50사이인 경운 'GROUP 2', 51 이상은 'GROUP 3'로 분류한다
쿼리문을 작성할때, 다른 쿼리문을 포함할 수 있다.
이 때 포함되는 다른 쿼리문을 SUBQUERY 라 한다
서브쿼리는 실행되는 쿼리에 중첩으로 위치해, 정보를 전달한다
서브쿼르는 '소괄호'로 감싸야한다.
서브쿼리의 결과는 개별 값이나 레코드 리스트이다
그리고 서브쿼리의 결과를 하나의 칼럼으로 사용할수 있다.
SELECT CustomerId, CustomerId = (SELECT CustomerId FROM customers WHERE CustomerId = 2)
FROM customers
WHERE CustomerID < 6
IN 은 특정한 값이 서브쿼리에 있는지 확인할 수 있다.
다음 쿼리는 customers 테이블에서 'CustomerId'의 값이 서브쿼리에서 돌려받는 값에 속한 결과들만 조회하고있다.
SELECT *
FROM customers
WHERE CustomerId IN (SELECT CustomerId FROM customers WHERE CustomerId < 10)
만약
IN
대신NOT IN
을 사용한다면, 서브쿼리에서 조회된 10 미만을 제외한(10을 초과하는) 레코드를 조회한다.
EXISTS 또는 NOT EXISTS는 돌려받은 서브쿼리에 존재하는 레코드를 확인한다
만약 조회하려는 레코드가 존재한다면 참, 그렇지 않으면 거짓을 리턴한다
SELECT EmployeeId
FROM employee e
WHERE EXISTS (
SELECT 1
FROM customers c
WHERE c.SupportRepId = e.EmployeeId
)
ORDER BY EmployeeId
FROM에도 서브쿼리를 사용할 수 있다.
SELECT *
FROM (
SELECT CustomerId
FROM customers
WHERE CustomerID < 10
)