2-2장 SQL 활용 - 4절 서브쿼리

Study/SQLD

2-2장 SQL 활용 - 4절 서브쿼리

tnddj1219 2022. 6. 30. 02:38
728x90

1. 서브쿼리란

서브쿼리 설명
하나의 SQL 문 안에 포함되어 있는 또다른 SQL문을 말한다.
메인 쿼리가 서브쿼리를 포함하는 종속적인 관계
서브쿼리는 메인쿼리의 칼럼을 모두 사용할 수 있지만, 메인쿼리는 서브쿼리의 칼럼을 사용할 수 없다.
질의결과에 서브쿼리 칼럼을 표시해야 한다면 조인 방식으로 변환하거나 함수, 스칼라 서브쿼리 등을 사용

서브쿼리 사용시 주의 사항
서브쿼리를 괄호로 감싸서 사용한다.
서브쿼리는 단일 행 (SINGLE ROW) 또는 복수 행 (MULTIPLE ROW) 비교 연산자와 함께 사용 가능하다. 단일 행 비교 연산자는 서브쿼리의 결과가 반드시 1건 이하여야 하고, 복수 행 비교 연산자는 상관 없다.
서브쿼리에서는 ORDER BY 절을 사용할 수 없다. ORDER BY 절은 SELECT 절에서 오직 한 개만 오기 때문에, 메인쿼리의 마지막 문장에 위치해야 한다.

 

서브쿼리가 SQL 문에서 사용이 가능한 곳
SELECT
절 / FROM 절 / WHERE 절 / HAVING 절 / ORDER BY 절 / INSERT VALUES 절 / UPDATE SET

 

서브 쿼리의 분류동작방식

종류 설명
비연관
서브쿼리
메인쿼리 칼럼이 가지고 있지 않은 형태의 서브 쿼리
메인쿼리에 값을 제공하기 위한 목적으로 사용
- Access Subquery: 제공자 역할
- Filter Subquery: 확인자 역할
- Early Filter Subquery: 데이터 필터링 역할
연관
서브쿼리
서브쿼리가 메인쿼리 칼럼을 가지고 있는 형태의 서브쿼리
메인쿼리의 결과를 조건이 맞는지 확인하기 위한 목적으로 주로 사용함

 

서브 쿼리의 분류 반환 데이터

종류 설명
단일 행
서브쿼리
실행 결과가 1건 이하인 서브쿼리, 단일 행 비교 연산자와 함께 사용.
=,<, <=, >, >=, <> 
사용
다중 행
서브쿼리
실행 결과가 여러 건인 서브쿼리, 다중 행 비교 연산자와 함께 사용. IN, ALL, ANY, SOME, EXISTS가 있다.
- IN : 서브쿼리의 결과 중 하나의 값이라도 동일하다는 조건
- ANY : 
서브쿼리의 결과 중 하나의 값이라도 만족한다는 조건
- ALL : 
서브쿼리의 모든 결과값을 만족한다는 조건
- EXISTS : 
서브쿼리의 결과를 만족하는 값이 존재하는지 여부를 확인하는 조건, ‘WHERE EXISTS (SELECT ~)’ (항상 연관 서브쿼리로 사용)
다중 칼럼
서브쿼리
실행 결과로 여러 칼럼 반환
주로 메인쿼리의 조건과 비교하기 위해 사용
교하고자 하는 칼럼의 개수와 위치가 동일해야 함

 

그밖의 서브쿼리
스칼라 서브쿼리: 값 하나(한 행, 한 칼럼)를 반환하는 서브쿼리, SELECT절에 사용하는 서브쿼리

 

2. VIEW()

뷰의 개념 및 특징
뷰는 실제 데이터는 없지만 테이블이 수행하는 역할을 수행하기 때문에 가상 테이블이라고 한다
테이블은 실제로 데이터를 가지고 있는 반면, View는 실제 데이터를 가지고 있지 않다. 뷰는 단지 뷰 정의만 가지고 있다.
질의에서 뷰가 사용되면 뷰 정의를 참조해서 DBMS 내부적으로 질의를 재작성하여 질의를 수행한다.

 

뷰 사용 장점
독립성: 테이블 구조 변경 자동 반영. 응용프로그램 변경 X
편리성: 쿼리를 단순하게 작성할 수 있음, 자주 사용하는 SQL문의 형태를 뷰로 생성하여 사용할 수 있음
보안성: 뷰를 생성할 때 칼럼을 제외할 수 있음

 

뷰 관련 SQL 명령어
뷰 생성: 생성 시 CREATE VIEW 뷰명칭 AS ~ SELECT ~ FROM ~ WHERE ~;
뷰 삭제 DROP VIEW 뷰명칭;

 

WITH
서브쿼리를 이용하여 뷰로 사용할 수 있는 구문
명령어: WITH 뷰명 AS (SELECT ~)

728x90