Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL CROSS JOIN과 INNER JOIN의 차이점 및 구별하는 방법

MySQL에서 CROSS JOININNER JOIN은 오직 조인 조건(join predicate), 즉 지정된 조건의 유무에 따라서만 구별할 수 있습니다. INNER JOIN 쿼리를 작성할 때는 반드시 조건을 명시해야 하지만, 반대로 CROSS JOIN 쿼리를 작성할 때는 조건을 지정할 필요가 없습니다.

조건 없이 작성된 조인은 두 테이블의 모든 행 조합을 반환하는 데카르트 곱(Cartesian Product) 결과를 생성하며, 이것이 바로 CROSS JOIN입니다.

이해를 돕기 위해 다음과 같은 데이터를 가진 두 개의 테이블 tbl_1tbl_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)

INNER JOIN 쿼리 작성하기

INNER JOIN은 ON 절을 사용하여 조인 조건을 명시합니다. 두 테이블에서 이름(Name)이 일치하는 행만 반환되며, 쿼리와 실행 결과는 다음과 같습니다.

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)

위 결과에서 볼 수 있듯이, 두 테이블 모두 'Aarav'라는 이름을 가진 행이 존재하기 때문에 일치하는 단 하나의 행만 반환되었습니다.

조건을 생략하면 CROSS JOIN이 된다

이제 위의 쿼리에서 조건(ON 절)을 제거하고 작성하면 어떻게 될까요? 조건이 없는 조인은 자동으로 CROSS JOIN처럼 동작하여 두 테이블의 모든 가능한 행 조합을 반환합니다.

mysql> Select tbl_1.id, tbl_2.id FROM tbl_1 JOIN tbl_2;
+----+----+
| id | id |
+----+----+
| 1  | A  |
| 2  | A  |
| 3  | A  |
| 4  | A  |
| 1  | B  |
| 2  | B  |
| 3  | B  |
| 4  | B  |
| 1  | C  |
| 2  | C  |
| 3  | C  |
| 4  | C  |
| 1  | D  |
| 2  | D  |
| 3  | D  |
| 4  | D  |
+----+----+
16 rows in set (0.00 sec)

결과를 보면 tbl_1의 4개 행과 tbl_2의 4개 행이 모두 조합되어 총 16개(4 × 4)의 행이 반환된 것을 확인할 수 있습니다. 이것이 바로 데카르트 곱입니다.

핵심 정리

  • INNER JOIN: ON 절 등으로 조인 조건을 명시하며, 조건을 만족하는 행만 반환합니다.
  • CROSS JOIN: 조인 조건 없이 두 테이블의 모든 행 조합(데카르트 곱)을 반환합니다.
  • MySQL에서는 JOIN 키워드를 사용하더라도 조건을 생략하면 CROSS JOIN과 동일하게 동작합니다.