티스토리 뷰

Sql

서브쿼리

pakker 2021. 3. 28. 13:21

1. 다중 행 서브쿼리

서브쿼리의 결과가 2건 이상 반환 될 수 있다면 반드시 다중 행 비교 연산자와 함께 사용 해야 한다. 

그렇지 않으면 sql 문은 오류를 반환한다.

연산자 내 용
IN (서브쿼리) 서브쿼리의 결과에 존재하는 임의의 값과 동일한 조건을 의미 (multiple or 조건)
비교연산자 ALL (서브쿼리) 서브쿼리의 결과에 존재하는 모든 값을 만족하는 조건을 의미한다.
비교 연산자로 ">"를 사용 했다면 메인 쿼리는 서브쿼리의 모든 결과 값을 만족 해야 하므로, 서브쿼리 겨로가의 최대값보다 큰 모든 건이 조건을 만족한다.
비교연산자 ANY (서브쿼리) 서브쿼리의 결과에 존재하는 어느 하나의 값이라도 만족하는 조건을 의미한다.
비교 연산자로 ">"를 사용 했다면 메인 쿼리는 서브쿼리의 값들 중 어떤 값이라도 만족하면 되므로, 서브쿼리의 결과의 최소 값보다 큰 모든 건이 조근을 만족한다. ( SOME 은 ANY와 동일 )
EXIST (서브쿼리) 서브쿼리의 결과를 만족하는 값이 존재하는지 여부를 확인하는 조건을 의미한다. 조건을 만족하는 건이 여러건이더라도 1건만 찾으면 더 이상 검색하지 않는다.

 

2. 다중 칼럼 서브쿼리

소속팀 별 키가 가장 작은 사람들의 정보를 출력하는 문제를 가지고 다중칼럼 서브쿼리 작성

select TEAM_ID 팀코드,PLAYER_NAME 선수명
from PLAYER
where (TEAM_ID, HEIGHT) IN (	select TEAM_ID, MIN(HEIGHT)
								from PLAYER
                                group by TEAM_ID)

3. 연관 서브쿼리

서브쿼리 내에 메인쿼리 칼럼이 사용된 서브쿼리. EXISTS 서브쿼리는 항상 연관 서브쿼리로 사용됨.

4. 그밖의 위치에서 사용되는 서브쿼리

4-1. select 절의 서브쿼리 : scalar subquery(한행 한컬럼만을 반환하는 서브쿼리, 결과가 2건 이상 반환되면 오류 발생)

4-2. from 절의 서브쿼리 : inline view 

-> from 절은 테이블 이므로 서브쿼리의 결과가 마치 동적으로 생성된 테이블인 것처럼 사용 할 수 있음

-> 서브쿼리의 칼럼은 메인 쿼리에서 사용 할 수 없다. 하지만 inline view는 join한것과 같은 보통 테이블이므로 자유롭게 사용 가능하다.

-> inline view에서는 orderby 절을 사용 할 수 있다.

4-3. having 절의 서브쿼리 : 그룹함수와 함꼐 사용 될 때 그룹핑된 결과에 대해 부가적은 조건을 주기 위해서 사용함

4-4. update 문의 set 절의 서브쿼리 

-> ex. 현재 TEAM 테이블에는 STADIUM_NAME 컬럼이 없다. TEAM 테이블에 STADIUM_NAME을 추가 하였다고 가정하면. TEAM테이블에 추가된 STADIUM_NAME의 값을 STADIUM 테이블을 이용하여 변경 하고 자 할 때 다음과 같이 SQL문을 작성 할 수 있다.

-> 서브쿼리를 사용한 벼경 작업을 할 떄 서브쿼리의 결과가 null을 반환할 경우 해당 컬럼의 결과가 null이 될 수 있기 때문에 주의해야 한다.

update TEAM a
set a.ETEAM_NAME = 
(select x.STADIUM_NAME
from STADIUM x
where x.STADIUM_ID = a.STADIUM_ID)

4-5. insert 문의 values 절의 서브쿼리

insert into PLAYER(PLAYER_ID, PLAYER_NAME, TEAM_ID)
values((select TO_CHAR(max(TO_NUMBER(PLAYER_ID))+1) from PLAYER), '김먀먀', 'k06');

 

'Sql' 카테고리의 다른 글

그룹함수 - cube  (0) 2021.03.29
그룹 함수-rollup, rollup orderby, grouping  (0) 2021.03.29
직관적인 JOIN 설명  (0) 2021.03.15
sql 문에 if 쓸때 주의사항  (0) 2020.11.17
trigger(트리거) 사용법  (0) 2018.11.15
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
글 보관함