오늘 아침에도 sql, 알고리즘 문제를 풀다가
sql 문제에서 3개 테이블을 left join을 사용해서 문제를 풀어야 하는
상황이었는데 with 문과 두 개 테이블 join하는 방법을 사용해서 풀었더니
역시나 오답이었다.🤦♀️
그래서 다른 분들 풀이를 찾아보았는데 3개 테이블을 join하는 방법이 있다는 것을
알고, 구글링을 해보았다.
그랬더니 left join과 다중테이블을 left join하는 것에 대해서 이해가 아주 잘되게 글을 써주신 분의 블로그가 있었다.
<출처>
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을 사용하는 이유는 어떤 값이 비록 조인하는 여러 개 테이블 내에는 공통적으로
존재하진 않더라도, 그 값을 결과 테이블에서 보고 싶기 때문이다.
'데이터분석 study > SQL' 카테고리의 다른 글
TIL_24.07.24_MySQL 날짜형/날짜 변환, 가공함수 (0) | 2024.07.24 |
---|---|
TIL_24.07.16_ <union all, null 치환> (0) | 2024.07.16 |
TIL_24.07.11_join 과 using (0) | 2024.07.11 |
TIL(Today I Learned) 24.07.01 (0) | 2024.07.01 |
TIL(Today I Learned) 24.06.24 (0) | 2024.06.28 |