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.