서브 쿼리(Sub Query)
- 다른 SELECT문에 삽입된 SELECT문이다.
- 간단한 명령문으로 강력한 기능을 제공하는 명령문 작성이 가능하다.
- 테이블 자체 데이터에 종속된 조건을 사용하여 테이블에서 행을 선택할 때 유용하다.
- 일반적으로 서브 쿼리가 먼저 실행되고, 그 결과를 사용하여 메인 쿼리에서 사용한다.
서브 쿼리의 사용
- 괄호로 묶어서 사용한다.
- 일반적으로 서브 쿼리에서는 ORDER BY절을 사용하지 않는다.
- 단일 행 연산자(=, >, < 등)와 복수 행 연산자(IN, ANY, ALL 등)를 사용한다.
서브 쿼리 사용 가능 위치
- SELECT
- FROM
- WHERE
- HAVING
- ORDER BY
- UPDATE문의 SET
- INSERT문의 INTO
WHERE절 서브 쿼리
- ex) K02 팀의 평균 키보다 큰 선수들 조회
1
2
3
4
5
6
7
8
9
|
SELECT
player_name,
team_id,
height
FROM player
WHERE height > (SELECT AVG(height)
FROM player
WHERE team_id = 'K02');
|
HAVING절의 서브 쿼리
- ex) K02 팀의 평균 키보다 큰 팀의 팀ID와 평균 키 조회
1
2
3
4
5
6
7
8
9
|
SELECT
team_id,
AVG(height)
FROM player
GROUP BY team_id
HAVING AVG(height) > (SELECT AVG(height)
FROM player
WHERE team_id = 'K02');
|
다중 행 서브 쿼리 사용
- IN : 목록에 있는 임의의 값과 동일
- ex) '박동우'와 같은 포지션에 있는 선수의 이름과 포지션 조회
1
2
3
4
5
6
7
|
SELECT
player_name,
position
FROM player
WHERE position IN (SELECT position
FROM player
WHERE player_name = '박동우');
|
- ANY : 반환되는 각각의 값과 개별 비교
- ex)
1
2
3
4
5
6
7
8
9
|
SELECT
player_name,
team_id,
position
FROM player
WHERE position <> 'FW'
AND height > ANY (SELECT height
FROM player
WHERE position = 'FW');
|
- ALL : 서브 쿼리에 의해 반환되는 모든 값과 비교
- ex)
1
2
3
4
5
6
7
8
9
|
SELECT
player_name,
team_id,
position
FROM player
WHERE position <> 'FW'
AND height > ALL (SELECT height
FROM player
WHERE position = 'FW');
|
오늘의 한 줄 : 오라클에 익숙해진다.
출처 : SK 동반성장 아카데미, 비전공자를 위한 SQL 입문, 「서브쿼리」
'공부 > SQL' 카테고리의 다른 글
[SQL] INSERT ˙ UPDATE ˙ DELETE 구문 사용 (0) | 2019.12.05 |
---|---|
[SQL] 인라인뷰와 스칼라 서브쿼리 (0) | 2019.12.05 |
[SQL] 조인 문장 및 집합 연산자 (0) | 2019.12.04 |
[SQL] 조인 처리과정 이해 및 기본 조인 문장 (0) | 2019.12.03 |
[SQL] 윈도우 함수 (0) | 2019.12.03 |