Tóm tắt :hướng dẫn này chỉ cho bạn cách sử dụng mệnh đề nối bên trong SQLite để truy vấn dữ liệu từ nhiều bảng.
Giới thiệu về mệnh đề nối bên trong SQLite
Trong cơ sở dữ liệu quan hệ, dữ liệu thường được phân phối trong nhiều bảng liên quan. Một bảng được liên kết với một bảng khác bằng các khóa ngoại.
Để truy vấn dữ liệu từ nhiều bảng, bạn sử dụng INNER JOIN mệnh đề. INNER JOIN mệnh đề kết hợp các cột từ các bảng tương quan.
Giả sử bạn có hai bảng:A và B.
A có các cột a1, a2 và f. B có b1, b2 và f cột. Bảng A liên kết với bảng B bằng cột khóa ngoại có tên f.
Sau đây minh họa cú pháp của mệnh đề kết hợp bên trong:
SELECT a1, a2, b1, b2
FROM A
INNER JOIN B on B.f = A.f;Code language: SQL (Structured Query Language) (sql)
Đối với mỗi hàng trong bảng A, INNER JOIN mệnh đề so sánh giá trị của cột f với giá trị của cột f trong bảng B. Nếu giá trị của cột f trong bảng A bằng với giá trị của cột f trong bảng B, nó sẽ kết hợp dữ liệu từ các cột a1, a2, b1, b2 và bao gồm hàng này trong tập kết quả.
Nói cách khác, INNER JOIN mệnh đề trả về các hàng từ bảng A có hàng tương ứng trong bảng B.
Logic này được áp dụng nếu bạn tham gia nhiều hơn 2 bảng.
Xem ví dụ sau.
Chỉ các hàng trong bảng A:(a1,1), (a3,3) có các hàng tương ứng trong bảng B (b1,1), (b2,3) mới được đưa vào tập kết quả.
Sơ đồ sau minh họa INNER JOIN mệnh đề:
SQLite INNER JOIN ví dụ
Hãy cùng xem qua tracks và albums bảng trong cơ sở dữ liệu mẫu. tracks bảng liên kết đến albums bảng qua AlbumId cột.
Trong tracks bảng, AlbumId cột là một khóa ngoại. Và trong albums bảng, AlbumId là khóa chính.
Để truy vấn dữ liệu từ cả hai tracks và albums bảng, bạn sử dụng câu lệnh sau:
SELECT
trackid,
name,
title
FROM
tracks
INNER JOIN albums ON albums.albumid = tracks.albumid;Code language: SQL (Structured Query Language) (sql) Hãy thử nó
Đối với mỗi hàng trong bảng bản nhạc, SQLite sử dụng giá trị trong albumid cột của tracks để so sánh với giá trị trong albumid của albums bàn. Nếu SQLite tìm thấy một kết quả phù hợp, nó sẽ kết hợp dữ liệu của các hàng trong cả hai bảng trong tập kết quả.
Bạn có thể bao gồm AlbumId từ cả hai bảng trong tập hợp kết quả cuối cùng để xem hiệu ứng.
SELECT
trackid,
name,
tracks.albumid AS album_id_tracks,
albums.albumid AS album_id_albums,
title
FROM
tracks
INNER JOIN albums ON albums.albumid = tracks.albumid;Code language: SQL (Structured Query Language) (sql) Hãy thử nó
Tham gia bên trong SQLite - ví dụ 3 bảng
Xem các bảng sau:tracks albums và artists
Một bài hát thuộc về một album và một album có nhiều bài hát. tracks bảng được liên kết với albums bảng qua albumid cột.
Một album thuộc về một nghệ sĩ và một nghệ sĩ có một hoặc nhiều album. Các albums bảng liên kết đến artists bảng qua artistid cột.
Để truy vấn dữ liệu từ các bảng này, bạn cần sử dụng hai mệnh đề nối bên trong trong SELECT tuyên bố như sau:
SELECT
trackid,
tracks.name AS track,
albums.title AS album,
artists.name AS artist
FROM
tracks
INNER JOIN albums ON albums.albumid = tracks.albumid
INNER JOIN artists ON artists.artistid = albums.artistid;Code language: SQL (Structured Query Language) (sql) Hãy thử nó
Bạn có thể sử dụng mệnh đề WHERE để lấy các bản nhạc và album của nghệ sĩ có id 10 như câu lệnh sau:
SELECT
trackid,
tracks.name AS Track,
albums.title AS Album,
artists.name AS Artist
FROM
tracks
INNER JOIN albums ON albums.albumid = tracks.albumid
INNER JOIN artists ON artists.artistid = albums.artistid
WHERE
artists.artistid = 10;Code language: SQL (Structured Query Language) (sql) Hãy thử nó
Trong hướng dẫn này, bạn đã học cách sử dụng SQLite INNER JOIN mệnh đề để truy vấn dữ liệu từ nhiều bảng.