다중열 서브쿼리
다중열 서브쿼리는 서브쿼리의 SELECT절에 비교할 데이터를 여러 개 지정하는 방식이다.
SELECT *
FROM EMP
WHERE (DEPTNO, SAL) IN (SELECT DEPTNO, MAX(SAL)
FROM EMP
GROUP BY DEPTNO);
FROM절에 사용하는 서브쿼리와 WITH절
앞서 살펴본 서브쿼리는 WHERE절에서 조건식 대상으로 사용했다. 그런데 FROM절 역시 WHERE절과 마찬가지로 서브쿼리를 사용할 수 있다. FROM절에 사용하는 서브쿼리는 인라인 뷰라고 부른다. 인라인 뷰는 특정 테이블 전체 데이터가 아닌 SELECT문을 통해 일부 데이터를 먼저 추출한 후 별칭을 주어 아래와 같이 작성할 수 있다.
SELECT E10.EMPNO, E10.ENAME, E10.DEPTNO, D.DNAME, D.LOC
FROM (SELECT * FROM EMP WHERE DEPTNO = 10) E10,
(SELECT * FROM DEPT) D
WHERE E10.DEPTNO = D.DEPTNO;
서브쿼리를 FROM절에 사용하는 방법은 테이블 내 데이터 규모가 너무 크거나 현재 작업에 불필요한 열이 너무 많아 일부 행과 열만 사용하고자 할 때 유용하다. 하지만 가독성이나 성능이 떯어질 수 있기 때문에 경우에 따라 WITH절을 사용하기도 한다.
WITH
[별칭1] AS (SELECT문 1),
[별칭2] AS (SELECT문 2),
...
[별칭n] AS (SELECT문 n)
SELECT
FROM 별칭1, 별칭2, 별칭3
...
위의 WITH절 기본형식은 보는 바와 같이 인라인 뷰가 따로 정의되어있어 메인쿼리와 서브쿼리의 구별이 쉽다. 직접 쿼리문을 짜서 WITH절을 확인해보자.
WITH
E10 AS (SELECT * FROM EMP WHERE DEPTNO = 10),
D AS (SELECT * FROM DEPT)
SELECT E10.EMPNO, E10.ENAME, E10.DEPTNO, D.DNAME, D.LOC
FROM E10, D
WHERE E10.DEPTNO = D.DEPTNO;
서브쿼리를 FROM절과 WITH절에 쓰면 결과는 같다. 하지만 쿼리문을 봤을 때 WITH이 가독성이 더 좋다는 걸 확인할 수 있다.
출처:Do it! 오라클로 배우는 데이터베이스 입문(저자:이지훈 출판사:이지스퍼블리싱)
'DB > Oracle' 카테고리의 다른 글
[DB/Oracle]오라클 실행계획 (0) | 2023.04.10 |
---|---|
[Oracle] 와일드카드 비교 (0) | 2022.11.30 |
[서브쿼리] 다중행 서브쿼리 (0) | 2022.02.15 |
[서브쿼리] 단일행 서브쿼리 (0) | 2022.02.14 |
[서브쿼리] 서브쿼리의 정의 (0) | 2022.02.14 |