쉼표 연산자로 교차 조인 작성하기
두 개의 테이블을 결합하는 가장 기본적인 방법은 쉼표(,) 연산자를 사용하여 교차 조인(Cross Join)을 작성하는 것입니다. MySQL에서는 CROSS JOIN 키워드나 그 동의어인 JOIN 키워드를 사용해서도 교차 조인을 작성할 수 있습니다.
교차 조인을 만들 때는 조인 술어(join-predicate)라고 불리는 조건을 지정할 필요가 없습니다. 즉, WHERE 절 없이 두 테이블의 모든 행이 서로 곱해진 형태의 결과(카테시안 곱)가 반환됩니다.
예제 테이블 준비
교차 조인의 동작을 이해하기 위해 다음과 같은 데이터를 가진 두 개의 테이블 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)
쉼표 연산자를 사용한 교차 조인 쿼리
아래 쿼리는 쉼표 연산자를 사용하여 위의 두 테이블을 교차 조인합니다. 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 등을 사용하는 것이 권장됩니다.