제4절 서브쿼리
- 하나의 SQL문 안에 포함되어 있는 또 다른 SQL문
- 서브 쿼리는 메인 쿼리의 칼럼을 모두 사용할 수 있지만, 메인 쿼리는 서브 쿼리의 칼럼을 사용할 수 없다.
- 서브쿼리를 괄호로 감싸서 사용한다.
- 단일행 또는 복수행 비교연산자와 함께 사용가능하다.
- ORDER BY를 사용하지 못한다
- SELECT절, FROM절, WHERE절, HAVING절, ORDER BY 절, INSERT의 VALUES절, UPDATE의 SET절에 사용가능
1. 단일행 서브 쿼리
- 서브쿼리가 단일 행 비교 연산자(=, <, >, <=, >=, <>)와 함께 사용할 때는 서브쿼리의 결과의 건수가 반드시 1개 이하여야 한다.
2. 다중행 서브 쿼리
- 서브쿼리 결과가 2건 이상 반활 될 수 있다면 반드시 다중 행 비교 연산자와 함께 사용해야 한다.
SOME은 ANY와 동일하다.
3. 다중 칼럼 서브쿼리
- 서브 쿼리의 결과로 여러 개의 칼럼이 반환되어 메인 쿼리의 조건과 동시에 비교되는 것
4. 연관 서브 쿼리
- 서브쿼리내에 메인쿼리칼럼이 사용된 서브 쿼리
- EXISTS는 항상 연관 서브쿼리로 사용
5. 그 밖의 위치에서 서브쿼리 사용하기
(1) SELECT 절에 서브쿼리 사용하기
- Scalar 서브쿼리 라고 한다. : 한행, 한 칼럼 만을 반환하는 서브쿼리
(2) FROM 절에 서브쿼리 사용하기
- Inline View라고 한다. (동적뷰, Dynamic view)
- 인라인 뷰에서는 ORDER BY절을 사용할 수 있다.
(3) HAVING 절에 서브쿼리 사용하기
- HAVING절의 조건에 서브쿼리를 이용하여 조건의 값을 반환
(4) UPDATE 문의 SET 절에서 사용하기
- 테이블에 칼럼이 추가 되었을때, 해당 칼럼의 값을 다른 테이블에서 대입해서 넣을때 서브쿼리로 사용
(5) INSERT문의 VALUES절에서 사용하기
- 게시판글 넣을때 게시글번호, 게시글그룹, 댓글 번호, 들여쓰기 등을 +1해주는 식으로 할때 사용했었다.
(SEQ처럼 사용)
6. VIEW(뷰)
- 실제 데이터를 가지고 있지 않은 가상 테이블, 뷰 정의만 가지고 있다.
-
CREATE VIEW 뷰명 AS SELECT 칼럼명 FROM 테이블명 ...조건식...