본문 바로가기
Backend/DataBase

DB 서브쿼리 sub Query & UNION

by YERIEL_염주둥 2020. 4. 1.
728x90

1. Sub Query

SQL문 내에서 하위에 존재하는 쿼리 (SQL문 안에 SQL)

1] 스칼라 서브쿼리

SELECT문에 있는 서브쿼리 (1행만 반환)

SELECT
   g.g_code
  ,g.g_name
  ,g.g_price
  ,g.g_seller_id
  ,g.g_reg_date
FROM
  (SELECT
     *
    ,( SELECT
          ROUND(AVG(gAvg.g_price), 0)
       FROM
          tb_goods AS gAvg) AS '평균단가'
   FROM
     tb_goods ) AS g
WHERE
   g.g_price g.평균단가;

 

2] 인라인 뷰

FROM 절에 있는 서브쿼리

SELECT
   g.g_code
  ,g.g_name
  ,g.g_price
  ,g.g_seller_id
  ,g.g_reg_date
FROM
  tb_goods AS g
  JOIN
  ( SELECT
      ROUND(AVG(g.g_price), 0) AS '평균단가'
    FROM
      tb_goods AS g) AS gAvg
WHERE
  g.g_price > gAvg.평균단가;

 

3] 서브쿼리

WHERE 절에 있는 서브쿼리

SELECT
   g.g_code
  ,g.g_name
  ,g.g_price
  ,g.g_seller_id
  ,g.g_reg_date
FROM
   tb_goods AS g
WHERE
   g.g_price > ( SELECT
                    ROUND(AVG(g.g_price), 0)
                 FROM
                    tb_goods AS );

 

4] 단일 행 서브쿼리

서브쿼리의 결과가 1개 일때  "="

5] 다중 행 서브쿼리

서브쿼리의 결과가 여러 개 일때 "IN"

 

6] 다중 컬럼 서브쿼리

서브쿼리의 컬럼 결과가 여러 개 일때

 

2. UNION

1] 정의 

① 여러 개의 쿼리의 합집합
② 여러 개의 SQL문이 합쳐 하나의 SQL문으로 만들어주는 방법

2] UNION / UNION ALL

① UNION : 여러 개의 쿼리의 중복 값을 제거한 결과
② UNION ALL :  여러 개의 쿼리 결과가 중복 되더라도 전부 결과에 반영
③ 처리 속도 : UNION ALL > UNION  ; 중복 되는 쿼리를 빼주기 때문

3] 규칙

각 SELECT의 컬럼의 수가 같아야 한다.
② 컬럼명이 같아야 한다. ( 같지 않을 경우 alias를 사용하여 같게 만듦) 
컬럼별 데이터타입이 같아야 한다. ( 반환 가능한 형태 )
④ 하나의 ORDER BY만 사용한다.
⑤ SELECT문들의 순서는 상관없다.

반응형

'Backend > DataBase' 카테고리의 다른 글

DB - stored Program ; 프로시저 , 사용자 정의함수  (0) 2020.04.13
DB - VIEW  (0) 2020.04.06
DB - 정규화  (0) 2020.04.01
DataBase 데이터베이스 설계  (0) 2020.03.25
DB 생성 문장 및 사용자 계정 접근 권한 부여  (0) 2020.03.19

댓글