Tóm tắt :trong hướng dẫn này, bạn sẽ tìm hiểu về truy vấn con SQLite để tạo các truy vấn phức tạp và dễ đọc hơn.
Giới thiệu về truy vấn con SQLite
Truy vấn con là SELECT
câu lệnh lồng trong một câu lệnh khác. Xem tuyên bố sau.
SELECT column_1
FROM table_1
WHERE column_1 = (
SELECT column_1
FROM table_2
);
Code language: SQL (Structured Query Language) (sql)
Truy vấn sau là truy vấn bên ngoài :
SELECT column_1
FROM table_1
WHERE colum_1 =
Code language: SQL (Structured Query Language) (sql)
Và truy vấn sau là truy vấn con .
(SELECT column_1
FROM table_2)
Code language: SQL (Structured Query Language) (sql)
Bạn phải sử dụng một cặp dấu ngoặc đơn để bao quanh một truy vấn con. Lưu ý rằng bạn có thể lồng một truy vấn con bên trong một truy vấn con khác với độ sâu nhất định.
Thông thường, một truy vấn con trả về một hàng dưới dạng giá trị nguyên tử, mặc dù nó có thể trả về nhiều hàng để so sánh các giá trị với IN
nhà điều hành.
Bạn có thể sử dụng một truy vấn con trong SELECT
, FROM
, WHERE
và JOIN
mệnh đề.
Ví dụ về truy vấn con SQLite
Chúng tôi sẽ sử dụng tracks
và albums
bảng từ cơ sở dữ liệu mẫu để trình diễn.
1) Truy vấn con SQLite trong WHERE
ví dụ mệnh đề
Bạn có thể sử dụng một truy vấn con đơn giản làm điều kiện tìm kiếm. Ví dụ:câu lệnh sau trả về tất cả các bản nhạc trong album với tiêu đề Let There Be Rock
SELECT trackid,
name,
albumid
FROM tracks
WHERE albumid = (
SELECT albumid
FROM albums
WHERE title = 'Let There Be Rock'
);
Code language: SQL (Structured Query Language) (sql)
Truy vấn con trả về id của album với tiêu đề 'Let There Be Rock'
. Truy vấn sử dụng toán tử bằng (=) để so sánh albumid
được trả về bởi truy vấn con với albumid
trong tracks
bảng.
Nếu truy vấn con trả về nhiều giá trị, bạn có thể sử dụng IN
toán tử để kiểm tra sự tồn tại của một giá trị duy nhất so với một tập giá trị.
Xem employees
sau và customers
bảng trong cơ sở dữ liệu mẫu:
Ví dụ:truy vấn sau trả về những khách hàng có đại diện bán hàng ở Canada.
SELECT customerid,
firstname,
lastname
FROM customers
WHERE supportrepid IN (
SELECT employeeid
FROM employees
WHERE country = 'Canada'
);
Code language: SQL (Structured Query Language) (sql)
Truy vấn con trả về danh sách id của các nhân viên ở Canada. Truy vấn bên ngoài sử dụng IN
để tìm những khách hàng có id đại diện bán hàng trong danh sách.
2) Truy vấn con SQLite trong FROM
ví dụ mệnh đề
Đôi khi bạn muốn áp dụng các hàm tổng hợp cho một cột nhiều lần. Ví dụ:trước tiên, bạn muốn tính tổng kích thước của một album và sau đó tính kích thước trung bình của tất cả các album. Bạn có thể đưa ra truy vấn sau.
SELECT AVG(SUM(bytes)
FROM tracks
GROUP BY albumid;
Code language: SQL (Structured Query Language) (sql)
Truy vấn này không hợp lệ.
Để khắc phục, bạn có thể sử dụng truy vấn con trong FROM
mệnh đề như sau:
SELECT
AVG(album.size)
FROM
(
SELECT
SUM(bytes) SIZE
FROM
tracks
GROUP BY
albumid
) AS album;
Code language: SQL (Structured Query Language) (sql)
AVG(album.size) --------------- 338288920.317
Trong trường hợp này, SQLite trước tiên thực thi truy vấn con trong FROM
mệnh đề và trả về một tập kết quả. Sau đó, SQLite sử dụng tập hợp kết quả này làm bảng dẫn xuất trong truy vấn bên ngoài.
Truy vấn con tương quan SQLite
Tất cả các truy vấn con bạn đã thấy cho đến nay đều có thể được thực thi một cách độc lập. Nói cách khác, nó không phụ thuộc vào truy vấn bên ngoài.
Truy vấn con tương quan là một truy vấn con sử dụng các giá trị từ truy vấn bên ngoài. Không giống như một truy vấn con thứ tự, một truy vấn con tương quan không thể được thực thi một cách độc lập.
Truy vấn con tương quan không hiệu quả vì nó được đánh giá cho từng hàng được truy vấn bên ngoài xử lý.
Truy vấn sau sử dụng một truy vấn con có liên quan để trả về các anbom có kích thước nhỏ hơn 10MB.
SELECT albumid,
title
FROM albums
WHERE 10000000 > (
SELECT sum(bytes)
FROM tracks
WHERE tracks.AlbumId = albums.AlbumId
)
ORDER BY title;
Code language: SQL (Structured Query Language) (sql)
Cách hoạt động của truy vấn.
- Đối với mỗi hàng được xử lý trong truy vấn bên ngoài, truy vấn con tương quan sẽ tính toán kích thước của các album từ các bản nhạc thuộc album hiện tại bằng cách sử dụng
SUM
chức năng. - Vị từ trong
WHERE
mệnh đề lọc các anbom có kích thước lớn hơn hoặc bằng 10MB (10000000 byte).
Truy vấn con tương quan SQLite trong SELECT
ví dụ mệnh đề
Truy vấn sau sử dụng truy vấn con tương quan trong SELECT
để trả về số lượng bản nhạc trong một album.
SELECT albumid,
title,
(
SELECT count(trackid)
FROM tracks
WHERE tracks.AlbumId = albums.AlbumId
)
tracks_count
FROM albums
ORDER BY tracks_count DESC;
Code language: SQL (Structured Query Language) (sql)
Trong hướng dẫn này, chúng tôi đã giới thiệu cho bạn về truy vấn con và chỉ ra nhiều cách khác nhau để sử dụng truy vấn con trong truy vấn để chọn dữ liệu từ các bảng.