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

Tham gia SQLite

Tóm tắt :trong hướng dẫn này, bạn sẽ tìm hiểu về các loại liên kết SQLite khác nhau để truy vấn dữ liệu từ hai hoặc nhiều bảng.

Để trình diễn, chúng tôi sẽ sử dụng artistsalbums bảng từ cơ sở dữ liệu mẫu.

Một nghệ sĩ có thể có không hoặc nhiều album trong khi một album thuộc về một nghệ sĩ.

Để truy vấn dữ liệu từ cả artistsalbums bảng, bạn sử dụng có thể sử dụng INNER JOIN , LEFT JOIN hoặc CROSS JOIN mệnh đề. Mỗi mệnh đề nối xác định cách SQLite sử dụng dữ liệu từ một bảng để khớp với các hàng trong bảng khác.

Lưu ý rằng SQLite không hỗ trợ trực tiếp RIGHT JOINFULL OUTER JOIN .

SQLite INNER JOIN

Câu lệnh sau trả về tên album và tên nghệ sĩ của họ:

SELECT 
    Title,
    Name
FROM 
    albums
INNER JOIN artists 
    ON artists.ArtistId = albums.ArtistId;
Code language: SQL (Structured Query Language) (sql)

Đây là kết quả một phần:

Trong ví dụ này, INNER JOIN mệnh đề khớp với từng hàng từ albums bảng với mọi hàng từ artists bảng dựa trên điều kiện tham gia (artists.ArtistId = albums.ArtistId ) được chỉ định sau ON từ khóa.

Nếu điều kiện kết hợp đánh giá là true (hoặc 1), các cột của hàng từ cả albumsartists bảng được bao gồm trong tập kết quả.

Truy vấn này sử dụng bí danh bảng (l cho albums bảng và r cho các nghệ sĩ artists bảng) để rút ngắn truy vấn:

SELECT
    l.Title, 
    r.Name
FROM
    albums l
INNER JOIN artists r ON
    r.ArtistId = l.ArtistId;
Code language: SQL (Structured Query Language) (sql)

Trong trường hợp tên cột của các bảng đã kết hợp giống nhau, ví dụ:ArtistId , bạn có thể sử dụng USING cú pháp như sau:

SELECT
   Title, 
   Name
FROM
   albums
INNER JOIN artists USING(ArtistId);Code language: SQL (Structured Query Language) (sql)

Mệnh đề USING(ArtistId) tương đương với mệnh đề ON artists.ArtistId = albums.ArtistId .

SQLite LEFT JOIN

Câu lệnh này chọn tên nghệ sĩ và tên album từ artistsalbums bảng sử dụng LEFT JOIN mệnh đề:

SELECT
    Name, 
    Title
FROM
    artists
LEFT JOIN albums ON
    artists.ArtistId = albums.ArtistId
ORDER BY Name;
Code language: SQL (Structured Query Language) (sql)

Đây là kết quả:

LEFT JOIN mệnh đề chọn dữ liệu bắt đầu từ bảng bên trái (artists ) và các hàng phù hợp trong bảng bên phải (albums ) dựa trên điều kiện tham gia (artists.ArtistId = albums.ArtistId ).

Phép nối bên trái trả về tất cả các hàng từ artists bảng (hoặc bảng bên trái) và các hàng phù hợp từ albums bảng (hoặc bảng bên phải).

Nếu một hàng từ bảng bên trái không có một hàng phù hợp trong bảng bên phải, thì SQLite sẽ bao gồm các cột của các hàng trong bảng bên trái và NULL cho các cột của bảng bên phải.

Tương tự với INNER JOIN , bạn có thể sử dụng USING cú pháp cho điều kiện tham gia như sau:

SELECT
   Name, 
   Title
FROM
   artists
LEFT JOIN albums USING (ArtistId)
ORDER BY
   Name;Code language: SQL (Structured Query Language) (sql)

Nếu bạn muốn tìm nghệ sĩ không có bất kỳ album nào, bạn có thể thêm WHERE như được hiển thị trong truy vấn sau:

SELECT
    Name,
    Title
FROM
    artists
LEFT JOIN albums ON
    artists.ArtistId = albums.ArtistId
WHERE Title IS NULL   
ORDER BY Name;
Code language: SQL (Structured Query Language) (sql)

Hình ảnh này cho thấy đầu ra một phần:

Nói chung, loại truy vấn này cho phép bạn tìm các hàng có sẵn trong bảng bên trái nhưng không có các hàng tương ứng trong bảng bên phải.

Lưu ý rằng LEFT JOINLEFT OUTER JOIN là từ đồng nghĩa.

SQLite CROSS JOIN

CROSS JOIN mệnh đề tạo ra một tích số Descartes của các hàng từ các bảng đã kết hợp.

Không giống như INNER JOINLEFT JOIN mệnh đề, một CROSS JOIN không có điều kiện tham gia. Đây là cú pháp cơ bản của CROSS JOIN mệnh đề:

SELECT
    select_list
FROM table1
CROSS JOIN table2;
Code language: SQL (Structured Query Language) (sql)

CROSS JOIN kết hợp mọi hàng từ bảng đầu tiên (table1 ) với mọi hàng từ bảng thứ hai (table2 ) để tạo thành tập kết quả.

Nếu bảng đầu tiên có N hàng, bảng thứ hai có M hàng, kết quả cuối cùng sẽ có NxM hàng.

Một ví dụ thực tế về CROSS JOIN mệnh đề là kết hợp hai tập dữ liệu để tạo thành một tập dữ liệu ban đầu để xử lý thêm. Ví dụ:bạn có một danh sách các sản phẩm và tháng và bạn muốn lập kế hoạch khi nào bạn có thể bán những sản phẩm nào.

Tập lệnh sau tạo ra các sản phẩm artistscalendars bảng:

CREATE TABLE products(
    product text NOT null
);

INSERT INTO products(product)
VALUES('P1'),('P2'),('P3');



CREATE TABLE calendars(
    y int NOT NULL,
    m int NOT NULL
);

INSERT INTO calendars(y,m)
VALUES 
    (2019,1),
    (2019,2),
    (2019,3),
    (2019,4),
    (2019,5),
    (2019,6),
    (2019,7),
    (2019,8),
    (2019,9),
    (2019,10),
    (2019,11),
    (2019,12);
Code language: SQL (Structured Query Language) (sql)

Truy vấn này sử dụng CROSS JOIN mệnh đề kết hợp các sản phẩm với các tháng:

SELECT * 
FROM products
CROSS JOIN calendars;
Code language: SQL (Structured Query Language) (sql)

Đây là kết quả:

Trong hướng dẫn này, bạn đã học được nhiều loại phép nối SQLite khác nhau cho phép bạn truy vấn từ nhiều bảng.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLiteDatabase android IllegalStateException

  2. Cách last_insert_rowid () hoạt động trong SQLite

  3. Cách tạo ứng dụng quốc tế hóa ngoại tuyến:Sử dụng cơ sở dữ liệu Sqlite

  4. Làm thế nào để chèn hình ảnh trong thư viện bền vững trong phòng?

  5. android.database.sqlite.SQLiteException:near s:lỗi cú pháp (mã 1):,