데이터분석 study/SQL

TIL_24.07.12_다중 테이블 left join

justdata 2024. 7. 12. 13:19

오늘 아침에도 sql, 알고리즘 문제를 풀다가

sql 문제에서 3개 테이블을 left join을 사용해서 문제를 풀어야 하는

상황이었는데 with 문과 두 개 테이블 join하는 방법을 사용해서 풀었더니

역시나 오답이었다.🤦‍♀️

그래서 다른 분들 풀이를 찾아보았는데 3개 테이블을 join하는 방법이 있다는 것을

알고, 구글링을 해보았다.

 

그랬더니 left join과 다중테이블을 left join하는 것에 대해서 이해가 아주 잘되게 글을 써주신 분의 블로그가 있었다.

<출처>

https://kimsyoung.tistory.com/entry/3%EA%B0%9C-%EC%9D%B4%EC%83%81%EC%9D%98-%ED%85%8C%EC%9D%B4%EB%B8%94-LEFT-JOIN-%ED%95%98%EA%B8%B0

 

3개 이상의 테이블 LEFT JOIN 하기

우리는 SQL에서 2개의 테이블을 합칠 수 있다는 사실을 압니다. 바로 JOIN 이라는 개념을 사용해서요. 그렇다면, 세 개 혹은 그것보다 많은 테이블을 LEFT JOIN 할 수 있을까요? 네, 할 수 있습니다. 이

kimsyoung.tistory.com

 

▶ left join

    - inner join은 조인하는 두 테이블에 공통으로 존재하는 값만 반환하지만,

      left join의 경우, 왼쪽테이블에서는 모든 값을 오른쪽 테이블에서는 왼쪽 테이블과

      일치되는 값만 반환해준다. 

    - left join 을 할 때는 왼쪽테이블이 주인공이기 때문에 왼쪽 테이블에서 가져온 행의 값들은

      빠짐없이 전부 반환되지만 오른 쪽 테이블에서 가져오는 행의 값들은 존재하지 않아 

      null값으로 반환된다.

 

● 다중 테이블 join

   쿼리 구조 예시)

SELECT
 c.id,
 c.first_name,
 c.last_name,
 c.gender,
 c.age,
 c.customer_since,
 s.date AS sale,
 p.date AS promotion
FROM customers AS c
LEFT JOIN sales AS s
   ON c.id = s.customer_id
LEFT JOIN promotions AS p
    ON c.id = p.customer_id;

 

●  left join을 여러번 할 때 주의 점

    1) 어떤 순서로 테이블을 조인하는지에 따라 결과 테이블에 조회되는 행의 개수, 구성 등이

        달라진다. 그래서, left join을 한다면 첫 번째 테이블로 select문에 가장 많은 열을

        가져와야 할 테이블을 우선으로 적어야 한다.

 

    2) 조인을 여러 번 할 때, 시작을 left join으로 했다면 보통의 경우는 나머지 조인도 

        left join을 한다.

        - left join을 사용하는 이유는 어떤 값이 비록 조인하는 여러 개 테이블 내에는 공통적으로

          존재하진 않더라도, 그 값을 결과 테이블에서 보고 싶기 때문이다.