JOIN


나만 몰랐던 테이블 3개 이상일 때 JOIN

오늘은 세 개 이상의 테이블을 JOIN해서 데이터 결과 값을 가져오는 쿼리를 작성했다.


[ 첫 번째 쿼리문 ]

SELECT
    df.DATA_SEQ, df.DATA_TYPE, df.`DEPTH`, df.PARENTS, df.FOLDER_NAME, df.COLOR, f2.FILE_NAME, f2.FILE_TYPE, f2.FILE_SIZE, f2.FILE_PATH
FROM (
    SELECT dd.DATA_SEQ, dd.DATA_TYPE, dd.`DEPTH`, dd.PARENTS, dd.`USE_YN`, f.FOLDER_NAME, f.COLOR
    FROM DRIVE_DATA dd
    LEFT JOIN FOLDER f ON dd.DATA_SEQ = f.DATA_SEQ
    WHERE dd.USE_YN = "Y"
    ) AS df
LEFT JOIN FILE f2 ON df.DATA_SEQ = f2.DATA_SEQ
WHERE df.USE_YN = "Y";

위 쿼리문의 첫 번째 문제점은 가독성 이라는 피드백을 받았다.


[ 두 번째 쿼리문 ]

SELECT
    df.DATA_SEQ,
    df.DATA_TYPE,
    df.`DEPTH`,
    df.PARENTS,
    df.FOLDER_NAME,
    df.COLOR,
    f2.FILE_NAME,
    f2.FILE_TYPE,
    f2.FILE_SIZE,
    f2.FILE_PATH
FROM (
        SELECT
            dd.DATA_SEQ,
            dd.DATA_TYPE,
            dd.`DEPTH`,
            dd.PARENTS,
            dd.`USE_YN`,
            f.FOLDER_NAME,
            f.COLOR
        FROM
            DRIVE_DATA dd
        LEFT JOIN FOLDER f
            ON dd.DATA_SEQ = f.DATA_SEQ
        WHERE dd.USE_YN = "Y"
    ) AS df
LEFT JOIN FILE f2
    ON df.DATA_SEQ = f2.DATA_SEQ
WHERE
    df.USE_YN = "Y";

이전 보다 훨씬 눈에 잘들어온다. 하지만 쿼리문이 길어지는 부분이 쪼금 거슬린다.


[ 세 번째 쿼리문 ]

회사 선임개발자 분이 피드백 해주셨다.

SELECT
    dd.DATA_SEQ,
    dd.DATA_TYPE,
    dd.`DEPTH`,
    dd.PARENTS,
    f.FOLDER_NAME,
    f.COLOR,
    f2.FILE_NAME,
    f2.FILE_TYPE,
    f2.FILE_SIZE,
    f2.FILE_PATH
FROM 
    DRIVE_DATA dd
LEFT JOIN FOLDER f
    ON dd.DATA_SEQ = f.DATA_SEQ
LEFT JOIN FILE f2
    ON dd.DATA_SEQ = f2.DATA_SEQ
WHERE
    dd.USE_YN = "Y";

오늘 짠 쿼리문은 서로 다른 세 개의 테이블을 JOIN해서 데이터를 가져와야 해서 만들었다.

세 개의 쿼리 모두 동일한 결과를 반환한다. 하지만 마지막 쿼리문이 가장 가독성도 좋고

쿼리문의 길이도 적당한거 같다. (물론 추가적인 조건이 있다면 더 길어질수도)

사실 세 개 이상의 테이블을 JOIN하려면 무조건 SubQuery를 짜고, 나머지 테이블과 앞에서 만든

SubQuery 테이블 을 다시 JOIN 해야한다고 생각했다.

앞으로는 SubQuery를 짜는 방식과 JOIN을 두 번 이상 쓰는 두 가지 방식모두 고려해보면서

쿼리문을 짜야겠다.