[SQLD] 서브쿼리

younghyun·2023년 6월 7일
0

SQLD

목록 보기
10/18

서브쿼리는 하나의 SQL 문 안에 포함되어 있는 또 다른 SQL문을 말한다.

  • 서브쿼리에서는 ORDER BY를 사용하지 못한다.
  • 서브쿼리가 사용 가능한 곳: SELECT, FROM, WHERE, HAVING, ORDER BY, INSERT문의 VALUES, UPDATE문의 SET

1. 반환되는 데이터 형태에 따른 서브쿼리 분류

단일행 서브쿼리

서브쿼리의 결과 건수가 반드시 1건 이하.
단일 행 비교 연산자( =, <. > <=, >=, <>) 와 함께 사용된다.

다중행 서브쿼리

서브쿼리 실행 결과가 여러 건.
IN, ALL, ANY, SOME, EXISTS 와 함께 사용된다.

  • IN - 서브쿼리의 결과에 존재하는 임의의 값과 동일한 조건
  • ALL - 서브쿼리의 결과에 존재하는 모든 값을 만족하는 조건
  • SOME, ANY - 서브쿼리의 결과에 존재하는 어느 하나의 값이라도 만족하는 조건
  • EXISTS - 서브쿼리의 결과를 만족하는 값이 존재하는지 여부를 확인하는 조건

다중 컬럼 서브쿼리

다중 컬럼 서브쿼리는 서브쿼리의 결과로 여러 개의 컬럼이 반환되어 메인쿼리의 조건과 동시에 비교되는 것을 의미한다.

서브쿼리와 메인쿼리에서 비교하고자 하는 컬럼 개수와 컬럼의 위치가 동일해야 한다.

sql server에서는 지원하지 않는 기능이다

SELECT TEAM_ID, PLAYVER_NAME, POSITION, BACK_NO , HEIGHT 
FROM   PLAYER
WHERE  (TEAM_ID, HEIGHT) IN (SELECT TEAM_ID, MIN(HEIGHT)
                             FROM  PLAYER
                             GROUP BY TEAM_ID)
ORDER BY TEAM_ID, PLAYER_NAME; 

2. 동작 방식에 따른 서브쿼리 분류

연관 서브쿼리

서브쿼리가 메인쿼리 컬럼을 가지고 있는 형태. 일반적으로 메인쿼리가 먼저 수행되어 읽혀진 데이터를 서브쿼리에서 조건이 맞는지 확인하고자 할 때 주로 사용된다.

EXISTS 서브쿼리는 항상 연관 서브쿼리로 사용된다.

비 연관 서브쿼리

서브쿼리가 메인쿼리 컬럼을 가지고 있지 않은 형태. 메인쿼리에 값을 제공하기 위한 목적으로 주로 사용된다.

[95번]
다중 컬럼 서브쿼리는 SQL Server에서 지원하지 않는다.
연관 서브쿼리는 서브쿼리가 메인쿼리 컬럼을 포함하고 있는 형태의 서브쿼리이다.
서브쿼리는 단일행 또는 복수행 비교 연산자와 함께 사용할 수 있다.

[99번]
비연관 서브쿼리는 주로 메인쿼리에 값을 제공하기 위해 사용한다.
메인 쿼리의 결과가 서브쿼리로 제공될 수도 있고, 서브 쿼리의 결과가 메인쿼리로 제공될 수도 있다.

그 밖의 위치에서 사용하는 서브쿼리

스칼라 서브쿼리

SELECT 절에 서브쿼리 사용하기

인라인뷰

FROM 절에서 서브쿼리 사용하기
인라인 뷰는 SQL문이 실행될 때만 임시적으로 생성되는 동적인 뷰이다.

독립성, 편리성, 보안성 보장
뷰(View)는 실제 데이터를 가지고 있지 않다.
뷰를 사용하기 위해서 해당 뷰의 이름을 FROM 절에 적어 사용해주면 된다.

[100번]
인라인 뷰: 서브쿼리가 FROM 절에서 안에서 사용되는 경우, 해당 서브쿼리를 '인라인뷰'라고 한다. FROM 절에서 사용된 서브쿼리의 결과가 하나의 테이블에 대한 뷰(View)처럼 사용된다.

profile
🌱 주니어 백엔드 개발자입니당

0개의 댓글