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

Truy vấn con SQLite

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 , WHEREJOIN mệnh đề.

Ví dụ về truy vấn con SQLite

Chúng tôi sẽ sử dụng tracksalbums 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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sử dụng Quy trình lưu trữ Sqlite trong Android

  2. 3 cách sao lưu cơ sở dữ liệu SQLite

  3. 2 cách trả về giá trị không phải số trong SQLite

  4. SQLite SUBSTRING () Giải thích

  5. Hàm tạo SQLiteOpenHelper () không được xác định