본문 바로가기
Do it! SQL 입문/이론

서브 쿼리

by Hwanii_ 2023. 7. 2.
728x90

04-2 서브 쿼리

p.162 ~ 173

 

1.

서브 쿼리 (subquery) 란 ?

쿼리 안에 포함되는 또 다른 쿼리를 의미 한다.

 

테이블을 조인 하지 않은 경우 : 다른 테이블과 일치하는 행 (row) 찾기.

 

테이블을 조인한 경우 : 조인 결과를 다시 조인할 때 사용.

 

2.

서브 쿼리의 특징 ?

 

1)

반드시 소괄호로 감싸 사용 한다.

 

2)

주 쿼리를 실행하기 전에 1번만 실행 된다.

 

3)

비교 연산자에 서브 쿼리를 사용하는 경우,

서브 쿼리는 반드시 오른쪽에 기술 해야 한다.

 

4)

내부에는 정렬 구문인 ORDER BY 문을 사용할 수 없다.

 

 

 

3.

WHERE 문에 서브 쿼리 사용 하기.

 

서브 쿼리 중에서도 WHERE 문에 사용 하는 서브 쿼리를

중첩 서브 쿼리 라고 한다.

 

중첩 서브 쿼리 는, 조건문의 일부로 사용 한다.

 

또 다른 SELECT 문을 사용한 결과를 주 쿼리의 조건값으로 사용 한다.

 

서브 쿼리를 비교 연산자

 

=,

<,

<=,

>,

>=,

<>

 

와 함께 사용할 때는 반드시 서브 쿼리의 반환 결과가 1건 이하 이어야 한다.

 

만약에, 서브 쿼리의 반환 결과가 2건 이상 이면 ?

 

다중 행 연산자를 사용 해야 한다.

 

다중 행 연산자

다중 행 연산자 설명
IN 서브 쿼리의 결과에 존재하는
임의의 값과 같은 조건 검색.
ANY 서브 쿼리의 결과에 존재하는
어느 하나의 값이라도 만족하는 조건 검색.
EXISTS 서브 쿼리의 결과를 만족하는
값이 존재하는지 여부 확인.
ALL 서브 쿼리의 결과에 존재하는
모든 값을 만족하는 조건 검색.

 

4.

단일 행 서브 쿼리

 

서브 쿼리의 결과가 1행만 반환되는 쿼리.

 

WHERE 문에 사용하는 단일 행 서브 쿼리의 기본 형식은 다음과 같다.

 

SELECT [ 열 이름 ]

FROM [ 테이블 ]

WHERE [ 열 ] = ( SELECT [ 열 ] FROM [ 테이블 ] )

 

5.

다중 행 서브 쿼리

 

서브 쿼리의 결과가 2행 이상 반환되는 쿼리.

 

1)

IN 문, NOT IN 문

 

WHERE 문에 사용하는 다중 행 서브 쿼리의 기본 형식은 다음과 같다.

 

SELECT [ 열 이름 ]

FROM [ 테이블 ]

WHERE [ 열 ] IN ( SELECT [ 열 ] FROM [ 테이블 ] )

 

WHERE 문에 사용한 IN 문에 NOT 연산자를 추가해서,

다른 테이블의 값과 일치하지 않는 행을 찾을 수도 있다.

 

SELECT [ 열 이름 ]

FROM [ 테이블 ]

WHERE [ 열 ] NOT IN ( SELECT [ 열 ] FROM [ 테이블 ] )

 

2)

ANY 문

 

ANY 문은 서브 쿼리 결과에서 값이 하나라도 만족하는 조건을 검색 한다.

 

서브 쿼리의 결과값이 여러 개 이여도, 일치 하는 모든 행을,

주 쿼리에서 검색해 결과를 반환 할 수 있다.

 

3)

EXISTS 문, NOT EXISTS 문

 

EXISTS 문은 조건의 결과값이 있는지 없는지를 확인 한다.

1 행이라도 있으면 TRUE 를 반환 하고,

없으면 FALSE 를 반환 한다.

 

즉,

TRUE를 반환 하면, 메인 쿼리를 실행 하고,

메인 쿼리에 작성된 전체 데이터를 검색 한다.

 

FALSE가 반환 되면, 메인 쿼리가 실행 되지 않고, 

아무것도 나타나지 않는다.

 

NOT EXISTS 문은 EXISTS 문과 반대로 작동 한다.

 

4)

ALL 문

 

서브 쿼리와 자주 사용 하지 않는다.

 

서브 쿼리 결과값에 있는 모든 값을 만족 하는 조건을,

주 쿼리에서 검색해서 결과값을 반환 한다.

 

 

 

 

 

6. 

FROM 문에 서브 쿼리 사용 하기.

 

FROM 문에 사용하는 서브 쿼리 결과는 조인이 가능 하다.

따라서, 쿼리를 논리적으로 격리 할 수 있다.

 

보통, 인라인 뷰 라고 한다.

 

FROM 문에 사용하는 서브 쿼리의 기본 형식은 다음과 같다.

 

SELECT [ 열 이름 ]

FROM [ 테이블 ] AS a

INNER JOIN ( SELECT [ 열 ] FROM [ 테이블 ] WHERE [ 열 ] = [ 값 ] )

AS b ON [ a.열 ] = [ b.열 ]

WHERE [ 열 ] = [ 값 ]

 

7.

SELECT 문에 서브 쿼리 사용 하기.

 

SELECT 문에 사용 하는 서브 쿼리는 반드시 1개의 행을 반환 해야 한다.

 

그래서,

 

SUM, COUNT, MIN, MAX 등의 집계 함수와 함께 사용 하는 경우가 많다.

 

하지만, 이렇게 하면, 성능 문제가 생기기 마련이라,

SELECT 문에서는 서브 쿼리를 집계 함수와 함께 사용 하지 않는게 좋다.

 

SELECT 문에 사용된 서브 쿼리는 스칼라 서브 쿼리 라고 한다.

 

스칼라 서브 쿼리는 1개 이상 사용 할 수 있다.

 

스칼라 서브 쿼리의 기본 형식은 다음과 같다.

 

SELECT [ 열 이름 ],

(SELECT < 집계 함수 > [ 열 이름 ] FROM [ 테이블 2 ]

WHERE [ 테이블2.열 ] = [ 테이블1.열 ] as 별칭

FROM [ 테이블 1 ]

WHERE [ 조건 ]

 

 

  

 

 

반응형

'Do it! SQL 입문 > 이론' 카테고리의 다른 글

테이블을 서로 통합하는 조인 2  (0) 2023.06.25
테이블을 서로 통합하는 조인  (0) 2023.06.21
SQL 시작하기  (0) 2023.06.21
SQL 시작하기  (0) 2023.06.18
나만의 SQL 실습 환경 만들기  (0) 2023.06.18