서브쿼리(Sub Query) 란?
두 개 이상의 SQL 명령문을 하나의 SQL명령문으로 연결하여 처리하는 방법
서브 쿼리 종류
단일행 서브쿼리
- 단하나의 행만 검색하여 반환
- 단일행 비교 연산: =, >, >=, <, <>, <=
다중행 서브쿼리
- 서브쿼리에서 반환되는 결과행이 하나 이상일 때 사용하는 서브쿼리
- IN: 하나라도 일치하면 참
- ANY, SOME: 하나이상 일치하면 참
- ALL: 모든값이 일치하면 참, max와 같은 뜻
- EXISTS: 하나라도 존재하면 참 -> 성능개선할 수 있음. 한행이라도 존재하면 나타나고, 아니면 안나타줌.
- NOT EXISTS: EXISTS의 상반되는 연산자
-- IN
SELECT name, grade, deptno
FROM student
WHERE deptno IN ( SELECT deptno
FROM department
WHERE college = 100);
-- ANY
SELECT studno, name, height, grade
FROM student
WHERE height > ANY (SELECT height
FROM student
WHERE grade = '4');
-- ALL: max와 같은 의미,
SELECT studno, name, height, grade
FROM student
WHERE height > ALL (SELECT height
FROM student
WHERE grade = '4');
-- EXISTS
SELECT profno, name, sal, comm, position
FROM professor
WHERE EXISTS (SELECT position
FROM professor
WHERE sal > 450);
PAIRWISE 다중 컬럼 SubQuery
SELECT name, grade, weight
FROM student
WHERE (grade, weight) IN (SELECT grade, MIN(weight)
FROM student
GROUP BY grade);
UNPAIRWISE 다중 컬럼 SubQuery
칼럼을 쌍으로 묶어서 동시에 비교하는 방식
SELECT name, grade, weight
FROM student
WHERE grade IN (SELECT grade
FROM student
GROUP BY grade)
AND weight IN (SELECT MIN(weight)
FROM student
GROUP BY grade);
상호연관 SubQuery
칼럼별로 나누어서 비교한 후, AND 연산을 하는 방식
SELECT name, deptno, height
FROM student s1
WHERE height > ( SELECT AVG(height)
FROM student s2
WHERE s2.deptno = s1.deptno)
ORDER BY deptno;
'Database' 카테고리의 다른 글
[PL/SQL] Function, Procedure (0) | 2019.09.11 |
---|---|
[Oracle] 조건 검색 - WHERE 절 (0) | 2019.09.10 |
[Oracle] ERROR: ORA-00937 (0) | 2019.09.10 |
[Oracle] DML(Data Manipulation Language) - INSERT, UPDATE, DELETE, MERGE (0) | 2019.09.09 |
[Database] 데이터 베이스 개념적 구조, DDL / DML / DCL 분류 (0) | 2019.09.04 |