관련 문제: https://leetcode.com/problems/students-and-examinations/
두 table의 데이터 조합에 대해 모든 경우의 수를 가지는 Cartesian Product를 구하는 방법에 대해 알아보자.
Tables
Students
1
2
3
4
5
6
7
8
+------------+--------------+
| student_id | student_name |
+------------+--------------+
| 1 | Alice |
| 2 | Bob |
| 13 | John |
| 6 | Alex |
+------------+--------------+
Subjects
1
2
3
4
5
6
7
+--------------+
| subject_name |
+--------------+
| Math |
| Physics |
| Programming |
+--------------+
Three Ways to Cartesian Product
[1] CROSS JOIN
사용하기
1
2
3
SELECT *
FROM Students
CROSS JOIN Subjects
[2] (INNER) JOIN
사용하기
1
2
3
SELECT *
FROM Students
INNER JOIN Subjects ON 1=1 -- 1=1은 항상 True임을 나타내어 아무것도 제거하지 않는다는 의미
[3] FROM
절에 나열하기
1
2
SELECT *
FROM Students, Subjects
2, 3번 방법의 경우,
ON
또는WHERE
조건을 설정하면 INNER JOIN으로 동작한다.
Result
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| student_id | student_name | subject_name |
| ---------- | ------------ | ------------ |
| 1 | Alice | Programming |
| 1 | Alice | Physics |
| 1 | Alice | Math |
| 2 | Bob | Programming |
| 2 | Bob | Physics |
| 2 | Bob | Math |
| 13 | John | Programming |
| 13 | John | Physics |
| 13 | John | Math |
| 6 | Alex | Programming |
| 6 | Alex | Physics |
| 6 | Alex | Math |