728x90
SQL with:
- subQuery를 이름 붙여서 정의한 후에 사용-
- Query의 전체적인 가독성을 높이고, 재사용할 수 있는 장점이 있어 개발자가 편해짐
- 기본 구조
WITH [ 별명1 ] [ (컬럼1, [, 컬럼2]) ] AS (
sub query
)
main query
- 다중 선언
WITH [ 별명1 ] [ (컬럼1, [, 컬럼2]) ] AS (
sub query
), [별명2] AS (
sub query2
)
main query
# subquery2에서 subquery1을 사용할 수 있다
SELECT V.*
FROM
(SELECT S.SITE_CODE, S.SITE_NAME, V.VNDR_CODE, V.VNDR_NAME
FROM TB_SITE AS S
JOIN TB_SITE_VENDOR AS SV ON S.SITE_CODE = SV.SITE_CODE
WHERE S.SITE_CODE = '101'
UNION ALL
SELECT S.SITE_CODE, S.SITE_NAME, V.VNDR_CODE, V.VNDR_NAME
FROM TB_SITE AS S
JOIN TB_SITE_VENDOR AS SV ON S.SITE_CODE = SV.SITE_CODE
WHERE S.SITE_CODE = '102'
) V
WHERE V.VNDR_CODE = '1001'
- WITH절이나 Sub Query는 VIEW라는 임시 저장을 만드는 행위이기 때문에 SQL문 작성에 좋은 습관은 아니다.
- 오히려 위의 SQL문에서는 다음과 같이 작성하는 게 RDBMS 자원 사용 입장에서는 더 효율적이기 때문에 Query를 더욱더 고민해서 작성하는게 올바른 방법이라고 할 수 있다.
SELECT S.SITE_CODE, S.SITE_NAME, V.VNDR_CODE, V.VNDR_NAME
FROM TB_SITE AS S
JOIN TB_SITE_VENDOR AS SV ON S.SITE_CODE = SV.SITE_CODE
WHERE S.SITE_CODE IN ('101', '102')
AND V.VNDR_CODE = '1001'
# 예제는 참고자료에서 보장
UNION :
두 개의 SELECT 결과를 합친 결과에서 중복되는 행은 하나만 표시한다.
-- column의 개수가 같아야 하고, 각 column의 데이터 타입이 같아야 한다.
-- UNION ALL
: 중복을 제거하지 않는다.
참고자료
WITH
--https://heodolf.tistory.com/71
--https://royzero.tistory.com/50
UNION
728x90
'정리 > SQL' 카테고리의 다른 글
[SQL 강의 정리] 5. JOIN, CASE (0) | 2021.08.18 |
---|---|
[SQL 강의 정리] 4. GROUP BY, ORDER BY, HAVING (0) | 2021.08.18 |
[SQL 강의 정리] 3. SELECT FROM - WHERE (0) | 2021.08.18 |
[SQL 강의 정리] 2. SELECT FROM (0) | 2021.08.10 |
[SQL 강의 정리] 1. Operator functions (0) | 2021.08.10 |