기록을 합시다.
[Oracle] With문 VS Select 서브 쿼리 본문
업무 하면서 SQL을 짜다가, 서브 쿼리로 데이터를 가져오는 SQL을 짰었는데 부장님이 서브 쿼리보다는 WITH 문을 사용하는 것이 훨씬 빠르다고 알려주셨다. 그래서 따로 이렇게 포스팅을 해봄. ㅇㅅㅇ
1. SELECT 서브쿼리를 사용한 예제:
SELECT employee_name, department_id
FROM employees
WHERE department_id = (SELECT department_id FROM employees WHERE employee_id = 1);
2. WITH 절을 사용한 예제:
WITH DepartmentCTE AS
(
SELECT department_id
FROM employees
WHERE employee_id = 1
)
SELECT employee_name, department_id
FROM employees
WHERE department_id = (SELECT department_id FROM DepartmentCTE);
비교:
- 가독성:
- SELECT 서브쿼리를 사용한 경우, 중첩된 구조로 인해 가독성이 떨어질 수 있다.
- WITH 절을 사용한 경우, CTE를 사용하여 논리적인 단계로 쿼리를 나누므로 가독성이 향상된다.
- 유지보수성:
- WITH 절을 사용하면 필요한 부분만 수정하여 전체 쿼리를 수정하기 쉽다.
참고로, CTE(Common Table Expression) = With문
이다.
근데 다른 글을 읽어보니까
https://stackoverflow.com/questions/30078464/difference-between-with-clause-and-subquery
Difference between WITH clause and subquery?
What is the difference between WITH clause and subquery? 1. WITH table_name as ( ... ) 2. select * from ( select curr from tableone t1 left join tabletwo t2 on (t1...
stackoverflow.com
어차피 오라클 옵티마이저가 WITH문을 쓰든, 서브 쿼리를 쓰든 알아서 잘 최적화해서 수행해주는 모양이다.
아직 나는 쩌리기는 하지만;; 가끔 업무 하면서 기나긴 1000~2000줄의 SQL을 보게 되는 경우가 많다 ㄷㄷ; 그래서 웬만하면 우리 모두의 눈 을 위해서 서브쿼리보다는 WITH 문으로 작성하는 것이 더 좋은 것 같다.
'공부 > DB' 카테고리의 다른 글
ORA-29275 부분 다중 바이트 문자 오류 해결 (0) | 2023.10.19 |
---|---|
[SQL] ORACLE SQL 공부 -4- (2) | 2023.08.06 |
[SQL] ORACLE SQL 공부 -2- (0) | 2023.07.29 |
[SQL] ORACLE SQL 공부 -1- (0) | 2023.07.26 |
[docker] 팀원들이랑 사용할 oracle 도커 이미지 만들기 (1) | 2023.05.30 |
Comments