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

MySQL SELECT 문에서 쉼표를 사용할 수 있나요?

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)과 같은 방식으로 동작합니다.