09-13 11:28
Notice
Recent Posts
Recent Comments
Link
«   2025/09   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
Archives
관리 메뉴

기록을 합시다.

[Oracle] With문 VS Select 서브 쿼리 본문

공부/DB

[Oracle] With문 VS Select 서브 쿼리

울집고양이세마리 2023. 12. 16. 22:35

업무 하면서 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);

비교:

  1. 가독성:
    • SELECT 서브쿼리를 사용한 경우, 중첩된 구조로 인해 가독성이 떨어질 수 있다.
    • WITH 절을 사용한 경우, CTE를 사용하여 논리적인 단계로 쿼리를 나누므로 가독성이 향상된다.
  2. 유지보수성:
    • 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 문으로 작성하는 것이 더 좋은 것 같다.

Comments