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

MySQL에서 테이블 값의 모든 조합을 조회하는 쿼리 작성법

MySQL에서 하나의 테이블에 저장된 값들을 서로 다른 조합으로 모두 조회하고 싶을 때가 있습니다. 이럴 때는 교차 조인(Cross Join) 개념을 활용하여 동일한 테이블을 여러 번 참조하면 됩니다. 이 글에서는 실제 예제를 통해 단계별로 살펴보겠습니다.

1. 테이블 생성하기

먼저 예제에 사용할 테이블을 생성합니다.

mysql> create table DemoTable622 (Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, Value1 int, Value2 int);
Query OK, 0 rows affected (1.08 sec)

2. 샘플 데이터 삽입하기

INSERT 명령을 사용하여 테이블에 레코드를 추가합니다.

mysql> insert into DemoTable622(Value1,Value2) values(1000,1000);
Query OK, 1 row affected (0.23 sec)
mysql> insert into DemoTable622(Value1,Value2) values(2000,3000);
Query OK, 1 row affected (1.04 sec)

3. 저장된 데이터 확인하기

SELECT 문으로 테이블의 전체 레코드를 조회합니다.

mysql> select *from DemoTable622;

실행 결과는 다음과 같습니다.

+----+--------+--------+
| Id | Value1 | Value2 |
+----+--------+--------+
| 1 | 1000 | 1000 |
| 2 | 2000 | 3000 |
+----+--------+--------+
2 rows in set (0.00 sec)

4. 모든 조합을 조회하는 쿼리

테이블의 값들로 만들 수 있는 모든 조합을 얻으려면, 동일한 테이블에 별칭(alias)을 붙여 세 번 참조하는 쿼리를 작성합니다.

mysql> select tbl1.Id, tbl2.Value1, tbl3.Value2 
from DemoTable622 tbl1, DemoTable622 tbl2, DemoTable622 tbl3;

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

+----+--------+--------+
| Id | Value1 | Value2 |
+----+--------+--------+
| 1 | 1000 | 1000 |
| 2 | 1000 | 1000 |
| 1 | 2000 | 1000 |
| 2 | 2000 | 1000 |
| 1 | 1000 | 3000 |
| 2 | 1000 | 3000 |
| 1 | 2000 | 3000 |
| 2 | 2000 | 3000 |
+----+--------+--------+
8 rows in set (0.01 sec)

동작 원리

위 쿼리는 WHERE 절 없이 세 개의 테이블 인스턴스를 나열했기 때문에 카티션 곱(Cartesian Product), 즉 교차 조인이 수행됩니다. 레코드가 2개인 테이블 세 개를 조합하면 2 × 2 × 2 = 8개의 행이 생성됩니다.

  • tbl1: Id 컬럼의 값 제공
  • tbl2: Value1 컬럼의 값 제공
  • tbl3: Value2 컬럼의 값 제공

이처럼 각 인스턴스가 독립적으로 모든 행을 반환하기 때문에, 테이블에 저장된 값들이 만들 수 있는 모든 경우의 수를 손쉽게 조회할 수 있습니다. 단, 원본 테이블의 레코드 수가 많아지면 결과 행 수는 레코드 수의 거듭제곱으로 증가하므로 대량 데이터에는 주의가 필요합니다.