실무 예시로 SQL INNER JOIN과 LEFT JOIN 비교해보기

devmin·2020년 4월 5일
0

Database-series

목록 보기
5/6
post-thumbnail

약 두 달 전에 생활코딩 강의를 들으면서 [SQL - JOIN 다루기 기초]에 SQL JOIN에 관해 정리하긴 했었지만, 실제로 어디에 사용해야 하는지는 감이 잘 오지 않았습니다. 그러다보니 실제 인턴 생활 중에 두 JOIN을 구분해서 사용해야할 때가 왔는데 구분해서 사용하는 방법을 몰랐습니다.

그러다가 여러번의 삽질 끝에 실제로 사용하는 경우를 마주하게 됐고 그 경험을 간단히 소개하고자 합니다.

현재 브랜디에서 진행하고 있는 셀러 어드민 클론 프로젝트 중 셀러 정보를 수정하는 기능을 작업하고 있는데요, 여기서 셀러정보가 외래키를 물고 있는 브랜디 앱 유저 테이블에서 셀러가 수정하고자 입력한 브랜디 앱 유저 아이디 정보를 가져와야합니다. 아래의 테이블을 기준으로 말하면, 셀러가 brandi_app_users.app_id를 입력하면, brandi_app_users 테이블에 있는 동일한 app_id를 찾아서 해당 rowbrandi_app_users.app_user_no를 표출해줘야 합니다.

특정 seller_infos와 연결된 app_user_no를 가져오려면 JOIN 문 을 써야합니다. 먼저 INNER JOIN을 써보겠습니다. 일단 전체적인 그림을 보기 위해 특정 app_id를 찾는 조건은 걸지 않겠습니다.

SELECT 
seller_info_no, seller_account_id, app_user_no, app_id, b.is_deleted as app_id_is_deleted
FROM
seller_infos as a
INNER JOIN
brandi_app_users as b
ON a.seller_info_no = b.app_user_no

아래의 결과를 보면 각각의 셀러정보가 모두 app_id 정보를 잘 가져온 것처럼 보입니다. 하지만 여기에는 누락된 정보가 있는데요, 셀러정보와 연결되어있는 app_id가 없는 경우는 나타나지 않습니다. 셀러정보를 기준으로 app_id가 없으면 없다는 정보를 알아야하는데, 애초에 표현 자체가 되지 않는거죠.

그래서 이렇게 특정 정보(여기서는 셀러정보)를 기준으로 모든 데이터를 보고 싶다면, LEFT JOIN을 사용하면 됩니다.

SELECT 
seller_info_no, seller_account_id, app_user_no, app_id, b.is_deleted as app_id_is_deleted
FROM
seller_infos as a
LEFT JOIN
brandi_app_users as b
ON a.seller_info_no = b.app_user_no

왼쪽에 놓인 seller_infos 테이블을 기준으로 쿼리 결과가 정렬됐는데요, INNER JOIN 때 보이지 않던 NULL 데이터를 가진 seller_info_no들을 볼 수 있습니다. 저 같은 경우는 이번 사례를 통해서 INNER JOINLEFT JOIN의 차이를 좀 더 명확히 알게 되었습니다. 역시 겪어보면서 배우는게 최고죠 ㅎㅎㅎ

profile
개발자가 되어가는 중

0개의 댓글