[DataBase] 다중열 서브쿼리
다중열 서브쿼리
다중열 서브쿼리는 서브쿼리의 SELECT 절에 비교할 데이터를 여러 개 지정하는 방식입니다 .
다음과 같이 메인쿼리에 비교할 열을 괄호로 묶어 명시하고 서브쿼리에서는 괄호로 묶은 데이터와 같은 자료형 데이터를 SELECT 절에 명시하여 사용합니다 .
SELECT * FROM EMP
WHERE(DEPTNO,SAL) IN (SELECT DEPTNO, MAX(SAL)
FROM EMP
GROUP BY DEPTNO);
FROM 절에 사용하는 서브쿼리와 WITH절
WHERE가 아닌 FROM 절에서도 서브쿼리를 사용할 수 있습니다 .
FROM 절에 사용하는 서브쿼리는 인라인 뷰라고 부르기도 합니다 .
인라인 뷰의 특징은 전체 데이터가 아닌 SELECT 문을 통해 일부 데이터를 먼저 추출해 온 후 별칭을 주어 다음과 같이 사용합니다 .
SELECT E10.EMPNO, E10.ENAME, E10.DEPTNO, DNAME, D.LOC
FROM (SELECT * FROM EMP WHERE DEPTNO = 10 ) E10,
(SELECT * FROM DEPT) D
WHERE E10.DEPTNO = D. DEPTNO ;
데이터 규모가 너무 크거나 현재 작업에 불필요한 열이 너무 많아 일부 행과 열만 사용하고자 할 때 유용합니다 .
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 절을 사용하는 것보다 다소 번거롭지만 , 여러 개의 서브쿼리가 몇백 줄이상 넘나드는 규모가 되었을 때 더 유용하게 사용할 수 있습니다 .
SELECT 절에 사용하는 서브쿼리
서브쿼리는 SELECT절에도 사용합니다 .
흔히 스칼라 서브쿼리 라고 부릅니다 .
이 서브 쿼리는 SELECT 절에 하나의 영역으로서 결과를 출력합니다 .
SELECT EMPNO, ENAME, JOB, SAL,
(SELECT GRADE
FROME SALGRADE
WHERE E.SAL BETWEEN LOSAL AND HISAL) AS SALGRADE,
DEPTNO,
(SELECT DNAME
FROM DEPT
WHERE E.DEPTNO = DEPT.DEPTNO) AS DNAME
FROM EMP E ;
SELECT 절에 명시하는 서브쿼리는 반드시 하나의 결과만 반환하도록 작성해야 합니다 .