데이터 이야기/SQL

[데이터분석 - SQL ] #3-2. SUBQUERY / VIEW

sssoing-k 2022. 11. 4. 19:34

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
  • 편리성 : 복잡한 질의를 뷰를 생성함으로써 관련 질의를 단순하게 작성 가능
  • 보안성 : 숨기고 싶은 정보가 존재한다면 해당 칼럼을 빼고 뷰를 생성하여 사용자에게 정보 감추기 가능