SQLite
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> SQLite

SQLite CROSS JOIN với một ví dụ thực tế

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 JOINLEFT 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 rankssuits 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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. nhập cơ sở dữ liệu sqlite đã được tạo (xamarin)

  2. Cách tốt nhất để lưu hình ảnh đến từ máy chủ trong Android

  3. chức năng để kiểm tra xem SQLite đang sử dụng journal_mode =WAL hay journal_mode =DELETE

  4. Cách triển khai SQLCipher khi sử dụng SQLiteOpenHelper

  5. SQLite - Thả một cơ sở dữ liệu