본문 바로가기

개발/DB

[mssql] 서브쿼리뜻 ANY, ALL 사용법 예제

반응형

서브쿼리란 ? 하나의 쿼리문 안에 또 다른 쿼리문이 들어 있는 것이다.

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

180 

 2

A

185

 3

181 

 4

170

 5

E

187 




ANY를 사용할 경우 서브쿼리 결과 중 한개만 만족해도 된다.

1
2
3
SELECT * 
FROM USER 
WHERE height >= ANY (SELECT height FROM USER WHERE name = 'A' ) ;
cs

결과 :  180보다 크거나 같고 또는 185보다 크거나 같은 사람이 모두 출력

   

이름 

키 

180 

2

185 

181 

4

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