CASE
WHEN 조건
THEN '반환 값'
WHEN 조건
THEN '반환 값'
ELSE 'WHEN 조건에 해당 안되는 경우 반환 값'
END
예시
SELECT
idx,
CASE
WHEN type = '1'
THEN '의사'
WHEN type = '2'
THEN '장군'
WHEN type = '3'
THEN '왕'
ELSE '일반인'
END AS hero_type,
name
FROM hero_collection;
결과
서브쿼리란 하나의 SQL 문 안에 포함되어 있는 또 다른 SQL문이다.
SELECT CustomerId, CustomerId = (SELECT CustomerId FROM customers WHERE CustomerId = 2)
FROM customers
WHERE CustomerId < 6
IN은 특정한 값이 서브쿼리에 있는지 확인할 수 있다.
SELECT *
FROM customers
WHERE CustomerId IN (SELECT CustomerId FROM customers WHERE CustomerId < 10)
서브쿼리에서는 'CustomerId' 가 10 이하인 데이터를 돌려주기 때문에, 최종 조회된 데이터의 'CustomerId'도 10 이하이다.
만약 IN 대신 NOT IN 을 사용한다면, 서브쿼리에서 조회된 10 미만을 제외한(10을 초과하는) 레코드를 조회
EXISTS 또는 NOT EXISTS는 돌려받은 서브쿼리에 존재하는 레코드를 확인.
만약 조회하려는 레코드가 존재한다면 참(TRUE)을, 그렇지 않은 경우에는 거짓(FALSE)을 리턴
SELECT EmployeeId
FROM employees e
WHERE EXISTS (
SELECT 1
FROM customers c
WHERE c.SupportRepId = e.EmployeeId
)
ORDER BY EmployeeId
서브쿼리로 customers 테이블의 'SupportRepId' 필드값과 employees 테이블의 'EmployeeId' 필드값을 비교해 일치하는 레코드들을 가져온다.
FROM에도 서브쿼리를 사용할 수 있다.
SELECT *
FROM (
SELECT CustomerId
FROM customers
WHERE CustomerId < 10
)
다음과 같이 쿼리문과 서브쿼리를 사용해 조회된 결과를 하나의 테이블이나 조회할 대상으로 지정해 사용할 수 있다.