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.