Vấn đề:
Bạn muốn nhận tất cả các tổ hợp hàng từ hai bảng trong SQL.
Ví dụ:
Đây là hai bảng:một bảng chứa các chữ cái (letters
) và cái kia chứa số (numbers
):
letter |
---|
X |
Y |
number |
---|
0 |
1 |
2 |
Giải pháp 1:
Để kết hợp mọi hàng của letters
bảng với mọi hàng của numbers
, chúng tôi sẽ sử dụng CROSS JOIN
:
SELECT * FROM letters CROSS JOIN numbers;
Kết quả của truy vấn trông giống như sau:
letter | số |
---|---|
X | 0 |
Y | 0 |
X | 1 |
Y | 1 |
X | 2 |
Y | 2 |
Giải pháp 2:
Một cách khác để thực hiện CROSS JOIN như sau:
SELECT * FROM letters, numbers;
Điều này sẽ nhận được cùng một kết quả được tạo ra bởi truy vấn trước đó.
Thảo luận:
Theo quy tắc chung, CROSS JOIN
tạo ra một tập hợp kết quả trong đó mọi hàng từ một bảng này được nối với mọi hàng của bảng khác. Nói cách khác, nếu bảng đầu tiên lưu trữ n hàng và bảng thứ hai lưu trữ m hàng, sau đó là CROSS JOIN
sẽ dẫn đến một sản phẩm Descartes trong tổng số n × m hàng. Đây là lý do tại sao có sáu hàng được trả về bởi truy vấn trong ví dụ trên.
Vì CROSS JOIN
tạo ra tất cả các kết hợp có thể có của các hàng trong số các bảng đang được nối, không cần chỉ định mối quan hệ. Vì vậy, không giống như các JOINs
khác , không có ON
mệnh đề trong CROSS JOIN
.