[과목2.SQL 기본 및 활용 - 3-8. 서브쿼리(Subquery)]
1. 서브 쿼리?
(1) 하나의 SQL문안에 포함되어 있는 또 다른 SQL문을 말한다.
(2) 서브쿼리는 메인쿼리의 컬럼을 모두 사용할 수 있지만 메인 쿼리는 서브쿼리의 컬럼을 사용할 수 없다.
2. 서브 쿼리 사용시 주의점
(1) 서브 쿼리를 괄호로 감싸서 적는다.
(2) 서브쿼리는 단일행 또는 복수행 비교연산자와 함께 사용이 가능
(3) 단일행 비교연산자(=,<,>등)는 서브쿼리의 결과가 반드시 1건 이하이어야 하고, 복수행 비교 연산자(IN, ANY 등)는 서브 쿼리의 결과 건수와 상관 없다.
(4) 서브쿼리에서는 ORDER BY 절을 사용하지 못한다. ORDER BY는 메인쿼리의 마지막 문장에 위치
3. 동작하는 방식에 따른 서브쿼리 분류
(1) 비 연관 서브쿼리
: 서브쿼리가 메인쿼리의 컬럼을 가지고 있지 않은 형태
메인 쿼리에 값을 제공하기 위한 목적
(2) 연관 서브 쿼리
: 서브쿼리가 메인 쿼리의 값을 가지고 있는 형태
메인쿼리가 먼저 수행되고 읽혀진 데이터를 서브쿼리에서 조건이 맞는지 확인하고자 할 때 주로 사용한다.
4. 반환 데이터 형태에 따른 서브쿼리의 분류
(1) 단일 행 서브쿼리 : 실행결과가 항상 1건 이하
(2) 다중 행 서브쿼리 : 실행결과가 여러 건
(3) 다중 컬럼 서브쿼리
: 여러컬럼을 반환한다.
여러 컬럼을 동시에 비교할 수 있다.
서브쿼리와 메인쿼리의 컬럼 수와 컬럼 순서가 동일해야 한다.
5. 다중 행 서브 쿼리
(1) IN : 서브쿼리의 결과에 존재하는 임의의 값과 동일한 조건을 의미
(2) 비교연산자 ALL : 서브쿼리의 결과에 존재하는 모든 값응ㄹ 만족하는 조건을 의미
비교 연산자로 ‘<’을 사용했으면 메인쿼리는 서브쿼리의 모든 결과 값을 만족해야한다.
(3) 비교연산자 ANY : 서브쿼리의 결과에 존재하는 어느 하나의 값이라도 만족하는 조건을 의미.
(4) EXISTS : 서브쿼리의 결과를 만족하는 값이 존재하는지 여부를 확인하는 조건
조건을 만족하는 1건만 있으면 더 이상 검색하지 않는다.
6. 서브쿼리가 사용 가능한 위치
(1) SELECT, FROM, WHERE, HAVING, ORDER BY
(2) INSERT 시 VALUES, UPDATE시 SET
7. 인라인 뷰 서브쿼리
: FROM 절에서 사용되는 서브쿼리를 의미한다.
8. 뷰 (VieW)
(1) 테이블은 실제로 데이터를 갖고있는반면, 뷰는 실제 데이터를 갖고있지 않다.
9. 뷰 사용 장점
(1) 독립성 : 테이블 구조가 변경되어도 뷰를 사용하는 응용프로그램은 변경하지 않아도 됨
(2) 편리성 : 복잡한 질의를 뷰로 생성함으로써 관련 질의를 단순하게 작성한다.
(3) 보안성 : 직원의 급여 정보와 같이 숨기고 싶은 정보가 존재한다면, 뷰를 생성할 때 컬럼을 빼고 생성하여 정보를 감춘다.