💡WITH절
WITH <Sub Query>]
SELECT column_list
FROM table_name
[WHERE search_condition]
[GROUP BY group_by_expression]
[HAVING search_condition]
[ORDER BY order_ex
with절은 인라인 뷰(from절의 서브 쿼리)에 이름을 붙이는 기술이다.
from절의 서브 쿼리는 1회용 테이블이므로 이름 없는 테이블이고, from 테이블은 N회용 테이블이므로 이름 있는 테이블이다
with절은 전자의 from절의 서브 쿼리에 대한 작업을 한다.
WITH절의 사용
with 임시테이블명 as (서브 쿼리)
select문;
WITH절로 변환할 수 있는 쿼리
SELECT * FROM (SELECT name, buseo, jikwi FROM tblInsa WHERE city = '서울');
from절에 select가 들어 있으면 언제든지 with절로 변환할 수 있다.
해당 쿼리를 with절로 변환해 보도록 하자.
WITH seoul AS (SELECT name, buseo, jikwi FROM tblInsa WHERE city = '서울')
SELECT * FROM seoul;
서브 쿼리들을 위로 모두 빼자 가독성이 높아졌다.
WITH절의 조인
내부 조인
SELECT * FROM (SELECT name, age, couple FROM tblMen WHERE weight < 90) m
INNER JOIN (SELECT name, age, couple FROM tblWomen WHERE weight > 60) w
ON m.couple = w.name;
WITH절의 내부 조인
WITH m AS (SELECT name, age, couple FROM tblMen WHERE weight < 90),
w AS (SELECT name, age, couple FROM tblWomen WHERE weight > 60)
SELECT * FROM m
INNER JOIN w
ON m.couple = w.name;
남자의 몸무게가 90 미만, 여자의 몸무게가 60 이상인 회원을 출력한다고 할 때, 마찬가지로 WITH절에 서브 쿼리를 모두 옮겼다.
아래의 메인 쿼리에서는 inner join 작업만을 해주면 된다.