-
서브쿼리(SubQuery) 란?
Main Query에 반대되는 개념
하위 쿼리라고도 하며, 하나의 SQL 문장 내부에 존재하는 또 다른 SELECT 문장
SELECT, INSERT, DELETE, UPDATE 절에서 모두 사용 가능.
서브쿼리의 결과 집합을 메인 쿼리가 중간 결과값으로 사용.
서브쿼리 자체는 일반 쿼리와 다를 바가 없음.
단일행 서브쿼리(single-row subquery)
실행 결과가 단 하나의 행으로 나오는 서브쿼리
연산자 : >, >=, =, <=, <, <>, !=, ^=
SELECT * FROM EMP WHERE HIREDATE < ( SELECT HIREDATE FROM EMP WHERE ENAME = ‘SCOTT’) SELECT E.EMPNO, E.ENAME, E.SAL, D.DEPTNO, D.DNAME, D.LOC FROM EMP E, DEPT D WHERE E.DEPTNO = D.DEPTNO AND E.DEPTNO = 20 AND E.SAL > (SELECT AVG(SAL) FROM EMP);
다중행 서브쿼리(multiple-row subquery)
실행 결과 행이 여러 개로 나오는 서브쿼리
연산자 :
SELECT * FROM EMP WHERE SAL IN (SELECT MAX(SAL) FROM EMP GROUP BY DEPTNO); SELECT * FROM EMP WHERE SAL < ALL(SELECT SAL FROM EMP WHERE DEPTNO = 30); SELECT * FROM EMP WHERE SAL < ALL(SELECT SAL FROM EMP WHERE DEPTNO = 30);
인라인 뷰(inline view)
FROM 절에 사용하는 서브쿼리
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; 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;
스칼라 서브쿼리(scalar subquery)
SELECT 절에 사용하는 서브쿼리, SELECT 절에 하나의 열 영역으로 결과 출력
SELECT 절에 명시하는 서브쿼리는 반드시 하나의 결과만 반환되어야 함
SELECT EMPNO, ENAME, JOB, SAL, (SELECT GRADE FROM 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;
'개발 > DB' 카테고리의 다른 글
DB_Oracle,SQL 조인, 등가조인, 비등가조인, 자체조인, 외부조인 (0) 2021.11.08 DB_Oracle,SQL Having, ROLLUP, CUBE, GROUPING SETS, LISTAGG ~ WITHIN GROUP, PIVOT, UNPIVOT (0) 2021.11.05 DB_Oracle,SQL 롤(ROLE), 롤 부여 순서, 롤 데이터 사전, 롤 로직 (0) 2021.09.27 DB_Oracle,SQL OBJECT 종류, TABLE, VIEW, SEQUENCE, SYNONYM, INDEX SQL 개념, 사용법 (0) 2021.09.27 DB_Oracle,SQL 데이터 딕셔너리(Data Dictionary)의 정의. 개념. (0) 2021.09.27 댓글 (비로그인 댓글 허용하지 않습니다.)