서브쿼리
SQL문 안에 포함된 SQL문
ex) 신장이 가장 큰 선수의 정보 조회
SELECT PLAYER_NAME, POSITION, HEIGHT
FROM PLAYER
WHERE HEIGHT = (SELECT MAX(HEIGHT) FROM PLAYER);
기준
> 결과 칼럼 / 행의 수
단일행 서브쿼리 / 다중행 서브쿼리
단일칼럼 서브쿼리 / 다중칼럼 서브쿼리
단일행 서브쿼리
서브쿼리의 결과 건수가 반드시 1건 이하이다.
단일행 비교 연산자(=, <, <=, >, >=, <>) 와 함께 사용한다. 결과가 2건 이상이면 오류 발생한다.
ex) '2007182'번 선수와 같은 팀에 속하는 선수의 이름, 포지션, 팀ID 출력
SELECT PLAYER_NAME, POSITION, TEAM_ID
FROM PLAYER
WHERE TEAM_ID =
(SELECT TEAM_ID
FROM PLAYER
WHERE PLAYER_ID = '2007182');
Q ) 사번 7499인 직원의 매니저를 사번 7369인 직원의 매니저로 변경하는 질의를 완성하시오.
UPDATE EMP SET MGR =
(SELECT MGR
FROM EMP
WHERE EMPNO = 7369)
WHERE EMPNO = 7499;
다중행 서브쿼리
서브 쿼리의 결과 건수가 2건 이상일 가능성이 있을 때
다중행 비교 연산자와 함께 사용한다.
> 다중행 연산자
IN : 임의의 결과 중 하나만 만족해도 참
비교연산자 ALL : 결과의 모든 값 만족해야 함
비교 연산자 ANY / SOME : 하나라도 만족
EXISTS : 조건 만족하는 값 존재하는지 확인, 하나라도 찾으면 검색 중지
IN 연산자
-- BACK_NO = 15 인 선수 키와 같은 선수들 모두 출력
SELECT PLAYER_NAME, HEIGHT, BACK_NO
FROM PLAYER
WHERE HEIGHT IN
(SELECT HEIGHT
FROM PLAYER
WHERE BACK_NO = 15);
ALL 연산자
결과의 모든 값을 만족해야 하는 조건이다.
-- HEIGHT > ALL (185, 186, 190) 이면 HEIGHT > 190 이 되어야 한다.
-- 즉, 여기선 키 190 초과인 선수들 조회
SELECT PLAYER_NAME, HEIGHT, BACK_NO
FROM PLAYER
WHERE HEIGHT > ALL
(SELECT HEIGHT
FROM PLAYER
WHERE BACK_NO = 15); -- 괄호 안 선수 최대 키 190
ANY (= SOME) 연산자
결과의 어느 하나의 값이라도 만족하면 되는 조건이다.
-- HEIGHT >= ANY (168, 186, 190) 이면 HEIGHT >= 168 이 되어야 한다.
-- 즉, 여기선 키 188 이상인 선수들 조회
SELECT PLAYER_NAME, HEIGHT, BACK_NO
FROM PLAYER
WHERE HEIGHT >= ANY
(SELECT HEIGHT
FROM PLAYER
WHERE BACK_NO = 15); -- 괄호 안 선수 최소 키 168
EXISTS 연산자
조건을 만족하는 값이 존재하는지 여부를 확인한다.
조건이 만족되는 1건만 찾으면 더 이상 검색하지 않는다.
WHERE 절이 참이라면 전체 명단이 나온다. 거짓이면 아무것도 나오지 않는다.
SELECT PLAYER_NAME, HEIGHT, BACK_NO
FROM PLAYER
WHERE EXISTS
(SELECT HEIGHT
FROM PLAYER
WHERE BACK_NO = 15);
-- 이렇게해도 결과는 같다.
-- WHERE 조건절이 중요하기 때문에 SELECT 1 해도 같음
SELECT PLAYER_NAME, HEIGHT, BACK_NO
FROM PLAYER
WHERE EXISTS
(SELECT 1
FROM PLAYER
WHERE BACK_NO = 15);
'전공 지식 정리 > 데이터베이스 설계' 카테고리의 다른 글
데이터베이스 SQL - join (0) | 2022.12.19 |
---|---|
데이터베이스 SQL - TCL, DCL (0) | 2022.11.30 |
데이터베이스 SQL - Multi-row Function (다중 행 함수) (0) | 2022.11.29 |
데이터베이스 SQL - Function (0) | 2022.11.28 |
데이터베이스 SQL문 DDL (0) | 2022.10.24 |