SQL 17 - subquery

민정윤·2024년 10월 8일
0

SQL Subquery

Subquery

서브쿼리 = 하나의 서SQL 문에 포함되어 있는 또 다른 sql 문

  • 메인쿼리에 서브쿼리가 들어가 있는 종속적인 관계
  • sub 쿼리는 main 쿼리의 컬럼을 사용할 수 있음 O.
  • 하.지.만 main 쿼리는 sub쿼리의 컬럼 사용할 수 없음 X.

서브쿼리 사용법

  • subquery 괄호로 묶어서 사용해주기
  • 단일 행 / 복수 행 비교 연산자와 함께 사용하기
  • subquery애는 order by 사용 X

서브쿼리 종류

  • 스카라 서브쿼리 (Scalar Subquery) - SELECT 절에 사용
  • 인라인 뷰 (Inline View) - FROM 절에 사용
  • 중첩 서브쿼리 (Nested Subquery) - WHERE 절에 사용

Scalar Subquery

Scalar Subquery

  • 하나의 Column 반환
  • 컬럼이 리턴값이라서 SELECT 절에서 사용!!

<기본 구조>

Inline View

Inline View

  • 인라인뷰 서브쿼리 결과값은 Table로 인식
  • 리턴값을 view table이라고 하며 테이블이라서 FROM 절에서 사용!!
  • 메인쿼리에서는 인라인 뷰에서 조회한 Column 만 사용 가능

<기본 구조>

Nested Subquery (중첩 서브쿼리)

Nested Subquery (중첩 서브쿼리)

  • WHERE 절에서 사용하는 서브쿼리

Nested Subquery (중첩 서브쿼리)
1. Single Row = 하나의 열을 검색하는 서브쿼리
2. Multiple Row - 하나 이상의 열을 검색하는 서브쿼리
3. Multiple Column - 하나 이상의 행을 검색하는 서브쿼리

Single Row (Nested Subquery)

하나의 열 column 검색 = 결과값 하나!

서브쿼리가 비교연산자( =, >, >=, <, <=, <>, !=)와 사용되는 경우,
서브쿼리는 결과값 = 한 개

<기본 구조>

주의할 점

  • 결과값이 두 개 이상의 row인 경우 error!
  • 괄호 없으면 error

Multiple Row (Nested Subquery)

Multiple Row 종류

IN | EXISTS | ANY | ALL

Multiple Row - IN

  • IN = 서브쿼리 결과 중에 포함 될 때

<기본 구조>

-> column_name이 서브쿼리 중에 있다면

Multiple Row - EXISTS

EXISTS = 서브쿼리 결과에 값이 있으면 반환

<기본 구조>

Multiple Row - ANY

ANY = 서브쿼리 결과 중에 최소한 하나라도 만족한다면 (비교연산자 사용)

<기본 구조>

-> column_names를 조회할 건데 이 컬럼 이름이 any 뒤의 subquery에 있다면 조회하겠다!

- 예제)

celeb 테이블에서 이름을 조회할 건데
이 이름이 = any 서브쿼리인 snl_host 테이블의 host에 있다면!

Multiple Row - ALL

ALL = 서브쿼리 결과를 모두 만족하면 (비교 연산자 사용)

- 예제)

any랑 subquery가 다름!!

서브쿼리 결과를 where절의 'name'이 모두 만족해야 하기 때문에 'id=1'로 조건 결과값을 하나로 제한

Multiple Column (Nested Subquery)

Multi Column Subquery (연관 서브쿼리)
= 여러 개의 컬럼 반환해주는 서브쿼리

<기본 구조>

  • where 절에서 column 여러 개를 IN 으로 비교하려고 하는 거니까 subquery 에서도 여러 개의 컬럼을 리턴값으로 반환해야 함!

0개의 댓글