SQL Advanced

YoungJoon Suh·2022년 4월 8일
0

CASE 사용하기
SQL에서도 프로그래밍 언어의 if 문과 같은 기능을 사용할 수 있습니다. CASE를 사용하면, 특정 조건에 따라 다른 결과를 받을 수 있습니다.
SELECT CASE
WHEN CustomerId <= 25 THEN 'GROUP 1'
WHEN CustomerId <= 50 THEN 'GROUP 2'
ELSE 'GROUP 3'
END
FROM customers

SUBQUERY
쿼리문을 작성할 때, 다른 쿼리문을 포함할 수 있습니다. 이 때 포함되는 다른 쿼리문을 SUBQUERY(서브쿼리)라고 합니다. 서브쿼리는 실행되는 쿼리에 중첩으로 위치해, 정보를 전달합니다. 서브쿼리는 소괄호로 감싸야 합니다.
서브쿼리의 결과는 개별 값이나 레코드 리스트입니다. 그리고 서브쿼리의 결과를 하나의 칼럼으로 사용할 수 있습니다.
SELECT CustomerId, CustomerId = (SELECT CustomerId FROM customers WHERE CustomerId = 2)
FROM customers
WHERE CustomerId < 6

IN, NOT IN
IN은 특정한 값이 서브쿼리에 있는지 확인할 수 있습니다. 다음 쿼리는 customers 테이블에서 'CustomerId'의 값이 서브쿼리에서 돌려받는 값에 속한 결과들만 조회하고 있습니다.
SELECT *
FROM customers
WHERE CustomerId IN (SELECT CustomerId FROM customers WHERE CustomerId < 10)
최종 조회된 데이터의 'CustomerId'도 10이하 입니다.
만약 IN 대신 NOT IN을 사용한다면, 서브쿼리에서 조회된 10미만을 제외한 (10을 초과하는) 레코드를 조회합니다.

EXISTS
EXISTS 또는 NOT EXISTS는 돌려받는 서브쿼리에 존재하는 레코드를 확인합니다. 만약 조회하려는 레코드가 존재한다면 참(TRUE)을, 그렇지 않은 경우에는 거짓(FALSE)을 리턴합니다.
다음 쿼리문은 employees 테이블에서부터 'EmployeeeId' 필드를 조회합니다.
이 때 서브쿼리로 customers 테이블의 'SupportRepld'필드값과 employees 테이블의 'EmplyeeId'필드값을 비교해 일치하는 레코드들을 가져옵니다.
SELECT EmployeeId
FROM employees e
WHERE EXISTS (
SELECT 1
FROM customers c
WHERE c.SupportRepId = e.EmployeeId
)
ORDER BY EmployeeId

FROM
FROM에도 서브쿼리를 사용할 수 있습니다.
다음과 같이 쿼리문과 서브쿼리를 사용해 조회된 결과를 하나의 테이블이나 조회할 대상으로 지정해 사용할 수 있습니다.
SELECT *
FROM (
SELECT CustomerId
FROM customers
WHERE CustomerId < 10
)

profile
저는 서영준 입니다.

0개의 댓글