MySQL SELECT 문에서 쉼표 사용하기
네, 가능합니다. MySQL에서 FROM 절에 여러 테이블을 쉼표(,)로 나열하면 두 테이블의 카티션 곱(Cartesian Product), 즉 교차 조인(CROSS JOIN)이 수행됩니다. 구문은 다음과 같습니다.
구문 1: select * from yourTableName1, yourTableName2;
구문 2: select * from yourTableName1 cross join yourTableName2;
위의 두 구문은 완전히 동일한 결과를 반환합니다.
첫 번째 테이블 생성
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> create table DemoTable1882
(
Id int
);
Query OK, 0 rows affected (0.00 sec)
insert 명령을 사용하여 테이블에 레코드를 삽입합니다.
mysql> insert into DemoTable1882 values(10);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1882 values(20);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1882 values(30);
Query OK, 1 row affected (0.00 sec)
select 문을 사용하여 테이블의 모든 레코드를 확인해 보겠습니다.
mysql> select * from DemoTable1882;
다음과 같은 결과가 출력됩니다.
+------+
| Id |
+------+
| 10 |
| 20 |
| 30 |
+------+
3 rows in set (0.00 sec)
두 번째 테이블 생성
이번에는 두 번째 테이블을 생성하는 쿼리입니다.
mysql> create table DemoTable1883
(
Id int
);
Query OK, 0 rows affected (0.00 sec)
마찬가지로 insert 명령으로 레코드를 삽입합니다.
mysql> insert into DemoTable1883 values(100);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1883 values(101);
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1883 values(102);
Query OK, 1 row affected (0.00 sec)
select 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select * from DemoTable1883;
다음과 같은 결과가 출력됩니다.
+------+
| Id |
+------+
| 100 |
| 101 |
| 102 |
+------+
3 rows in set (0.00 sec)
쉼표를 사용한 SELECT 쿼리 실행
SELECT 문에서 쉼표를 사용하여 두 테이블을 함께 조회하는 쿼리는 다음과 같습니다.
mysql> select * from DemoTable1882,DemoTable1883;
다음과 같은 결과가 출력됩니다.
+------+------+
| Id | Id |
+------+------+
| 10 | 100 |
| 20 | 100 |
| 30 | 100 |
| 10 | 101 |
| 20 | 101 |
| 30 | 101 |
| 10 | 102 |
| 20 | 102 |
| 30 | 102 |
+------+------+
9 rows in set (0.00 sec)
CROSS JOIN으로 동일한 결과 얻기
쉼표 대신 CROSS JOIN을 사용해도 동일한 결과를 얻을 수 있습니다.
mysql> select * from DemoTable1882 cross join DemoTable1883;
실행 결과는 앞선 쿼리와 완전히 동일합니다.
+------+------+
| Id | Id |
+------+------+
| 10 | 100 |
| 20 | 100 |
| 30 | 100 |
| 10 | 101 |
| 20 | 101 |
| 30 | 101 |
| 10 | 102 |
| 20 | 102 |
| 30 | 102 |
+------+------+
9 rows in set (0.00 sec)
첫 번째 테이블의 각 행(3개)이 두 번째 테이블의 모든 행(3개)과 결합되어 총 9개(3 × 3)의 행이 반환됩니다. 이처럼 쉼표와 CROSS JOIN은 MySQL에서 동일하게 카티션 곱을 수행하며, 여기에 WHERE 절로 조건을 추가하면 내부 조인(INNER JOIN)과 같은 방식으로 동작합니다.