서브 쿼리의 결과가 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
SQL Tryit Editor v1.6
WebSQL stores a Database locally, on the user's computer. Each user gets their own Database object. WebSQL is supported in Chrome, Safari, Opera, and Edge(79). If you use another browser you will still be able to use our Try SQL Editor, but a different ver
www.w3schools.com
- 다중 칼럼 서브 쿼리
* 다중 칼럼 서브 쿼리는 서브 쿼리의 결과로 여러 개의 칼럼이 반환되 메인 쿼리의 조건과 동시에 비교되는 것을 의미
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 |