[SQLD]「2」(2.4) 서브쿼리, 뷰, 집합 연산자

728x90

[SQLD]2」(2.4) 서브쿼리, 뷰, 집합 연산자

「1」 데이터 모델링의 이해

> 「2」 SQL 기본 / 활용

「3」 관리 구문

 

> 1. 서브쿼리

> 2. 뷰

> 3. 집합 연산자

4. 그룹 함수

5. 윈도우 함수

6. Top-N 쿼리

7. 셀프 조인

8. 계층 쿼리

 

1. 서브쿼리

Sub Query

메인쿼리: 바깥에 있는 쿼리,서브쿼리: 안에 있는 쿼리

Set B의 사본 (3).png

⸰ 서브쿼리의 위치에 따라 분류함

  -스칼라 서브쿼리: SELECT 절

  -인라인 뷰: FROM 절

  -중첩 서브쿼리: WHERE 절, HAVING 절

 

스칼라 서브쿼리

⸰ SELECT 절 등 칼럼이 올 수 있는 대부분의 위치에 사용 가능, 하나의 값만 반환해야 함

SELECT A.칼럼명1,
       ...
       (SELECT B.칼럼명2,
               ...
          FROM 테이블명2 B
         WHERE B.공통칼럼명 = A.공통칼럼명) AS 칼럼명3,
       ...
  FROM 테이블명1 A;

 

인라인 뷰

⸰ FROM 절 등 테이블명이 올 수 있는 위치에 사용 가능

SELECT A.칼럼명1,
       ...
       B.칼럼명2,
       ...
  FROM 테이블명1 A,
       (SELECT 칼럼명3,
               ...
          FROM 테이블명2) B
 WHERE A.공통칼럼명 = B.공통칼럼명;

 

중첩 서브쿼리

⸰ WHERE 절과 HAVING 절에 사용 가능

 

⸰ 메인쿼리와의 관계에 따라 분류함

  -연관 서브쿼리: 서브쿼리 내 메인쿼리의 칼럼이 포함됨

SELECT 칼럼명1, 칼럼명2, ...
  FROM 테이블명1 A
 WHERE 칼럼명2 = (SELECT MAX(칼럼명2)
                   FROM 테이블명2 B
                  WHERE B.공통칼럼명 = A.공통칼럼명);

 

  -비연관 서브쿼리: 서브쿼리 내 메인쿼리의 칼럼이 포함되지 않음

SELECT 칼럼명1, 칼럼명2, ...
  FROM 테이블명1
 WHERE 칼럼명2 = (SELECT 칼럼명2
                    FROM 테이블명2
                   WHERE 칼럼명3 = 조건);

 

⸰ 반환하는 데이터의 형태에 따라 분류함

  -단일 행 서브쿼리

    : 서브쿼리가 1건 이하의 데이터를 반환

    : 단일 행 비교 연산자와 사용(=><<=>=<>)

SELECT 칼럼명1, 칼럼명2, ... FROM 테이블명
 WHERE 칼럼명2 = (SELECT MAX(칼럼명2) FROM 테이블명);

 

  -다중 행 서브쿼리

    : 서브쿼리가 2건 이상의 데이터를 반환

    : 다중 행 비교 연산자와 사용(INALLANYSOMEEXISTS)

SELECT 칼럼명1, 칼럼명2, ... FROM 테이블명1
 WHERE 칼럼명2 IN (SELECT 칼럼명2 FROM 테이블명2);

 

  -다중 칼럼 서브쿼리

    : 서브쿼리가 여러 칼럼의 데이터를 반환

SELECT 칼럼명1, 칼럼명2, 칼럼명3, ... FROM 테이블명1
 WHERE (칼럼명2, 칼럼명3) IN (SELECT 칼럼명2, 칼럼명5 
                               FROM 테이블명2
                              WHERE 칼럼명5 = 조건);

 

2. 뷰

View

⸰ 특정 SELECT 문에 이름을 붙여 재사용이 가능하도록 저장한 가상 테이블

⸰ 실제 데이터를 저장되지 않고, SELECT 문으로 해당 데이터만 조회

 

⸰ 뷰의 특징

  -보안성: 보안이 필요한 칼럼을 제외하여 별도의 뷰로 생성하여 제공함으로 보안을 유지

  -독립성: 테이블 스키마가 변경되었을 경우, 애플리케이션은 변경하지 않고 뷰만 수정

  -편리성: 복잡한 쿼리 구문을 뷰로 단축시켜 가독성 높이고, 편리하게 사용

CREATE OR REPLACE VIEW 뷰명 AS
    SELECT A.칼럼명1,
           ...
           B.칼럼명2,
           ...
      FROM 테이블명1 A LEFT OUTER JOIN 테이블명2 B
        ON A.동일칼럼명 = B.동일칼럼명;

 

3. 집합 연산자

집합 연산자

⸰ 각 쿼리의 결과 집합을 가지고 연산을 하는 명령어

UNIONALLUNIONINTERSECTMINUS/EXCEPT

√. 출력 시 헤더값은 첫 번째 쿼리를 따라감

√. 대응되는 칼럼의 수가 서로 다른 경우 에러 발생

√. 대응되는 식의 데이터 유형이 서로 다른 경우 에러 발생

 

UNION ALL

⸰ Query1의 결과와 Query2의 결과를 합하여 출력,중복 포함

Set B (1).png

SELECT 칼럼명1, ... FROM 테이블명1
UNION ALL
SELECT 칼럼명2, ... FROM 테이블명2;

 

UNION

⸰ Query1의 결과와 Query2의 결과를 합하여 출력,중복 제거

√. UNION과 UNION ALL이 같은 결과를 도출하는 경우, 중복 제거 과정 때문에 UNOIN이 성능상 불리

edited_edited_Set B (3).png

SELECT 칼럼명1, ... FROM 테이블명1
UNION
SELECT 칼럼명2, ... FROM 테이블명2;

 

INTERSECT

⸰ Query1의 결과와 Query2의 결과의 공통된 부분만 출력,중복 제거

Set B (4).png

SELECT 칼럼명1, ... FROM 테이블명1
INTERSECT
SELECT 칼럼명2, ... FROM 테이블명2;

 

MINUS / EXCEPT

⸰ Query1의 결과에서 Query2의 결과를 제거하여 출력,중복 제거

edited_Set B (5).png

SELECT 칼럼명1, ... FROM 테이블명1
MINUS
SELECT 칼럼명2, ... FROM 테이블명2;

 

 

 

 

 

 

 

유선배 SQLD 과외노트

728x90