키워드 없이 JOIN을 사용하면 어떻게 될까?
MySQL에서 쿼리를 작성할 때 'RIGHT' 또는 'LEFT' 키워드를 생략하면, MySQL은 해당 쿼리를 INNER JOIN으로 간주하여 결과를 반환합니다. 그 이유는 RIGHT JOIN, LEFT JOIN, INNER JOIN 사이의 유일한 차이점이 바로 'RIGHT' 또는 'LEFT' 키워드의 유무이기 때문입니다.
이를 쉽게 이해하기 위해 다음과 같은 데이터를 가진 두 개의 테이블 tbl_1과 tbl_2를 예로 들어 살펴보겠습니다.
mysql> Select * from tbl_1; +----+--------+ | Id | Name | +----+--------+ | 1 | Gaurav | | 2 | Rahul | | 3 | Raman | | 4 | Aarav | +----+--------+ 4 rows in set (0.00 sec) mysql> Select * from tbl_2; +----+---------+ | Id | Name | +----+---------+ | A | Aarav | | B | Mohan | | C | Jai | | D | Harshit | +----+---------+ 4 rows in set (0.00 sec)
RIGHT JOIN 예제
'RIGHT' 키워드를 사용한 RIGHT JOIN 쿼리는 다음과 같습니다.
mysql> SELECT tbl_1.id,tbl_2.id FROM tbl_1 RIGHT JOIN tbl_2 ON tbl_1.name = tbl_2.name; +------+----+ | id | id | +------+----+ | 4 | A | | NULL | B | | NULL | C | | NULL | D | +------+----+ 4 rows in set (0.00 sec)
이번에는 'RIGHT' 키워드 없이 작성한 쿼리입니다.
mysql> Select tbl_1.id,tbl_2.id FROM tbl_1 JOIN tbl_2 ON tbl_1.name = tbl_2.name; +----+----+ | id | id | +----+----+ | 4 | A | +----+----+ 1 row in set (0.00 sec)
위 결과 집합을 비교해 보면, 'RIGHT' 키워드를 사용하지 않은 경우 MySQL은 이를 INNER JOIN 쿼리로 인식하여 양쪽 테이블에서 이름이 일치하는 행(Aarav)만 반환한 것을 확인할 수 있습니다. 반면 RIGHT JOIN에서는 오른쪽 테이블(tbl_2)의 모든 행이 결과에 포함되고, 일치하지 않는 왼쪽 테이블의 값은 NULL로 표시됩니다.
LEFT JOIN 예제
'LEFT' 키워드를 사용한 LEFT JOIN 쿼리는 다음과 같습니다.
mysql> SELECT tbl_1.id,tbl_2.id FROM tbl_1 LEFT JOIN tbl_2 ON tbl_1.name = tbl_2.name; +----+------+ | id | id | +----+------+ | 1 | NULL | | 2 | NULL | | 3 | NULL | | 4 | A | +----+------+ 4 rows in set (0.02 sec)
이번에는 'LEFT' 키워드 없이 작성한 쿼리입니다.
mysql> Select tbl_1.id,tbl_2.id FROM tbl_1 JOIN tbl_2 ON tbl_1.name = tbl_2.name; +----+----+ | id | id | +----+----+ | 4 | A | +----+----+ 1 row in set (0.00 sec)
마찬가지로 'LEFT' 키워드를 생략하면 MySQL은 INNER JOIN으로 처리하여 일치하는 행만 반환합니다. LEFT JOIN에서는 왼쪽 테이블(tbl_1)의 모든 행이 결과에 포함되며, 매칭되지 않는 오른쪽 테이블의 값은 NULL로 채워집니다.
결론
결론적으로, MySQL에서 JOIN 키워드만 단독으로 사용하면 기본적으로 INNER JOIN으로 해석됩니다. 따라서 매칭되지 않는 행까지 포함하는 외부 조인(OUTER JOIN)의 특성이 필요하다면, 반드시 'LEFT' 또는 'RIGHT' 키워드를 명시적으로 작성해야 합니다.