다중 테이블에서 데이터를 한번에 출력하는 방법
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 |