티스토리 뷰
서브쿼리 (SUBQUERY) 란,
하나의 SQL문 안에 포함되어 있는 또 다른 SQL문을 말한다.
서브쿼리는 메인쿼리의 칼럼을 모두 사용할 수 있지만, 메인쿼리는 서브쿼리의 칼럼을 사용할 수 없다.
질의결과에 서브쿼리 칼럼을 표시해야 한다면 조인 방식으로 변환하거나 함수, 스칼라 서브쿼리 ( Scalar Subquery ) 등을 사용해야 한다.
조인은 집합간의 곱 (Product)의 관계이다.
1:1 관계의 테이블이 조인하면 1 (1*1) 레벨의 집합이 생성되고,
1:M 관계의 테이블이 조인하면 M (1*M) 레벨,
M:N 관계의 테이블이 조인하면 MN (M*N) 레벨의 집합이 생성된다.
[ 서브쿼리 주의사항 ]
(1) 서브쿼리를 괄호로 감싸서 사용한다.
(2) 서브쿼리는 단일 행 (SINGLE ROW) 또는 복수 행 (MULTIPLE ROW) 비교 연산자와 함께 사용 가능하다.
단일 행 비교 연산자는 서브쿼리의 결과가 반드시 1건 이하여야 하고, 복수 행 비교 연산자는 상관 없다.
(3) 서브쿼리에서는 ORDER BY 절을 사용할 수 없다.
ORDER BY 절은 SELECT 절에서 오직 한 개만 오기 때문에, 메인쿼리의 마지막 문장에 위치해야 한다.
[ 서브쿼리 SQL문에서 사용 가능한 곳 ]
SELECT절
FROM 절
WHERE 절
HAVING 절
ORDER BY 절
INSERT문 VALUES 절
UPDATE문 SET 절
[ 서브쿼리 종류 ]
서브쿼리의 종류는
동작하는 방식 / 반환되는 데이터 형태 에 따라 분류 할 수 있다.
서브쿼리 종류 | 상세 종류 |
동작하는 방식 | 비연관 서브쿼리 |
연관 서브쿼리 | |
반환되는 데이터 형태 | 단일 행 서브쿼리 |
다중 행 서브쿼리 | |
다중 칼럼 서브쿼리 |
① 동작하는 방식
(1) 연관 서브 쿼리
연관 서브쿼리는 서브쿼리 내에 메인쿼리 칼럼이 사용된 서브쿼리 이다.
EXISTS 서브쿼리는 항상 연관 서브쿼리로 사용된다.
② 반환되는 데이터 형태
(1) 단일 행 서브 쿼리
서브쿼리가 단일 행 비교 연산자 = < <= >= <> 와 함께 사용할 때는 서브쿼리의 결과 건수가 반드시 1건 이하여야 한다.
EX 1
SELECT PLAYER_NAME 선수명, POSITION 포지션, BACK_NO 백넘버 FROM PLAYER
WHERE TEAM_ID = (SELECT TEAM_ID FROM PLAYER WHERE PLAYER_NAME = '정남일')
ORDER BY PLAYER_NAME;
EX 2
SELECT PLAYER_NAME 선수명, POSITION 포지션, BACK_NO 백넘버 FROM PLAYER
WHERE HEIGHT <= (SELECT AVG(HEIGHT) FROM PLAYER)
ORDER BY PLAYER_NAME;
(2) 다중 행 서브 쿼리
서브쿼리가 2건 이상 반환될 수 있다면 반드시 다중 행 비교 연산자 ( IN, ALL, ANY, SOME ) 와 함께 사용한다.
그렇지 않으면 오류를 반환한다.
[ IN / ALL / ANY / EXISTS ]
(3) 다중 칼럼 서브 쿼리
다중 칼럼 서브쿼리 : 서브 쿼리의 결과로 여러 개의 칼럼이 반환되어 메인 쿼리의 조건과 동시에 비교되는 것.
[ 뷰 ( View ) ]
테이블은 실제로 데이터를 가지고 있는 반면, View 는 실제 데이터를 가지고 있지 않다.
뷰는 단지 뷰 정의 ( View Definition ) 만 가지고 있다.
질의에서 뷰가 사용되면 뷰 정의를 참조해서 DBMS 내부적으로 질의를 재작성하여 질의를 수행한다.
뷰는 실제 데이터는 없지만 테이블이 수행하는 역할을 수행하기 때문에 가상 테이블이라고 한다.
- 가상 테이블 ( Virtual Table )
▷ 뷰 생성 ( CREATE VIEW )
CREATE VIEW 뷰명칭 AS
SELECT P.NAME, P.POSITION, P.NO, T.NAME
FROM PLAYER P, TEAM T
WHERE P.ID = T.ID;
▷ 뷰 삭제 ( DROP VIEW )
DROP VIEW 뷰명칭;
'SQL > SQLD 2과목' 카테고리의 다른 글
SQLD - 과목2. (14) 그룹 함수 (0) | 2021.09.04 |
---|---|
SQLD - 과목2. (12) 계층형 질의와 셀프 조인 (0) | 2021.09.04 |
SQLD - 과목2. (11) 집합 연산자 (0) | 2021.09.04 |
SQLD - 과목2. (10) 표준 조인 (0) | 2021.03.19 |
SQLD - 과목2. (9) 조인 (JOIN) (0) | 2021.03.18 |
- Total
- Today
- Yesterday
- 네이버클라우드플랫폼
- SQLD
- 데이터베이스
- BAEKJOON
- 파이썬
- range함수
- Unity GameObject 생성
- 파이썬입출력
- SQLD 2과목
- 파이썬 입출력
- 별 찍기
- Python
- 파이썬문법
- 데이터 모델링
- 파이썬sum
- 40회 SQLD
- 백준
- NaverCloudPlatform
- f-string
- python문법
- 백준 별찍기
- SUM함수
- SQLD1과목
- 파이썬for문
- python별찍기
- 백준파이썬
- 알고리즘
- SQLD 1과목
- 백준별찍기
- SQLD40회
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |