1. 서브 쿼리
1) 하나의 SQL문 안에 포함되어 있는 또 다른 SQL문을 말한다.
- 하나의 SQL문으로 풀 수 없는, 조금 더 복잡한 데이터를 추출할 때,
2) 서브 쿼리는 메인 쿼리의 칼럼을 모두 사용할 수 있지만, 메인 쿼리는 서브쿼리의 컬럼을 사용할 수 없다.
3) 서브 쿼리를 괄호로 감싸서 사용한다.
4) 서브 쿼리는 단일 행(SINGLE ROW)또는 복수 행(MULTIPLE ROW) 비교 연산자와 함께 사용 가능하다.
- 단일 행(SINGLE ROW) 비교 연산자는 반드시 1건 이하여야 한다.
- 복수 행(MULTIPLE ROW) 비교 연산자는 서브 쿼리의 결과 건수와 상관없다.
5) 서브 쿼리에서는 ORDER BY를 사용하지 못한다.
- ORDER BY 절은 메인 쿼리의 마지막 문제이 위치하여야 한다.
6) 서브 쿼리가 사용 가능한 위치
- SELECT, FROM, WHERE, HAVING, ORDER BY, INSERT문의 VALUES, UPDATE문의 SET
2. 서브쿼리 구분
1) 중첩 서브쿼리
- WHERE절
2) 인라인 뷰
- FROM절
3) 스칼라 서브쿼리
- SELECT절
3. 서브 쿼리 구분 2
1) 단일행 서브 쿼리
- 하나의 값을 리턴하는 서브 쿼리이다.
- 일반적인 연산자 모두 사용 가능하다. (=, >, <, AND, OR, NOT)
2) 다중행 서브 쿼리
- 리턴 값이 여러 개의 레코드이다.
- 결과를 처리하는 전용 연산자가 있다. (IN, ALL, ANY, EXISTS)
4. 연산자
1) ANY 연산자
- 값을 서브 쿼리에 의해서 반환된 값과 비교한다.
- 서브 쿼리의 값이 어떠한 값이라도 만족을 하면 조건이 성립한다.
- 여러 개 레코드의 OR 효과
- 메인 쿼리에서 가장 작은 값보다 큰 것만 추출한다.
2) ALL 연산자
- 서브 쿼리에 의해 반환된 값과 비교한다.
- 서브 쿼리의 모든 값이 만족을 해야만 조건이 성립된다.
- 여러 개의 레코드의 AND효과
- 메인 쿼리에서 가장 큰 값보다 큰 것만 추출한다.
3) IN / EXISTS 연산자
- 서브쿼리 내에 집합이 존재하는지에 대한 존재 여부만 판단한다.
- 결과값 중에 있는 것 중에서의 존재 여부이다.
- IN은 전체 레코드를 스캔한다. EXISTS는 존재 여부만 확인하고 스캔하지 않는다.
- 존재하면 TRUE, 존재하지 않으면 FALSE
- 연산 시 부하가 줄어든다.
'프로그래밍 > SQL' 카테고리의 다른 글
[SQL] 분석함수 문법 LAG LEAD RANK ROW_NUMBER DENSE_RANK (0) | 2022.10.08 |
---|---|
[SQL] 그룹 함수, Grouping sets(), Cube(), Rollup() (0) | 2022.10.02 |
[SQL] JOIN 데이터 유형과 유형 변환 방법 (0) | 2022.10.01 |
[SQL]집합연산자 UNION, UNION ALL, INTERSECT, EXCEPT (0) | 2022.09.30 |
[SQL] 데이터 함수 COMMIT, INSERT, UPDATE, UPDATE JOIN, DELETE, UPSERT, GROUP BY (0) | 2022.09.29 |