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

Tham gia bên trong SQLite

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 tracksalbums 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 tracksalbums 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 albumsartists

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách cập nhật bảng với activeandroid sau khi thêm cột mới

  2. Android SQLite LIKE ký tự đại diện thoát

  3. SQLite - Tạo mối quan hệ

  4. Quyền của người dùng SQLite

  5. Làm thế nào để an toàn luồng EnableWriteAheadLogging trong bối cảnh sử dụng thực tế và tài liệu SQLite?