티스토리 뷰
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 |