Tóm tắt :trong hướng dẫn này, bạn sẽ học cách sử dụng SQLite CROSS JOIN để kết hợp hai hoặc nhiều bộ kết quả từ nhiều bảng.
Giới thiệu về SQLite CROSS JOIN mệnh đề
Nếu bạn sử dụng LEFT JOIN , INNER JOIN hoặc CROSS JOIN không có ON hoặc USING mệnh đề, SQLite tạo ra tích Descartes của các bảng liên quan. Số hàng trong tích Đề-các là tích của số hàng trong mỗi bảng có liên quan.
Giả sử, chúng ta có hai bảng A và B. Các câu lệnh sau đây thực hiện phép nối chéo và tạo ra tích lũy thừa của các hàng từ bảng A và B.
SELECT *
FROM A JOIN B;Code language: SQL (Structured Query Language) (sql) SELECT *
FROM A
INNER JOIN B;Code language: SQL (Structured Query Language) (sql) SELECT *
FROM A
CROSS JOIN B;Code language: SQL (Structured Query Language) (sql) SELECT *
FROM A, B;Code language: SQL (Structured Query Language) (sql)
Giả sử, bảng A có N hàng và bảng B có M hàng, CROSS JOIN trong hai bảng này sẽ tạo ra một tập hợp kết quả có chứa NxM hàng.
Hãy tưởng tượng rằng nếu bạn có bảng thứ ba C với K hàng, kết quả của CROSS JOIN mệnh đề của ba bảng này sẽ chứa NxMxK hàng, có thể rất lớn. Do đó, bạn nên hết sức cẩn thận khi sử dụng CROSS JOIN mệnh đề.
Bạn sử dụng INNER JOIN và LEFT JOIN mệnh đề thường xuyên hơn CROSS JOIN mệnh đề. Tuy nhiên, bạn sẽ tìm thấy CROSS JOIN mệnh đề rất hữu ích trong một số trường hợp.
Ví dụ, khi bạn muốn có một ma trận có hai chiều được điền đầy đủ dữ liệu như dữ liệu thành viên và ngày tháng trong cơ sở dữ liệu thành viên. Bạn muốn kiểm tra số người tham dự của các thành viên cho tất cả các ngày có liên quan. Trong trường hợp này, bạn có thể sử dụng CROSS JOIN mệnh đề như câu sau:
SELECT name,
date
FROM members
CROSS JOIN dates;Code language: SQL (Structured Query Language) (sql) SQLite CROSS JOIN ví dụ mệnh đề
Các câu lệnh sau tạo ra ranks và suits các bảng lưu trữ cấp bậc và phù hợp cho một bộ bài và chèn dữ liệu đầy đủ vào hai bảng này.
CREATE TABLE ranks (
rank TEXT NOT NULL
);
CREATE TABLE suits (
suit TEXT NOT NULL
);
INSERT INTO ranks(rank)
VALUES('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),('10'),('J'),('Q'),('K'),('A');
INSERT INTO suits(suit)
VALUES('Clubs'),('Diamonds'),('Hearts'),('Spades');Code language: SQL (Structured Query Language) (sql)
Câu lệnh sau sử dụng CROSS JOIN mệnh đề trả về toàn bộ dữ liệu bộ bài:
SELECT rank,
suit
FROM ranks
CROSS JOIN
suits
ORDER BY suit;Code language: SQL (Structured Query Language) (sql) | xếp hạng | bộ đồ |
|---|---|
| 2 | Câu lạc bộ |
| 3 | Câu lạc bộ |
| 4 | Câu lạc bộ |
| 5 | Câu lạc bộ |
| 6 | Câu lạc bộ |
| 7 | Câu lạc bộ |
| 8 | Câu lạc bộ |
| 9 | Câu lạc bộ |
| 10 | Câu lạc bộ |
| J | Câu lạc bộ |
| Q | Câu lạc bộ |
| K | Câu lạc bộ |
| A | Câu lạc bộ |
| 2 | Kim cương |
| 3 | Kim cương |
| 4 | Kim cương |
| 5 | Kim cương |
| 6 | Kim cương |
| 7 | Kim cương |
| 8 | Kim cương |
| 9 | Kim cương |
| 10 | Kim cương |
| J | Kim cương |
| Q | Kim cương |
| K | Kim cương |
| A | Kim cương |
| 2 | Trái tim |
| 3 | Trái tim |
| 4 | Trái tim |
| 5 | Trái tim |
| 6 | Trái tim |
| 7 | Trái tim |
| 8 | Trái tim |
| 9 | Trái tim |
| 10 | Trái tim |
| J | Trái tim |
| Q | Trái tim |
| K | Trái tim |
| A | Trái tim |
| 2 | Spades |
| 3 | Spades |
| 4 | Spades |
| 5 | Spades |
| 6 | Spades |
| 7 | Spades |
| 8 | Spades |
| 9 | Spades |
| 10 | Spades |
| J | Spades |
| Q | Spades |
| K | Spades |
| A | Spades |
Trong hướng dẫn này, bạn đã học cách sử dụng mệnh đề SQLite CROSS JOIN để tạo ra một tích Descartes gồm nhiều bảng có liên quan đến phép nối.