서브 쿼리
사용 가능 위치
: select 절, from 절, where 절, having 절, order by 절, insert 문의 values 절, update 문의 set 절
위치에 따른 분류
- 스칼라 서브 쿼리 (select)
- 인라인 뷰 (from)
- 중첩 쿼리 (where, having) -> nested loop subquery
동작방식에 따른 분류
- 비연관 서브 쿼리
- 메인 쿼리를 사용하지 않고, 정보를 메인 쿼리에 제공해줌
- 연관 서브 쿼리
- 메인 쿼리 컬럼 사용함 (메인 쿼리가 먼저 수행되고 그 결과를 분석)
반환형태에 따른 분류
-
단일행 서브 쿼리
- 아웃풋 1건
- 단일행 비교 연산자와 사용 (=, >, >=, <, <=, <>)
-
다중행 서브 쿼리
- 아웃풋 여러 건
- 다중행 비교 연산자와 사용
- 다중행 비교연산자는 단일행 비교연산자로 대체 가능함 (반대는 안 됨)
-
다중 컬럼 서브 쿼리
- 아웃풋 여러 컬럼
- 메인 쿼리 조건절의 여러 컬럼을 동시에 비교 가능
- 서브 쿼리와 메인 쿼리의 비교하고자 하는 컬럼의 개수와 위치가 동일해야 함
- SQL server 지원 x
서브쿼리 사용시 주의 사항
- 서브쿼리는 괄호로 감싸서 사용해야 함
- 서브쿼리는 단일행 또는 다중행 비교 연산자와 사용 가능함
- 단일행 비교 연산자의 서브쿼리 결과는 반드시 1건
- 다중행 비교 연산자의 서브쿼리 결과는 건수와 상관 x
- 서브쿼리에서는 order by를 사용하지 못 함(?)
- order by 절은 메인 쿼리의 마지막 문장에 위치해야 함
뷰(View)
가상 테이블
CREATE VIEW 뷰명 AS (
SELECT ...
);
DROP VIEW 뷰명;
뷰의 장점
- 독립성 : 테이블 구조가 변경되어도 뷰를 사용하는 응용프로그램은 변경하지 않아도 됨
- 편리성 : 복잡한 질의를 뷰로 생성함으로써 단순한 질의 작성이 가능함
- 보안성 : 보안이 필요한 컬럼을 빼고 생성함으로써 사용자에게 정보를 감출 수 있음