Just do IT
article thumbnail

다중 테이블에서 데이터를 한번에 출력하는 방법
1. WITH 구문  - VIEW(임시 테이블)을 사용하는 방식
2. JOIN - FROM에서 서브쿼리 활용

 

1. WITH 구문  - VIEW(임시 테이블)을 사용하는 방식

WITH

T1 AS ( SELECT NAME, SEX FROM TABLE1 WHERE USE_YN='Y'),

T2 AS (SELECT NAME, NICK FROM TABLE2 INNER JOIN ON T1.NAME = T2.NAME WHERE USE_YN='Y')

SELECT T1.NAME, T1.SEX, T2.NICK FROM T1, T2 WHERE T1.NAME = ''

위와 같이 T1, T2로 임시 테이블을 생성하고 마지막에 SELECT 문으로 각 임시테이블에서 데이터를 불러오면 한번에 출력할 수 있다.
단점 : 테이블이 많아질 수록 쿼리가 많아지고 그만큼 속도도 느려질 수 있다.

 

2. JOIN - FROM에서 서브쿼리 활용

** JOIN할 때 중요 POINT!!!
   > 최상단의 FROM에 기록하는 테이블이 기준이 되는 테이블이여야한다!!!

      회원 결제 내역을 보기 위해서는 회원 테이블에 있는 회원 코드가 기준이 된다

      -> 회원 테이블이 기준 테이블
   > JOIN 조건은 무조건!!! PK가 다 연결되어야 한다 (테이블에 공통으로 있는 PK는 다 조건에 넣으면 된다)

** ORDER BY는 항상 제일 마지막에 넣어야 오류가 안난다.

SELECT T11.NAME, T11.SEX, T22.NICK 
FROM TABLE1 T1

LEFT OUTER JOIN (
SELECT NAME, SEX FROM TABLE1 WHERE USE_YN='Y'
) T11 ON T1.NAME = T11.NAME AND T1.SEX = T11.SEX 

LEFT OUTER JOIN (
SELECT NAME, NICK FROM TABLE2 INNER JOIN ON T1.NAME = T2.NAME WHERE USE_YN='Y'
) T22 ON T1.NAME = T22.NAME

ORDER BY T11.NAME

 

** 금액 출력시 제일 위나 아래에 합계 혹은 이전금액을 출력하고 싶은 경우

   >  FG와 같이 컬럼을 추가하여서 ORDER BY를 해주면 된다 (FG 변수명은 자유)

SELECT 
	FG
    , COMPANY_CD
    , AMOUNT
    , DT
FROM (
    SELECT 
    	'1' AS FG
        , T11.COMPANY_CD AS COMPANY_CD
        , SUM(COALESCE(T11.AMOUNT, 0)) AS AMOUNT
        , '전기이월' AS DT 
    FROM TABLE1 T1

    LEFT OUTER JOIN (
        SELECT 
            COMPANY_CD
            , SUM(COALESCE(AMOUNT, 0)) AS AMOUNT 
        FROM TABLE1 
        	WHERE USE_YN='Y'
        GROUP BY COMPANY_CD
    ) T11 ON T1.COMPANY_CD = T11.COMPANY_CD

    LEFT OUTER JOIN (
    	SELECT 
        	COMPANY_CD
            , DT 
        FROM TABLE2 
        	INNER JOIN ON T1.NAME = T2.NAME 
            WHERE USE_YN='Y'
        GROUP BY COMPANY_CD, DT
    ) T22 ON T1.COMPANY_CD = T22.COMPANY_CD

    UNION ALL

    SELECT 
    	'2' AS FG
        , T11.COMPANY_CD AS COMPANY_CD
        , T11.AMOUNT AS AMOUNT
        , T22.DT AS DT
    FROM TABLE1 T1

    LEFT OUTER JOIN (
        SELECT 
            COMPANY_CD
            , AMOUNT 
        FROM TABLE1 
        	WHERE USE_YN='Y'
    ) T11 ON T1.COMPANY_CD = T11.COMPANY_CD

    LEFT OUTER JOIN (
    	SELECT 
        	COMPANY_CD
            , DT 
        FROM TABLE2 
        	INNER JOIN ON T1.NAME = T2.NAME 
            WHERE USE_YN='Y'
    ) T22 ON T1.COMPANY_CD = T22.COMPANY_CD
)
ORDER BY FG, DT

'Programing > DB' 카테고리의 다른 글

Mybatis 문법  (0) 2022.12.05
SQL 문법을 알아보자  (0) 2022.12.02
DBeaver auto-commit 설정 해제하기  (0) 2022.12.02
쿼리 - null 체크하기  (0) 2022.11.30
DBeaver 쿼리 history 보는 방법  (0) 2022.11.14
profile

Just do IT

@AmyG

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!