티스토리 뷰

서브쿼리 (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 

단일 행 서브쿼리의 예제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 

 

단일 행 서브쿼리의 예제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 뷰명칭;

 

 

 

 

 

 


 

댓글