[SQLD] 서브쿼리
1. 서브쿼리
- 하나의 SQL문에 포함되어 있는 또 다른 SQL문
2. 서브쿼리 사용 시 주의사항
1) 서브쿼리는 괄호로 감싸서 사용
2) 서브쿼리는 단일 행 또는 복수 행 비교 연산자와 함께 사용 가능
3) 서브쿼리에서는 ORDER BY를 사용하지 못함
3. 서브쿼리가 사용 가능한 곳
1) SELECT 절
2) FROM 절
3) WHERE 절
4) HAVING 절
5) ORDER BY 절
6) INSERT 문의 VALUES 절
7) UPDATE 문의 SET 절
** GROUP BY절에는 사용 불가
4. 서브쿼리의 분류 (WHERE절)
* 단일 행 서브쿼리 / 다중 행 서브쿼리의 컬럼은 1개
1) 단일 행 서브쿼리
- 서브쿼리가 단일 행 비교 연산자(=, <. >, <=, >=, <>)와 함께 사용될 때는 서브쿼리의 결과 건수가 반드시 1건 이하여야 함
- 결과가 2건 이상인 경우 오류 발생
- WHERE C1(열) <(비교 연산자) (서브쿼리 : 결과 값 1건)
2) 다중 행 서브쿼리
- 서브쿼리의 결과로 여러 개의 컬럼이 반환되어 메인 쿼리의 조건과 동시에 비교되는 것
- 비교 연산자(<, > ..) 대신 IN 사용
- WHERE C1(열) IN (서브쿼리 : 결과 값 여러 개)
* 다중 컬럼 서브쿼리의 컬럼은 여러개
3) 다중 컬럼 서브쿼리
- 서브쿼리의 결과로 여러 개의 컬럼이 반환되어 메인 쿼리의 조건과 동시에 비교되는 것
4) 연관 서브쿼리
- 서브쿼리 내에 메인 쿼리 컬럼이 사용된 서브쿼리
5. 그 밖의 위치에서 사용하는 서브쿼리
1) SELECT 절
- 스칼라 서브쿼리 : 한 행, 한 컬럼만을 반환하는 서브쿼리
2) FROM 절
- 인라인 뷰
- 서브쿼리가 FROM절에 사용되면 동적으로 생성된 테이블인 것 처럼 사용 가능
- 인라인 뷰는 SQL 문이 실행될 때만 임시적으로 생성되는 동적인 뷰이기 때문에 데이터베이스에 해당 정보가 저장되지 않음
3) HAVING 절
- 그룹 함수와 함께 사용될 때 그룹핑된 결과에 대해 부가적인 조건을 주기 위해 사용
6. 뷰
- 테이블은 실제로 데이터를 가지고 있는 반면 , 뷰는 실제 데이터를 가지고 있지 않음
- 질의에서 뷰가 사용되면 뷰 정의를 참조해서 DBMS 내부적으로 질의를 재작성하여 질의를 수행
- 뷰는 실제 데이터를 가지고 있지 않지만 테이블이 수행하는 역할을 수행하기 때문에 가상 테이블이라고도 함
+ 뷰 사용의 장점
1) 독립성 : 테이블 구조가 변경되어도 뷰를 사용하는 응용 프로그램은 변경하지 않아도 됨
2) 편리성 : 복잡한 질의를 뷰로 생성함으로써 관련 질의를 단순하게 작성할 수 있음
3) 보안성 : 숨기고 싶은 정보가 존재하는 경우, 뷰를 생성할 때 해당 컬럼을 빼고 생성하여 정보를 숨길 수 있음