PostgreSQL의 CROSS JOIN은 한 테이블의 모든 행을 다른 테이블의 모든 행과 결합해 카티션 곱을 만들어요. 조합을 생성하거나, 테스트 데이터를 만들거나, 두 데이터셋의 요소를 짝지을 때 유용해요.
🔖 빠른 참고: 모든 JOIN 유형을 한눈에 보고 싶으신가요? 시각적 다이어그램과 코드 예제가 담긴 SQL JOIN 치트 시트를 확인해 보세요.
기본 문법
SELECT column1, column2
FROM table1
CROSS JOIN table2;
암시적 문법을 사용할 수도 있어요:
SELECT column1, column2
FROM table1, table2;
예제: 상품과 색상 조합
CROSS JOIN이 어떻게 동작하는지 보여 주기 위해 products와 colors라는 간단한 두 테이블을 살펴볼게요.
products 테이블:
| product_id | product_name |
|---|---|
| 1 | T-Shirt |
| 2 | Jeans |
colors 테이블:
| color_id | color_name |
|---|---|
| 1 | Red |
| 2 | Blue |
상품과 색상의 가능한 모든 조합을 생성하려면:
SELECT product_name, color_name
FROM products
CROSS JOIN colors;
예상 결과:
| product_name | color_name |
|---|---|
| T-Shirt | Red |
| T-Shirt | Blue |
| Jeans | Red |
| Jeans | Blue |
CROSS JOIN은 모든 상품을 모든 색상과 결합해서, 상품 2개 × 색상 2개 = 총 4개의 조합을 만들어요.
주요 활용 사례
모든 조합 생성: 사이즈와 색상을 결합해 상품 옵션을 만들어요:
SELECT size, color
FROM sizes CROSS JOIN colors;
테스트 데이터 생성: 여러 파라미터를 결합해 테스트용 샘플 데이터를 만들어요:
SELECT strategy, scenario
FROM strategies CROSS JOIN scenarios;
리포트 템플릿: 리포트에서 가능한 모든 조합에 대한 자리 표시용 행을 만들어요.
중요한 고려 사항
성능: CROSS JOIN은 매우 큰 결과 집합을 만들 수 있어요. 1,000행 테이블과 다른 1,000행 테이블을 크로스 조인하면 1,000,000행이 나와요.
필터링: WHERE 절로 결과를 제한하세요:
SELECT product_name, color_name
FROM products CROSS JOIN colors
WHERE product_name = 'T-Shirt';
결론
CROSS JOIN은 조합과 테스트 데이터를 만들 때 유용하지만, 큰 테이블에서는 성능 문제가 생기지 않도록 신중하게 사용하세요. 쿼리를 실행하기 전에 항상 결과 집합의 크기를 고려하세요.
Beekeeper Studio는 무료 오픈 소스 데이터베이스 GUI예요
지금까지 써 본 SQL 쿼리 & 에디터 도구 중 최고예요. 데이터베이스 관리에 필요한 모든 게 다 있어요. - ⭐⭐⭐⭐⭐ Mit
Beekeeper Studio는 빠르고 직관적이며 사용하기 쉬워요. 다양한 데이터베이스를 지원하고 Windows, Mac, Linux에서 모두 잘 작동해요.
Beekeeper Studio 사용자 후기
"Beekeeper Studio가 기존 SQL 워크플로를 완전히 대체했어요. 빠르고 직관적이라 데이터베이스 작업이 다시 즐거워졌어요."
"여러 데이터베이스 GUI를 써 봤지만, Beekeeper는 기능과 단순함 사이의 균형이 완벽해요. 그냥 잘 돌아가요."