-- 실행 순서 예시 (주석으로 실행 순서 표시)
SELECT 이름, SUM(금액) AS 총액 -- (5)
FROM 거래 -- (1)
WHERE 날짜 >= '2024-01-01' -- (2)
GROUP BY 이름 -- (3)
HAVING SUM(금액) > 5000 -- (4)
ORDER BY 총액 DESC; -- (6)
-- ANSI 표준 (권장)
FROM A LEFT OUTER JOIN B ON A.id = B.id
-- Oracle 문법 (레거시 시스템에서 사용)
FROM A, B WHERE A.id = B.id(+)
-- LEFT JOIN 활용 예시
SELECT c.고객명, o.주문번호, o.주문금액
FROM 고객 c LEFT OUTER JOIN 주문 o
ON c.고객ID = o.고객ID;
NATURAL JOIN
OUTER JOIN 종류
INNER JOIN
-- CASE 활용 예시
SELECT
이름,
급여,
CASE
WHEN 급여 >= 8000000 THEN '상위'
WHEN 급여 >= 5000000 THEN '중위'
ELSE '하위'
END AS 급여등급
FROM 직원;
스칼라 서브쿼리
인라인 뷰
중첩 서브쿼리
-- 다양한 서브쿼리 활용 예시
SELECT
이름,
(SELECT 부서명
FROM 부서
WHERE 부서.코드 = 직원.부서코드) AS 부서,
급여
FROM 직원
WHERE 급여 > (SELECT AVG(급여) FROM 직원);
-- 다양한 분석 함수 활용
SELECT
이름,
부서,
급여,
RANK() OVER (PARTITION BY 부서 ORDER BY 급여 DESC) AS 부서내순위,
DENSE_RANK() OVER (ORDER BY 급여 DESC) AS 전체순위,
ROW_NUMBER() OVER (ORDER BY 급여 DESC) AS 일련번호
FROM 직원;
-- EXISTS 활용 예시
SELECT 고객명
FROM 고객 c
WHERE EXISTS (
SELECT 1
FROM 주문 o
WHERE o.고객ID = c.고객ID
AND o.주문금액 >= 1000000
);