반응형
서브쿼리란 ? 하나의 쿼리문 안에 또 다른 쿼리문이 들어 있는 것이다.
SELECT, FROM, WHERE, HAVING, ORDER BY절 등등 다양한 곳에서 사용 가능하다.
서브쿼리 안에 서브쿼리를 계속 넣는 형식도 가능.
- A의 키보다 크거나 같은 사람을 모두 구하여라.
1 2 3 4 5 | --1. A의 키를 찾는다. SELECT height FROM USER WHERE name = 'A' --(결과 : A의 height는 180) --2. A의 키를 이용해 A의 키보다 크거나 같은 사람 구하기. SELECT * FROM USER WHERE height >= 180 ; | cs |
* 서브쿼리를 이용 하면 ( 2번과 같은 결과도출)
1 2 3 | SELECT * FROM USER WHERE height >= (SELECT height FROM USER WHERE name = 'A' ) ; | cs |
※ ANY(=SOME) / ALL 사용
만약 아래 테이블과 같이 이름이 A인 사람이 여러명이라면 ?? 위와 같이 서브쿼리에 비교연산자만 쓸 경우 오류가 난다.
이때 서브쿼리 앞에 ANY, ALL을 사용해준다.
번호 |
이름 |
키 |
1 |
A |
180 |
2 |
A |
185 |
3 |
C |
181 |
4 |
D |
170 |
5 |
E |
187 |
ANY를 사용할 경우 서브쿼리 결과 중 한개만 만족해도 된다.
1 2 3 | SELECT * FROM USER WHERE height >= ANY (SELECT height FROM USER WHERE name = 'A' ) ; | cs |
결과 : 180보다 크거나 같고 또는 185보다 크거나 같은 사람이 모두 출력
|
이름 |
키 |
1 |
A |
180 |
2 |
A |
185 |
3 |
C |
181 |
4 | E | 187 |
1 2 3 4 5 6 7 | --아래 쿼리는 모두 같은 결과를 가진다. SELECT * FROM USER WHERE height IN ( SELECT * FROM USER WHERE name = 'A'); SELECT * FROM USER WHERE height IN ( '180', '185' ) ; SELECT * FROM USER WHERE height = ANY (SELECT * FROM USER WHERE name = 'A'); | cs |
ALL을 사용할 경우 서브쿼리 결과를 모두 만족해야 한다.
1 2 3 | SELECT * FROM USER WHERE height >= ALL (SELECT height FROM USER WHERE name = 'A' ) ; | cs |
결과 : 180보다 크거나 같고 그리고 185보다 크거나 같은 사람이 모두 출력
번호 | 이름 | 키 |
1 | A | 185 |
2 | E | 187 |
반응형
'개발 > DB' 카테고리의 다른 글
[mssql] GROUP BY / HAVING 사용법 (0) | 2019.03.16 |
---|---|
[mssql] 중복제거 DISTINCT 사용법 (0) | 2019.03.02 |
[mssql] BETWEEN..AND / IN / LIKE 사용법, 예제, 차이 (0) | 2019.02.24 |
트리거 (0) | 2019.02.23 |
[mysql] 기초 (0) | 2018.10.07 |