- CROSS 조인은 두 테이블 간에 아무 연관관계가 없는 경우에도 조인을 할 수 있는 문법이다.
- 이렇게 아무 연관관계가 없는 조인이라서 막조인 이라고도 한다.
- 예를 들어 a 라는 테이블과 b 테이블이 있을 때, a를 기준으로 CROSS JOIN 을 한다면
- 각 a의 행별로 b의 모든 행이 붙게 된다.
- 이를 카데시안 곱 혹은 데카르트 곱 이라고 하는데,
- 만약 a에 m개의 행이 있고, b에 n개의 행이 있었다면 CROSS JOIN의 결과는 m * n 개의 행이 나오게 된다.
- 예를 들어 a에 4개, b에 3개 라면 a의 각 행별로 b의 3개 행이 붙으므로 총 4 * 3 = 12개의 행이 나오게 된다.
- 만약 sizes라는 테이블과 colors 라는 테이블을 조합해 상품 옵션을 만든다면 쿼리는 아래와 같다.
SELECT
CONCAT('티셔츠 - ', c.color, ' - ', s.size) AS option_name
FROM
sizes AS s
CROSS JOIN
colors c;
- 이렇게 하면 각 ‘티셔츠 - black - s’, ‘티셔츠 - black - m’ 처럼 모든 옵션이 만들어지게 된다.
INSERT INTO product_options (option_name, size, color)
SELECT
CONCAT('티셔츠 - ', c.color, ' - ', s.size) AS option_name,
size,
color
FROM
sizes AS s
CROSS JOIN
colors c;
- 이런식으로 아예 INSERT 문과 합쳐서 동적으로 간단하게 모든 옵션에 대한 데이터를 넣을 수도 있다.
주의사항
- CROSS 조인은 굉장히 위험한 조인이다.
- 왜냐하면 카데시안 곱이기 때문에 두 테이블을 크로스 조인하였을 때 데이터가 기하급수적으로 늘수도 있기 때문이다.
- 그래서 보통 CROSS 조인은 정말 필요한 상황이 아니면 안쓰는게 좋고, 특히 데이터가 많은 테이블끼리 CROSS 조인을 하게 되면 DB 자체에 엄청난 부하를 줄수도 있으므로 주의해야 한다.