본문 바로가기
Web Study/DataBase

SQLD - 서브쿼리

by 쿠리의일상 2023. 10. 31.

서브쿼리

하나의 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