서브 쿼리의 결과가 2건 이상 반환 될 수 있다면, 반드시 다중 행 비교 연산자 ( IN, ALL, ANY, SOME) 와 함께 사용해야 한다.
지금 부터 살펴볼 것은 다중 행 서브 쿼리이다. 즉 서브쿼리 안에 ( select * from ) 을 해서 나온 결과값들이 이제 하나의 값이 아니라 2개 이상일 때 쓰이는 것이다.
- Any 조건
* 서브 쿼리 결과에 존재하는 값에 어느 하나의 값이라도 만족하면 이가 쓰임.
* return 값 : boolean true 인지 false 인지
SELECT ProductName
FROM Products
WHERE ProductID = ANY
(SELECT ProductID
FROM OrderDetails
WHERE Quantity = 10);
- ALL 조건
* 모든 sub query 의 value 가 모두 만족하면 all 조건이 쓰임.
* return 값 : boolean true 인지 false 인지
SELECT ProductName
FROM Products
WHERE ProductID = ALL
(SELECT ProductID
FROM OrderDetails
WHERE Quantity = 10);
이렇게 되면 모든 서브쿼리에 있는 값들이 만족해야 ALL 에 대한 RETURN 값이 true 인지 혹은 false 인지 나올 수 있겠죠..
아래는 이제 query 를 마음껏 연습해볼 수 있는 정말 유용한 사이트 w3 스쿨입니다.
www.w3schools.com/sql/trysql.asp?filename=trysql_select_all2&ss=-1
- 다중 칼럼 서브 쿼리
* 다중 칼럼 서브 쿼리는 서브 쿼리의 결과로 여러 개의 칼럼이 반환되 메인 쿼리의 조건과 동시에 비교되는 것을 의미
TEAM_ID 와 PLAYER_NAME 에 대한 컬럼이 2개 이상으로 서브쿼리의 반환값이 되었다.
아래 쿼리는 : 팀 에서 가장 작은 선수들을 뽑아온값이 서브 쿼리가 되고 그 이후가 이제 그걸 기준으로 ORDER_BY 를 통해 정렬
SELECT TEAM_ID AS 팀코드, PLAYER_NAME AS 선수명, POSITION AS 포지션, BACK_NO AS 백넘버,
HEIGHT_AS 키
FROM PLAYER
WHERE (TEAM_ID, HEIGHT) IN (SELECT TEAM_ID, MIN(HEIGHT) FROM PLAYER GROUP BY TEAM_ID)
ORDER BY TEAM_ID, PLAYER_NAME
'이유's Programming > DBMS' 카테고리의 다른 글
[ 3 -5 ] 계층형 질의 (0) | 2021.04.27 |
---|---|
[ 3- 4] 그룹 소계함수 - 보고서 작성을 훨씬 쉽고 매끄럽게! group by 와 order by 사용 / rollup 과 order by 함수 (0) | 2021.04.22 |
SQL 쿼리 - group by / having (0) | 2021.04.06 |
[ 4 - 3] 인덱스 종류 (0) | 2021.03.31 |
[ 4 -2 ] 인덱스 스캔 방식 - (0) | 2021.03.25 |