알고는가자-CROSS JOIN

BackEnd_Ash.log·2024년 12월 6일
0

universe

목록 보기
2/5
INSERT INTO company_data_by_year (company_id, year, eps, roe, asset, debt, capital, total_revenue, invest_cash_flow, profit_after_tax, finance_cash_flow, operate_cash_flow)
SELECT c.id, y.year, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
FROM company c
CROSS JOIN (SELECT '2020' AS year
            UNION ALL SELECT '2021'
            UNION ALL SELECT '2022'
            UNION ALL SELECT '2023'
            UNION ALL SELECT '2024') y;

CROSS JOIN은 두 개의 테이블(또는 데이터 집합) 간의 데카르트 곱(Cartesian Product)를 생성하는 역할을 합니다. 즉, 하나의 테이블의 각 행을 다른 테이블의 모든 행과 조합하여 결과를 만듭니다.

예시를 통해 설명:

데이터셋 A (company 테이블에서 id 컬럼):

id
1
2
3

데이터셋 B (연도 데이터):

year
2020
2021
2022

CROSS JOIN을 수행하면 다음과 같은 결과를 얻습니다:

idyear
12020
12021
12022
22020
22021
22022
32020
32021
32022

이렇게 각 id와 각 year가 모두 조합된 행이 생성됩니다.


CROSS JOIN의 역할:

  1. 각 회사별로 모든 연도 추가:

    • company 테이블에 있는 모든 company_id를 연도 데이터(2020, 2021, 2022, 2023, 2024)와 조합해, 각 회사별로 5개의 연도 데이터를 생성합니다.
  2. 데이터 확장:

    • company 테이블의 모든 회사가 모든 연도를 가지도록 데이터가 확장됩니다.

쿼리에서의 활용:

CROSS JOIN (
  SELECT '2020' AS year
  UNION ALL SELECT '2021'
  UNION ALL SELECT '2022'
  UNION ALL SELECT '2023'
  UNION ALL SELECT '2024'
) y
  • 이 부분은 CROSS JOIN을 사용하여 company 테이블의 company_id와 연도 데이터(y)를 조합합니다.
  • 이렇게 하면 각 company_id에 대해 5개의 연도를 가진 행이 만들어지고, 이를 기반으로 기본값(0)을 포함하는 데이터를 삽입하게 됩니다.

CROSS JOIN이 필요한가?

다른 JOIN 종류 (e.g., INNER JOIN, LEFT JOIN)는 두 테이블 간에 연결 조건(ON)을 필요로 합니다. 하지만 우리는 company 테이블과 연도 데이터 간에 특정 조건 없이 모든 조합을 원하기 때문에 CROSS JOIN이 적합합니다.


간단하게 요약:

CROSS JOIN은 두 테이블 간의 모든 가능한 조합을 만들어 줍니다. 이 경우, 각 회사에 대해 5개의 연도를 자동으로 생성하여 삽입하려는 목적에 딱 맞는 도구입니다.

평소에 CROSS JOIN 을 쓸일이 없었느데 ,
필요하다면 코드로 구현했었는데 위의 CROSS JOIN 도 잘 사용하면 편할것 같다.

profile
꾸준함이란 ... ?

0개의 댓글