제 4절 서브쿼리
: 하나의 SQL문 안에 포함되어 있는 또 다른 SQL문을 말한다. 메일쿼리가 서브쿼리를 포함하는 종속관계이다.
* 사용시 주의사항
1) 서브쿼리를 괄호로 감싸서 사용
2) 서브쿼리는 단일행 또는 복수행 비교연산자와 함께 사용이 가능.
단일행 비교 연산자는 서브쿼리결과가 반드시 1건 이하이어야 하고
복수행 비교 연산자는 서브커리 결과 건수와 상관없다.
3) 서브커리에서는 ORDERBY를 사용하지 못한다. ORDERBY절은 메인쿼리의 마지막 문장에 위치해야 한다.
* 동작하는 방식에 따른 서브쿼리 분류
- Un-Correlated (비연관) 서브쿼리 : 서브커리가 메인쿼리 칼럼을 가지고 있지 않는 형태의 서브커리이다. 메인쿼리의 값을 제공하기 위한 목적으로 사용.
- Correlated (연관) 서브쿼리 : 서브커리가 메인쿼리의 칼럼을 가지고 있는 형태의 서브쿼리이다. 일반적으로 메인쿼리가 먼저 수행되어 읽혀진데이터를 서브쿼리에서 조건이 맞는지 확인하고자 할 때 주로 사용.
* 반환되는 데이터의 형태에 따른 서브쿼리 분류
- SingleRow 서브쿼리 (단일행 서브쿼리) : 실행결과가 1건 이하인 서브쿼리를 의미. 단일행 비교연산자와 사용(=,<, <=, >, >=, <>)
- MultiRow 서브쿼리 (다중행 서브쿼리) : 실행결과가 여러건인 서브쿼리를 의미. 다중행 비교연산자와 사용 (IN, ALL, ANY, SOME, EXISTS)
- MulitColumn 서브쿼리 (다중 칼럼 서브쿼리) : 실행결과로 여러 칼럼을 반환 메인쿼리의 조건절에 여러 칼럼을 동시에 비교할 수 있다. 서브쿼리와 메인쿼리에서 비교하고자 하는 칼럼개수와 칼럼위치가 동일해야 한다.
1. 단일행 서브쿼리
: 단일행 비교연산자 (=,<, <=, >, >=, <>)와 함께 사용할 때는 서브쿼리의 결과 건수가 반드시 1건 이하이어야 한다.
2. 다중 행 서브쿼리
: 서브쿼리결과가 2건 이상 반환될 수 있다면 반드시 다중행 비교연산자(IN, ALL, ANY, SOME)와 함꼐 사용
* 다중행 비교연산자
- IN (서브쿼리) : 서브쿼리의 결과에 존재하는 임의의 값과 동일한 조건을 의미
- 비교연산자 ALL (서브쿼리) : 서브쿼리 결과에 존재하는 모든 값을 만족하는 조건을 의미
- 비교연산자 ANY (서브쿼리) : 서브쿼리 결과에 존재하는 어느 하나의 값이라도 만족하는 조건을 의미
- EXISTS (서브쿼리) : 서브쿼리의 결과를 만족하는 값이 존재하는지 여부를 확인하는 조건을 의미
3. 다중 칼럼 서브쿼리
: 서브쿼리 결과로 여러 개의 칼럼이 반환되어 메인쿼리의 조건과 동시에 비교되는 것을 의미
4. 연관 서브쿼리
: 서브쿼리 내에 메인쿼리 칼럼이 사용된 서브쿼리
5. 그 밖에 위치에서 사용하는 서브쿼리
가. SELECT 절에 서브쿼리 사용하기
: 스칼라 서브쿼리는 한 행, 한 칼럼 만을 반환하는 서브쿼리
나. FROM절에서 서브쿼리 사용하기
: FROM절에서 사용되는 서브쿼리를 인라인뷰라고 한다.
다. HAVING절에서 서브쿼리 사용하기
: 그룹함수와 함께 사용될 때 그룹핑된 결과에 대해 부가적인 조건을 주기 위해서 사용
라. UPDATE문의 SET절에서 사용하기
마. INSERT문의 VALUES절에서 사용하기
6. 뷰
: 테이블은 실제로 데이터를 가지고 있는 반면, 뷰는 실제 데이터를 가지고 있지 않다. 가상테이블이라고도 한다.
* 뷰 사용의 장점
- 독립성 : 테이블 구조가 변경되어도 뷰를 사용하는 응용프로그램은 변경하지 않아도 된다.
- 편리성 : 복잡한 질의를 뷰로 생성함으로써 관련 질의를 단순하게 작성할 수 있다. 해당 형태의 SQL문을 자주 사용할 때 뷰를 이용하면 편리하게 사용할 수 있다.
- 보안성 : 지원의 급여정보와 같이 숨기고 싶은 정보가 존재하면, 뷰를 생성할 때 해당 칼럼을 빼고 생성함으로써 사용자에게 정보를 감출 수 있다.
* 뷰 생성 – CREATE VIEW AS SELECT … ;
* 뷰 제거 – DROP VIEW … ;
'자격증 > SQLD' 카테고리의 다른 글
[#SQLD] 제 6절 윈도우 함수 (0) | 2023.03.09 |
---|---|
[#SQLD] 제 5절 그룹함수(GROUP 함수) (0) | 2023.03.09 |
[#SQLD] 제 3절 계층형 질의와 셀프 조인 (0) | 2023.03.02 |
[#SQLD] 제 2절 집합연산자 (SET OPERATOR) (0) | 2023.03.02 |
[#SQLD] 제 1절 표준조인(STANDARD JOIN) (0) | 2023.02.27 |
댓글