
프로그래머스 SQL 고득점 kit를 풀던 중 MySQL에 WITH 절에 대한 부분이 문제에 필요하여 찾아보게되었고, 해당 내용에 대해서 처음 알게되어 포스팅을 작성하였습니다.
📜 공식 문서
서브쿼리를 미리 만들어 놓고 재사용이 가능한 임시 데이터 SET을 생성하기 위해 사용되는 공통 테이블 표현식(CTE, Common Table Excepression)입니다.
WITH 절을 사용함으로써, 쿼리 자체를 단순화하고 가독성을 높일 수 있다는 장점이 있습니다.
기본 표현
WITH [cte_name] AS (
SELECT [column_name(s)]
FROM [table_name]
WHERE [condition]
)
SELECT [column_name(s)]
FROM [table_name]
JOIN [cte_name] ON [join_condition]
WHERE [condition];
위에서 cte_name은 별칭으로 서브쿼리에서 반환된 결과를 참조하는 임시 테이블명입니다.
서브쿼리 내에서 SELECT문을 사용하여 데이터를 검색하고, 해당 결과 집합을 cte_name으로 정의한 CTE에 저장합니다. 그 다음 CTE를 메인 쿼리에서 참조하여 추가 데이터를 가져올 수 있습니다.
WITH SPECIALIST AS (
SELECT NAME, CAREER, JOB_TITLE
FROM EMPLOYEES AS E
JOIN DEPARTMENTS AS D ON E.DEPARTMENT_ID = D.DEPARTMENT_ID
WHERE DEPARTMENT_NAME = 'ELECTROMAGNETIC'
)
SELECT NAME, CAREER, JOB_TITLE
FROM SPECIALIST;
위 예제는 부서명이 'ELECTROMAGNETIC'인 모든 직원의 이름, 경력, 직책을 조회하기 위해 SPECIALIST라는 CTE를 정의하였습니다. 이후에 CTE를 메인 쿼리에서 참조하여 결과를 출력해줍니다.
위처럼 WHEN절은 CTE로 서브쿼리에서 조회된 결과 데이터를 재사용할 수 있어 코드 중복을 줄여주고 가독성을 높여주는데 도움이 됩니다.