DataBase/MySQL

[MySQL] 서브쿼리/ any, some , all / 둘 중 하나만 만족, 둘 다 만족

자바칩 프라푸치노 2020. 11. 24. 17:03

 

 

1. 서브쿼리

1
2
3
4
5
select name, height
  from usertbl
  where height> (select height
                   from usertbl
                  where name = '김경호'); 
cs

height가 조건인데 그 조건이 쿼리문이다.

서브 쿼리문을 보면 usertbl테이블에서 name이 김경호인 height를 얻어서

괄호를 대체한다고 생각하면 된다.

김경호의 height가 177이라고 저장되어있다면

전체적으로 usertbl에서 height가 177 초과인 name, height컬럼을 얻고 싶은 것이다.

(usertbl에서 김경호보다 키가 큰 데이터의 name, height를 뽑아내고 있음)

 

1
2
3
4
5
 select name, height
  from usertbl
  where height> (select height
                   from usertbl
                  where addr = '경남'); 
cs

아까와 달리 이 쿼리문은 에러가 난다.

왜냐하면 addr이 '경남'인 데이터의 height가 하나가 아니기 때문에 무엇으로 비교할지 모호하기 때문이다.

 

1) any, some

1
2
3
4
5
 select name, height
  from usertbl
  where height> any(select height
                   from usertbl
                  where addr = '경남'); 
cs

or과 같은 개념이다.

'경남'이 addr인 데이터는 2개이다.

height는 173과 170이 있다. 둘중 하나라도 만족한다는 뜻이므로 170이 기준이 된다.

some도 같은 결과가 나온다.

1
2
3
4
5
select name, height
  from usertbl
  where height> some(select height
                   from usertbl
                  where addr = '경남'); 
cs

 

1
2
3
4
5
 select name, height
  from usertbl
  where height = any(select height
                     from usertbl
                     where addr = '경남');     
cs

d

여기서 any는 둘 중 하나라도 만족한다는 뜻이므로 170, 173 둘다 나온다.

any에 in이 들어가도 같은 결과가 나온다.

 

2) all

1
2
3
4
5
select name, height
  from usertbl
  where height> all(select height
                   from usertbl
                  where addr = '경남');                 
cs

and개념으로, 둘 다 만족이 되는 173을 기준으로 비교한다.

 

 

 

728x90