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
)