
[SQL] left join vs (inner) join
April 30, 2022
left join / (inner) join
7SQL 스터디를 하다 자신만만하게 풀었는데 기대한 답이 나오지 않는 문제가 있었다.
주문을 한 번도 하지 않은 모든 고객을 찾아주세요.
스터디는 w3schools의 sql 실습 페이지를 이용했는데, 고객의 정보가 있는 Customers 테이블과 Orders 테이블이 있다. 주문이 없는 고객을 찾기 위해 Customers 테이블에 Orders 테이블을 join한 다음, OrderId에 null이 있는 걸 확인하려 했다.
select c.customerid, c.customername, o.orderid
from customers c
join orders o on c.customerid = o.customerid
order by c.customerid;그런데 실행 결과를 보니 OrderId가 없는 id 1, 6고객은 아예 결과에 잡히지 않았다.
아직 sql 문법에 익숙하지 않아서 inner, left 키워드를 차례로 앞에 붙여봤는데, left join일 때만 OrderId가 null인 경우도 포함되어 나왔다.
찾아보니 inner join은 차집합, left join을 포함한 outer join은 합집합을 나타낸다 한다.
A left join B를 하면, A 테이블의 모든 행을 조회하면서 B에 없는 값은 null로 처리된다. 나머지 outer join은 해당 사이트에서 지원하지 않아 써보진 못했지만, 스터디 덕분에 차이를 확실히 알게 되었다.