서브쿼리
하나의 SQL 문에 포함된 또 다른 SQL 문
- 서브쿼리 -> 메인쿼리의 칼럼 모두 사용 가능
- 메인쿼리 -> 서브쿼리 칼럼 사용 불가
메인쿼리의 결과가 서브쿼리로 제공될 수도, 서브쿼리의 결과가 메인쿼리로 제공될 수도 있다.
서브쿼리 특징
1. 서브쿼리는 괄호로 감싼다.
2. 서브쿼리가 제일 먼저 실행된다.
3. 서브쿼리는 단일행/다중행 비교 연산자와 함께 사용된다.
4. 단일행 비교 연산자는 서브쿼리의 결과가 반드시 1건 이하
5. 다중행 비교 연산자의 서브쿼리는 결과 건수와 무관
6. 서브쿼리에서는 Order by 절을 사용할 수 없다. *Order by는 메인쿼리의 맨 마지막 문장에 위치해야함
동작하는 방식에 따른 서브쿼리 분류
비 연관 서브쿼리
- 서브쿼리가 메인쿼리의 칼럼을 가지고 있지 않은 형태
- 메인쿼리에 값을 제공하기 위해
연관 서브쿼리
- 서브쿼리가 메인쿼리의 값을 가지고 있는 형태
- 메인쿼리가 먼저 수행되고 읽혀진 데이터에서 서브쿼리에 조건이 맞는지 확인하는 용도
반환 데이터 형태에 따른 서브쿼리 분류
1. 단일행 서브쿼리
- 단일행 비교 연산자와 함께 사용 : =, <, >, <=, <> ...
2. 다중행 서브쿼리
- 다중행 비교 연산자와 함께 사용 : In, Any, All, Some, Exists ...
- In : 서브쿼리의 결과에 존재하는 임의의 값과 동일한 조건을 의미
- Any : 서브쿼리의 결과에 존재하는 모든 값을 만족하는 조건
- Any : 서브쿼리의 결과에 존재하는 어느 하나의 값이라도 만족하는 조건
- Exists : 서브쿼리의 결과를 만족하는 값이 존재하는지 여부를 확인, 1건이라도 조건을 만족하면 중단함.
3. 다중 컬럼 서브쿼리
- SQL Server 에선 지원 하지 않음
- 여러 컬럼을 반환하므로 동시에 비교 가능 - 서브쿼리와 메인쿼리의 컬럼 수와 컬럼 순서가 동일해야함
단일행 비교 연산자는 다중행 비교 연산자로 사용이 불가
다중행 비교 연산자는 단일행 비교 연산자로 사용이 가능
사용 위치에 따른 서브쿼리의 종류
1. Select : 스칼라 서브쿼리
Select t1.name, (Select t2.name From table2 t2)
From table1 t1
Where t1.Id = 'XXX';
2. Where : 스칼라 서브쿼리 / 일반 서브쿼리
Select * From table t
Where t.salary >= (Select AVG(t2.salary) From table2 t2);
3. From : 인라인 뷰 = 다이나믹 뷰 서브쿼리
- 뷰는 실제 데이터를 가지고 있지 않다. (다만 실제 데이터를 저장하고 있는 뷰를 생성하는 기능을 지원하는 DBMS 도 존재함)
- 독립성, 편리성, 보안성의 이점
4. Having : 일반 서브쿼리
스칼라 서브쿼리란?
- 하나의 값을 반환하는 서브쿼리
- 하나의 컬럼처럼 사용된다.
인라인 뷰 서브쿼리
- 서브쿼리가 하나의 테이블로 만들어져서 메인쿼리에서 이를 사용하여 From 절에서 사용되는 서브쿼리
- 가상의 테이블이므로 AS 로 별칭을 지정해야 함
서브쿼리 수행 순서 : From -> Where -> 서브쿼리 -> Select
With 절
- 서브쿼리를 미리 정의하여 복잡한 쿼리를 간단하게 만드는 방법
- 가독성을 높이고 성능을 향상시킨다.
'Web Study > DataBase' 카테고리의 다른 글
SQL - 실체 엔터티에 대해... (0) | 2023.12.11 |
---|---|
SQLD 그룹함수 (1) | 2023.11.20 |
SQLD - 계층형 질의 (0) | 2023.10.29 |
SQLD - 함수 - 단일행 함수 (0) | 2023.09.13 |
SQLD - Join 에 대해 (0) | 2023.09.10 |