1. 서브쿼리 (SUBQUERY)
하나의 쿼리 안에 존재하는 또 다른 쿼리 : 엄마- 메인커리 / 아기-서브쿼리
서브쿼리 사용시 주의사항
- 서브쿼리를 괄호로 감싸서 사용 ()
- 서브쿼리는 단일 행 또는 복수 행 비교 연산자와 함께 사용이 가능하다
- 서브쿼리에서는 ORDER BY를 사용하지 못한다.
서브 쿼리가 SQL문에서 사용이 가능한 곳
- SELECT 절
- FROM 절
- WHERE 절
- HAVING 절
- ORDER BY 절
- INSERT 문의 VALUE 절
- UPDATE 문의 SET 절
SELECT 절 | 스칼라 서브쿼리 | 컬럼이 올 수 있는 대부분 위치에 사용 컬럼 대신 사용하므로 반드시 하나의 값만을 반환 (한 행, 한 칼럼) |
FROM 절 | 인라인 뷰 | 테이블명이 올 수 있는 위치에 사용 실행 결과가 여러 건인 서브쿼리, 다중 행 비교 연산자와 함께 사용 (IN, ALL, ANY, SOME, EXISTS 등) |
WHERE 절 HAVING 절 |
중첩 서브쿼리 | 실행 결과로 여러 컬럼을 반환, 메인쿼리의 조건절에 여러 칼럼을 동시에 비교 가능, 서브쿼리와 메인쿼리에서 비교하고자 하는 칼럼 |
(1) SELECT 절 - 스칼라 서브쿼리
컬럼이 올 수 있는 대부분 위치에 사용
컬럼 대신 사용하므로 반드시 하나의 값만을 반환 (한 행, 한 칼럼)
--스칼라 서브쿼리를 이용하여 PRODUCT_REVIEW 테이블에 존재하지 않는 PRODUCT_NAME 데이터를 출력
SELECT M.PRODUCT CODE,
(SELECT S.PRODUCT_NAME -- 하나의 컬럼만 지정
FROM PRODUCT S
WHERE S.PRODUCT_CODE = M.PRODUCT CODE) AS PRODUCT NAME,
M.MEMBER_ID
M.CONTENT
FROM PRODUCT_REVIEW M;
2. FROM 절 - 인라인 뷰
테이블명이 올 수 있는 위치에 사용
실행 결과가 여러 건인 서브쿼리, 다중 행 비교 연산자와 함께 사용
(IN, ALL, ANY, SOME, EXISTS 등)
--SQL 문이 실행될 때만 임시적으로 생성되는 뷰로 인라인 뷰를 동적 뷰라고 함
SELECT M.PRODUCT_CODE,
S.PRODUCT_NAME,
S.PRICE,
M.MEMBER_ID,
M.CONTENT
FROM PRODUCT REVIDW M,
(SELECT PRODUCT_CODE, -- 인라인 뷰
PRODUCT_NAME,
PRICE
FROM PRODUCT) S
WHERE M.PRODUCT_CODE = S.PRODUCT_CODE;
3. WHERE 절 / HAVING 절 - 중첩 서브쿼리
실행 결과로 여러 컬럼을 반환, 메인쿼리의 조건절에 여러 칼럼을 동시에 비교 가능,
서브쿼리와 메인쿼리에서 비교하고자 하는 칼럼
동작 방식에 따른 분류
비연관 서브쿼리 | 서브쿼리가 메인쿼리 칼럼을 갖고 있지 않은 형태, 메인 쿼리에 값을 제공하기 위한 목적으로 주로 사용 |
연관 서브쿼리 | 서브쿼리가 메인쿼리 칼럼을 가지고 있는 형태 일반적으로 메인쿼리가 먼저 수행되어 읽혀진 데이터를 서브쿼리에서 조건이 맞는지 확인하고자 할 때 주로 사용 |
반환되는 데이터의 형태에 따른 분류
Single Row (단일행) 서브쿼리 | 서브쿼리 결과가 항상 1건 이하인 서브쿼리, 단일 행 비교 연산자와 함께 사용 (등호, 부등호) |
Multi Row (다중행) 서브쿼리 | 실행 결과가 여러 건인 서브쿼리, 다중 행 비교 연산자와 함께 사용 (IN, ALL, ANY, SOME, EXISTS 등) |
Multi Colum (다중 컬럼) 서브쿼리 | 실행 결과로 여러 컬럼을 반환, 메인쿼리의 조건절에 여러 칼럼을 동시에 비교 가능, 서브쿼리와 메인쿼리에서 비교하고자 하는 칼럼 |
2. 뷰 (VIEW)
실제 데이터를 가지고 있지 않지만, 테이블이 수행하는 역할을 수행하는 가상 테이블
뷰의 장점
- 독립성 : 테이블 구조가 변경되어도 뷰를 사용하는 응용 프로그램은 변경 X
- 편리성 : 복잡한 질의를 뷰를 생성함으로써 관련 질의를 단순하게 작성 가능
- 보안성 : 숨기고 싶은 정보가 존재한다면 해당 칼럼을 빼고 뷰를 생성하여 사용자에게 정보 감추기 가능
'데이터 이야기 > SQL' 카테고리의 다른 글
[데이터분석 - SQL ] #3-3. 집합 연산자 / 그룹함수 / 윈도우 함수 (1) | 2022.11.04 |
---|---|
[데이터분석 - SQL ] #2-3. 관리 구문(DML / TCL / DDL / DCL) (0) | 2022.11.03 |
[데이터분석 - SQL ] #3-1. JOIN / STANDARD JOIN (0) | 2022.11.03 |
[데이터분석 - SQL ] #2-2. WHERE / GROUP BY / HAVING / ORDER BY절 (0) | 2022.11.03 |
[데이터분석 - SQL ] #2-1. SQL 기본 (0) | 2022.11.02 |