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)를 생성하는 역할을 합니다. 즉, 하나의 테이블의 각 행을 다른 테이블의 모든 행과 조합하여 결과를 만듭니다.
company
테이블에서 id
컬럼):id |
---|
1 |
2 |
3 |
year |
---|
2020 |
2021 |
2022 |
CROSS JOIN
을 수행하면 다음과 같은 결과를 얻습니다:
id | year |
---|---|
1 | 2020 |
1 | 2021 |
1 | 2022 |
2 | 2020 |
2 | 2021 |
2 | 2022 |
3 | 2020 |
3 | 2021 |
3 | 2022 |
이렇게 각 id
와 각 year
가 모두 조합된 행이 생성됩니다.
CROSS JOIN
의 역할:각 회사별로 모든 연도 추가:
company
테이블에 있는 모든 company_id
를 연도 데이터(2020, 2021, 2022, 2023, 2024)와 조합해, 각 회사별로 5개의 연도 데이터를 생성합니다.데이터 확장:
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 도 잘 사용하면 편할것 같다.