테이블을 모두 결합시키는 크로스 조인을 사용할 일은 자주 있지 않은 것 같다.
JOIN 의 개념을 모두 익히고 있다고 생각했는데,
SQL 문제를 풀면서 방법이 나오지 않아 찾다가 새롭게 알게 되었기 때문.
아래는 오늘 풀었던 문제 중 크로스 조인을 사용해야 했던 상황이다.
- Students 테이블과 Subjects 테이블을 보면 공통 key 칼럼이 존재하지 않는다.
- 문제에서 요구한 Output 을 보면,
(Examinations 테이블에는 없고, Students 테이블에는 있는)
6번 Alex가 전 과목 시험에 응시하지 않고, 2번 Bob이 Physics 과목을 응시하지 않은 것까지 attended_exams에 포함하여 조회를 해야 한다.
#명시적(EXPLICIT) CROSS JOIN
SELECT *
FROM 테이블1 CROSS JOIN 테이블2
#암시적(IMPLICIT) CROSS JOIN
SELECT *
FROM 테이블1, 테이블2
- CROSS JOIN 을 명시해주거나 콤마(,)를 통해
테이블1
과테이블2
를 작성하고
조건절인ON
이나USING
없이 조회를 하게 되면 CROSS JOIN 테이블 생성SELECT s.student_id, s.student_name, j.subject_name FROM Students s CROSS JOIN Subjects j
크로스 조인이 일어나는 순서:
1) 테이블1(Students
)의 첫번째 행인 student_id 1 의 Alice와
테이블2(Subjects
)의 모든 행이 하나씩 결합
2) 테이블1의 두번째, 세번째, 네번째 행 모두 테이블2의 모든 행과 하나씩 결합
- 생성된 CROSS JOIN 테이블
+) ON 1 = 1
# JOIN 후 ON 조건절에 1 = 1 을 표기해도 크로스 조인이 가능하다.
SELECT s.student_id,
s.student_name,
j.subject_name
FROM Students s JOIN Subjects j
ON 1 = 1