Data Base/Oracle SQL

231018 Oracle SQL WITH문

잇꼬 2023. 10. 18. 17:33
728x90
반응형
SMALL

# 오류발생, INLINE VIEW 에서 생성한 가상테이블을 다시 호출시 오류

SELECT *
FROM ( SELECT department_id, count(*) cnt
       FROM hr.employees
       GROUP BY department_id ) d, ( SELECT MAX(cnt)FROM d ) m;

 

 

■ with 문(9i)
     a. 두 번 이상 반복되는 SELECT 문을 QUERY BLOCK(가상테이블)를 만들어서 사용한다.
     b. 성능을 향상시킬 수 있다.
     c. WITH (별칭) AS (SELECT문) 
     
WITH
    가상 테이블1(QUERY BLOCK) AS (SUBQUERY1),
    가상 테이블2(QUERY BLOCK) AS (SUBQUERY2),
    가상 테이블3(QUERY BLOCK) AS (SELECT * FROM 가상테이블1),
    ...
    가상 테이블N(QUERY BLOCK) AS (SUB QUERY)

SELECT *
FROM 가상테이블N, ...; 
(WHERE 조인조건술어 ..

AND 조건

GROUP BY 절

HAVING 절 ...)

WITH
dept_cnt as ( SELECT department_id, count(*) as cnt
              FROM hr.employees
              GROUP BY department_id ),
dept_cnt_max as ( SELECT MAX(cnt) max_cnt FROM dept_cnt )
SELECT d2.*, l.city, d1.cnt 인원수
FROM dept_cnt d1, hr.departments d2, hr.locations l
WHERE d1.department_id = d2.department_id 
AND d2.location_id = l.location_id
AND d1.cnt = ( SELECT max_cnt FROM dept_cnt_max ); /* 가장 많은 인원수 */

WITH 문 에서는 

별칭을 먼저 작성하고 나서 SELECT문 을 쓰게 되는 규칙이 쓰다. 

728x90
반응형
LIST