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

MySQL에서 쉼표 연산자를 활용한 교차 조인(CROSS JOIN) 쿼리 작성 방법

쉼표 연산자로 교차 조인 작성하기

두 개의 테이블을 결합하는 가장 기본적인 방법은 쉼표(,) 연산자를 사용하여 교차 조인(Cross Join)을 작성하는 것입니다. MySQL에서는 CROSS JOIN 키워드나 그 동의어인 JOIN 키워드를 사용해서도 교차 조인을 작성할 수 있습니다.

교차 조인을 만들 때는 조인 술어(join-predicate)라고 불리는 조건을 지정할 필요가 없습니다. 즉, WHERE 절 없이 두 테이블의 모든 행이 서로 곱해진 형태의 결과(카테시안 곱)가 반환됩니다.

예제 테이블 준비

교차 조인의 동작을 이해하기 위해 다음과 같은 데이터를 가진 두 개의 테이블 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)

쉼표 연산자를 사용한 교차 조인 쿼리

아래 쿼리는 쉼표 연산자를 사용하여 위의 두 테이블을 교차 조인합니다. FROM 절에 두 테이블 이름을 쉼표로 구분하여 나열하기만 하면 됩니다.

mysql> Select * FROM tbl_1,tbl_2 ;
+----+--------+----+---------+
| Id | Name   | Id | Name    |
+----+--------+----+---------+
| 1  | Gaurav | A  | Aarav   |
| 2  | Rahul  | A  | Aarav   |
| 3  | Raman  | A  | Aarav   |
| 4  | Aarav  | A  | Aarav   |
| 1  | Gaurav | B  | Mohan   |
| 2  | Rahul  | B  | Mohan   |
| 3  | Raman  | B  | Mohan   |
| 4  | Aarav  | B  | Mohan   |
| 1  | Gaurav | C  | Jai     |
| 2  | Rahul  | C  | Jai     |
| 3  | Raman  | C  | Jai     |
| 4  | Aarav  | C  | Jai     |
| 1  | Gaurav | D  | Harshit |
| 2  | Rahul  | D  | Harshit |
| 3  | Raman  | D  | Harshit |
| 4  | Aarav  | D  | Harshit |
+----+--------+----+---------+
16 rows in set (0.00 sec)

결과 분석

실행 결과를 보면 첫 번째 테이블의 각 행(4개)이 두 번째 테이블의 모든 행(4개)과 한 번씩 짝지어져 총 4 × 4 = 16개의 행이 반환된 것을 확인할 수 있습니다. 이것이 바로 카테시안 곱(Cartesian Product)입니다.

참고로 SELECT * FROM tbl_1 CROSS JOIN tbl_2; 또는 SELECT * FROM tbl_1 JOIN tbl_2;와 같이 작성해도 완전히 동일한 결과를 얻을 수 있습니다. 다만 실무에서는 의도하지 않은 대량의 데이터 생성을 방지하기 위해 교차 조인 사용 시 주의가 필요하며, 일반적으로는 조인 조건을 명시하는 INNER JOIN 등을 사용하는 것이 권장됩니다.