SQL#크로스조인

codataffee·2024년 5월 7일
0

SQL

목록 보기
9/19
post-thumbnail

개요


📌 CROSS JOIN

  • CROSS JOIN : 교차 결합
    두 테이블 A와 B를 조건 없이 모두 매칭하는 방법

1. 왜?

  • 테이블을 모두 결합시키는 크로스 조인을 사용할 일은 자주 있지 않은 것 같다.
    JOIN 의 개념을 모두 익히고 있다고 생각했는데,
    SQL 문제를 풀면서 방법이 나오지 않아 찾다가 새롭게 알게 되었기 때문.

  • 아래는 오늘 풀었던 문제 중 크로스 조인을 사용해야 했던 상황이다.

    • Students 테이블과 Subjects 테이블을 보면 공통 key 칼럼이 존재하지 않는다.

    • 문제에서 요구한 Output 을 보면,
      (Examinations 테이블에는 없고, Students 테이블에는 있는)
      6번 Alex가 전 과목 시험에 응시하지 않고, 2번 Bob이 Physics 과목을 응시하지 않은 것까지 attended_exams에 포함하여 조회를 해야 한다.

    • 따라서 위와 같이 각 학생의 아이디와 이름, 모든 과목이 나열된 테이블이 필요했는데,
      그것을 크로스 조인을 통해 만들어 낼 수 있었다.

2. 어떻게?

#명시적(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
profile
커피 좋아하는 데이터 꿈나무

0개의 댓글

관련 채용 정보

Powered by GraphCDN, the GraphQL CDN