CROSS JOIN은 두테이블의 모든 행을 조합하여 데카르트 곱을 생성하는 JOIN 방식이다.
즉, 첫 번째 테이블의 모든 행과 두 번째 테이블의 모든 행을 서로 결합하여 결과를 반환 !
문법은 간단하다.
SELECT *
FROM 테이블1
CROSS JOIN 테이블2;
SELECT *
FROM 테이블1, 테이블2;
두 방식 모두 동일하게 작동한다. 하지만 CROSS JOIN을 명시적으로 사용하는 것이 직관적이라고 생각한다.
https://leetcode.com/problems/students-and-examinations/description/
학생 리스트가 있고 과목마다 시험을 본 횟수를 출력해줘야 하는 문제이다. 시험을 한번도 치지 않은 학생도 표시가 되도록 구현해야 한다.
SELECT s.student_id, s.student_name, e.subject_name, COUNT(e.subject_name) AS attended_exams
FROM Students s
LEFT JOIN Examinations e ON s.student_id = e.student_id
GROUP BY s.student_id, s.student_name, e.subject_name
ORDER BY s.student_id, e.subject_name;
SELECT s.student_id, s.student_name, sub.subject_name, COUNT(e.subject_name) AS attended_exams
FROM Students s
CROSS JOIN Subjects sub
LEFT JOIN Examinations e ON s.student_id = e.student_id AND sub.subject_name = e.subject_name
GROUP BY s.student_id, s.student_name, sub.subject_name
ORDER BY s.student_id, sub.subject_name;
JOIN 종류 | 설명 |
---|---|
INNER JOIN | 두 테이블 간 조건에 맞는 행만 반환. |
LEFT JOIN | 왼쪽 테이블의 모든 행과 조건에 맞는 오른쪽 테이블의 행 반환. 오른쪽 테이블에 일치하는 행이 없으면 NULL 반환. |
RIGHT JOIN | 오른쪽 테이블의 모든 행과 조건에 맞는 왼쪽 테이블의 행 반환. 왼쪽 테이블에 일치하는 행이 없으면 NULL 반환. |
FULL OUTER JOIN | 두 테이블의 모든 행과 조건에 맞는 행을 반환. 한쪽 테이블에 일치하는 행이 없으면 NULL 반환. |
CROSS JOIN | 조건 없이 두 테이블의 모든 행을 조합하여 반환 (데카르트 곱). |