Sub Query
특징
Tip
- 하나의 쿼리 내 포함된 또 하나의 쿼리를 의미한다.
- 서브 쿼리는 반드시 괄호 안에 있어야 합니다.
SELECT
,FROM
,HAVING
,ORDER BY
절에 사용 가능합니다.INSERT
,UPDATE
,DELETE
문에도 사용 가능합니다.- 서브 쿼리에는
;
세미콜론을 붙이지 않아도 됩니다.
SELECT Sub Query
- 스칼라 서브쿼리 라고 합니다.
SELECT
절의 서브 쿼리는 반드시 결과 값이 하나의 값이어야 합니다.
문법
SELECT [컬럼 이름],
(
SELECT [컬럼 이름]
FROM [테이블 이름]
WHERE 조건식
)
FROM [테이블 이름]
WHERE 조건식;
예제
SELECT number, name
( SELECT height FROM ability WHERE number=25) AS height
FROM mypokemon
WHERE name='pikachu'
SELECT 절의 서브 쿼리는 반드시 결과 값이 하나의 값
FROM 절의 서브 쿼리
예제
SELECT number, height_rank
FROM
(
SELECT number, rank(), OVER(ORDER BY height DESC) AS height_rank
)
WHERE height_rank=3;
WHERE 절의 서브 쿼리
Tip
- 중첩 서브쿼리 라고도 합니다.
WHERE
절의 서브 쿼리는 반드시 결과 값이 하나의 컬럼 이어야 합니다.(EXISTS
)- 하나의 컬럼에는 여러 개의 값이 존재할 수 있습니다.
- 연산자와 함께 사용합니다.
- 보통
WHERE [컬럼 이름][연산자][서브쿼리]
형식으로 사용합니다.
- 보통
문법
SELECT [컬럼 이름]
FROM [테이블 이름]
WHERE [컬럼 이름][연산자] (
SELECT [컬럼 이름]
FROM [테이블 이름]
WHERE 조건식
)
연산자 | 활용 | 의미 |
---|---|---|
= |
A = [서브 쿼리] |
A와 [서브쿼리] 의 결과 값이 같다 |
!= |
A != [서브 쿼리] |
A와 [서브쿼리] 의 결과 값이 같지 않다 |
> |
A > [서브 쿼리] |
A와 [서브쿼리] 의 결과 값보다 크다 |
>= |
A >= [서브 쿼리] |
A와 [서브쿼리] 의 결과 값 보다 크거나 작다 |
< |
A < [서브 쿼리] |
A와 [서브쿼리] 의 결과 값 보다 작다 |
<= |
A <= [서브 쿼리] |
A와 [서브쿼리] 의 결과 값보다 작거나 같다 |
비교 연산자만 사용 시,
WHERE
절의 서브 쿼리는 반드시 결과 값이 하나의 값이어야 한다.주요 연산자
Note
- 주요 연산자 사용 시, WHERE절의 서브 쿼리는 반드시 결과값이 하나의 컬럼이어야 합니다.
- 단, EXISTS 는 단독으로 사용하며, 결과 값이 여러 컬럼이어도 됩니다.
예제1
- 키가 평균 키보다 작은 포켓몬의 번호를 가져와달라
SELECT number
FROM ability
WHERE height < ( SELECT AVG(height) FROM ability);
결과
! 200
예제2
- 공격력이 모든 전기 포켓몬의 공격력보다 작은 포켓몬의 번호를 가져와 주세요
SELECT number
FROM ability
WHERE attack < ALL(SELECT attack FROM ability WHERE type='electric');
ALL
<
작다 와 사용 :[서브 쿼리]
최솟값보다 작은 지 확인하는 연산자>
크다 와 사용 :[서브 쿼리]
최댓값보다 큰지 확인하는 연산자
예제3
- 방어력이 모든 전기 포켓몬의 공격력보다 하나라도 큰 포켓몬의 번호를 가져와주세요
SELECT number
FROM ability
WHERE defense > ANY(SELECT attack FROM ability WHERE type='electric');
ANY
<
와 사용 :[서브 쿼리]
의 최댓값보다 작은 지 확인하는 연산자>
와 사용 :[서브 쿼리]
의 최솟값보다 큰 지 확인하는 연산자
예제4
- bug 타입 포켓 몬이 있다면, 모든 포켓몬의 번호를 가져와 주세요
SELECT number
FROM ability
WHERE EXISTS(SELECT * FROM ability WHERE type='bug');