[SQL] LEFT JOIN, INNER JOIN 차이
웹에서 게시판을 만들어보게 되면서 DataBase를 접하게 되었다. 각 주제에 따라 테이블을 나누어 작성한 후, 정보를 가져오는 경우 테이블을 합치는 경우가 있었다. 이때 JOIN을 사용하게 되는데, 그 중 많이 사용하는 것이 LEFT JOIN과 INNER JOIN이었다. 이 둘의 차이에 대해 알아보자.
아래는 예제로 사용할 테이블이다. DBMS는 MariaDB를 사용했다.
SELECT * FROM topic;
+-----+------------+------------------+-----------+
| tid | title | description | author_id |
+-----+------------+------------------+-----------+
| 1 | HTML | HTML is ... | 1 |
| 2 | CSS | CSS is ... | 2 |
| 3 | JavaScript | JavaScript is .. | 1 |
| 4 | Database | Database is ... | NULL |
+-----+------------+------------------+-----------+
SELECT * FROM author;
+-----+----------+--------+------------+
| aid | name | city | profile_id |
+-----+----------+--------+------------+
| 1 | egoing | seoul | 1 |
| 2 | leezche | jeju | 2 |
| 3 | blackdew | namhae | 3 |
+-----+----------+--------+------------+
교집합, 합집합에 대한 설명은 아래 이미지를 참고해라.

OUTER JOIN - 합집합
LEFT JOIN은 OUTER JOIN의 일종이다. 따라서 LEFT OUTER JOIN이라고 볼 수 있다.
OUTER JOIN은 합집합을 의미한다.
여기서 LEFT JOIN은 왼쪽의 모든 행을 조회한다. 따라서 topic테이블의 author_id 필드의 값이 NULL이면, author 테이블은 해당 행이 존재하지 않으므로 해당 행의 필드 값들은 NULL로 채워진다.
SELECT * FROM topic LEFT JOIN author ON topic.author_id = author.aid;
+-----+------------+------------------+-----------+------+---------+-------+------------+
| tid | title | description | author_id | aid | name | city | profile_id |
+-----+------------+------------------+-----------+------+---------+-------+------------+
| 1 | HTML | HTML is ... | 1 | 1 | egoing | seoul | 1 |
| 2 | CSS | CSS is ... | 2 | 2 | leezche | jeju | 2 |
| 3 | JavaScript | JavaScript is .. | 1 | 1 | egoing | seoul | 1 |
| 4 | Database | Database is ... | NULL | NULL | NULL | NULL | NULL |
+-----+------------+------------------+-----------+------+---------+-------+------------+
INNER JOIN - 교집합
말 그대로 교집합을 나타낸다. 따라서 겹치지 않는 행이 존재할 경우, 그 행은 결과에서 제외된다.
결과를 보면 author_id가 NULL인 행이 결과에서 제외된 것을 알 수 있다.
SELECT * FROM topic INNER JOIN author ON topic.author_id = author.aid;
+-----+------------+------------------+-----------+-----+---------+-------+------------+
| tid | title | description | author_id | aid | name | city | profile_id |
+-----+------------+------------------+-----------+-----+---------+-------+------------+
| 1 | HTML | HTML is ... | 1 | 1 | egoing | seoul | 1 |
| 2 | CSS | CSS is ... | 2 | 2 | leezche | jeju | 2 |
| 3 | JavaScript | JavaScript is .. | 1 | 1 | egoing | seoul | 1 |
+-----+------------+------------------+-----------+-----+---------+-------+------------+
성능 차이
두 테이블에서 JOIN을 위한 기준 열이 서로 값을 가지고 있는 경우 조회에서 누락되는 행은 존재하지 않는다.
그렇다면 LEFT JOIN과 INNER JOIN은 같은 조회 결과를 보인다. 이때, INNER JOIN이 상대적으로 성능이 좋다고 한다.
교집합만 고려하다보니 빠를 것 같긴 하다.
정리
LEFT JOIN은 합집합,INNER JOIN은 교집합이다.
결과가 같다면LEFT JOIN대신INNER JOIN을 사용하자.
게시판 프로젝트 URL
Github - Profile-exe/CRUDboardsite
Author And Source
이 문제에 관하여([SQL] LEFT JOIN, INNER JOIN 차이), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@profile_exe/SQL-LEFT-JOIN-INNER-JOIN-차이저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)