Tóm tắt :trong hướng dẫn này, bạn sẽ học cách sắp xếp tập hợp kết quả của một truy vấn bằng cách sử dụng SQLite ORDER BY
mệnh đề.
Giới thiệu về SQLite ORDER BY
mệnh đề
SQLite lưu trữ dữ liệu trong các bảng theo một thứ tự không xác định. Nó có nghĩa là các hàng trong bảng có thể có hoặc không theo thứ tự mà chúng đã được chèn.
Nếu bạn sử dụng SELECT
để truy vấn dữ liệu từ một bảng, thứ tự của các hàng trong tập kết quả là không xác định.
Để sắp xếp tập hợp kết quả, bạn thêm ORDER BY
mệnh đề SELECT
tuyên bố như sau:
SELECT
select_list
FROM
table
ORDER BY
column_1 ASC,
column_2 DESC;
Code language: SQL (Structured Query Language) (sql)
ORDER BY
mệnh đề đứng sau FROM
mệnh đề. Nó cho phép bạn sắp xếp tập hợp kết quả dựa trên một hoặc nhiều cột theo thứ tự tăng dần hoặc giảm dần.
Trong cú pháp này, bạn đặt tên cột mà bạn muốn sắp xếp theo sau ORDER BY
theo sau mệnh đề là ASC
hoặc DESC
từ khóa.
-
ASC
từ khóa có nghĩa là tăng dần. - Và
DESC
từ khóa có nghĩa là giảm dần.
Nếu bạn không chỉ định ASC
hoặc DESC
từ khóa, SQLite sắp xếp tập hợp kết quả bằng ASC
lựa chọn. Nói cách khác, nó sắp xếp kết quả được đặt theo thứ tự tăng dần theo mặc định.
Trong trường hợp bạn muốn sắp xếp tập hợp kết quả theo nhiều cột, bạn sử dụng dấu phẩy (,) để ngăn cách hai cột. ORDER BY
mệnh đề sắp xếp các hàng bằng cách sử dụng các cột hoặc biểu thức từ trái sang phải. Nói cách khác, ORDER BY
mệnh đề sắp xếp các hàng bằng cách sử dụng cột đầu tiên trong danh sách. Sau đó, nó sắp xếp các hàng đã sắp xếp bằng cách sử dụng cột thứ hai, v.v.
Bạn có thể sắp xếp tập hợp kết quả bằng cách sử dụng một cột không xuất hiện trong danh sách chọn của SELECT
mệnh đề.
SQLite ORDER BY
ví dụ mệnh đề
Hãy bắt đầu tracks
trong cơ sở dữ liệu mẫu cho phần trình diễn.
Giả sử, bạn muốn lấy dữ liệu từ các cột tên, mili giây và id album, bạn sử dụng câu lệnh sau:
SELECT
name,
milliseconds,
albumid
FROM
tracks;
Code language: SQL (Structured Query Language) (sql)
Hãy thử nó
SELECT
câu lệnh không sử dụng ORDER BY
mệnh đề trả về một tập kết quả không theo bất kỳ thứ tự nào.
Giả sử bạn muốn sắp xếp tập hợp kết quả dựa trên AlbumId
theo thứ tự tăng dần, bạn sử dụng câu lệnh sau:
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
albumid ASC;
Code language: SQL (Structured Query Language) (sql)
Hãy thử nó
Tập hợp kết quả bây giờ được sắp xếp theo AlbumId
theo thứ tự tăng dần như trong ảnh chụp màn hình.
SQLite sử dụng ASC
theo mặc định, do đó bạn có thể bỏ qua nó trong câu lệnh trên như sau:
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
albumid;
Hãy thử nó
Giả sử bạn muốn sắp xếp kết quả đã sắp xếp (theo AlbumId
) trên Milliseconds
cột theo thứ tự giảm dần. Trong trường hợp này, bạn cần thêm Milliseconds
vào cột ORDER BY
mệnh đề như sau:
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
albumid ASC,
milliseconds DESC;
Code language: SQL (Structured Query Language) (sql)
Hãy thử nó
SQLite sắp xếp các hàng theo AlbumId
cột theo thứ tự tăng dần trước. Sau đó, nó sắp xếp kết quả được sắp xếp theo Milliseconds
theo thứ tự giảm dần.
Nếu bạn xem các bản nhạc của album bằng AlbumId
1, bạn thấy rằng thứ tự các bản nhạc thay đổi giữa hai câu lệnh.
SQLite ORDER BY
với vị trí cột
Thay vì chỉ định tên của các cột, bạn có thể sử dụng vị trí của cột trong ORDER BY
mệnh đề.
Ví dụ:câu lệnh sau đây sắp xếp các bản nhạc theo cả albumid
(Cột thứ 3) và milliseconds
(Cột thứ 2) theo thứ tự tăng dần.
SELECT
name,
milliseconds,
albumid
FROM
tracks
ORDER BY
3,2;
Code language: SQL (Structured Query Language) (sql)
Hãy thử nó
Số 3 và 2 đề cập đến AlbumId
và Milliseconds
trong danh sách cột xuất hiện trong SELECT
mệnh đề.
Sắp xếp NULL
Trong thế giới cơ sở dữ liệu, NULL là đặc biệt. Nó biểu thị rằng thông tin bị thiếu hoặc dữ liệu không áp dụng được.
Giả sử bạn muốn lưu trữ ngày sinh của một nghệ sĩ trong một bảng. Tại thời điểm lưu bản ghi của nghệ sĩ, bạn không có thông tin ngày sinh.
Để thể hiện thông tin ngày sinh không xác định trong cơ sở dữ liệu, bạn có thể sử dụng một ngày đặc biệt như 01.01.1900
hoặc một ''
chuỗi rỗng. Tuy nhiên, cả hai giá trị này đều không cho thấy rõ ràng rằng ngày sinh là không xác định.
NULL đã được phát minh để giải quyết vấn đề này. Thay vì sử dụng một giá trị đặc biệt để chỉ ra rằng thông tin bị thiếu, NULL được sử dụng.
NULL đặc biệt vì bạn không thể so sánh nó với một giá trị khác. Nói một cách đơn giản, nếu hai phần thông tin không xác định, bạn không thể so sánh chúng.
NULL thậm chí không thể được so sánh với chính nó; NULL không bằng chính nó nên NULL = NULL
luôn cho kết quả là false.
Khi nói đến sắp xếp, SQLite coi NULL nhỏ hơn bất kỳ giá trị nào khác.
Có nghĩa là NULL sẽ xuất hiện ở đầu tập kết quả nếu bạn sử dụng ASC hoặc ở cuối tập kết quả khi bạn sử dụng DESC.
SQLite 3.30.0 đã thêm NULLS FIRST
và NULLS LAST
tùy chọn cho ORDER BY
mệnh đề. NULLS FIRST
tùy chọn chỉ định rằng NULL sẽ xuất hiện ở đầu tập kết quả trong khi NULLS LAST
tùy chọn đặt NULL ở cuối tập kết quả.
Ví dụ sau sử dụng ORDER BY
mệnh đề sắp xếp các bản nhạc của các nhà soạn nhạc:
SELECT
TrackId,
Name,
Composer
FROM
tracks
ORDER BY
Composer;
Code language: SQL (Structured Query Language) (sql)
Đầu tiên, bạn thấy rằng NULL xuất hiện ở đầu tập kết quả vì SQLite coi chúng là giá trị thấp nhất. Khi cuộn xuống kết quả, bạn sẽ thấy các giá trị khác:
Ví dụ sau sử dụng NULLS LAST
tùy chọn để đặt NULL sau các giá trị khác:
SELECT
TrackId,
Name,
Composer
FROM
tracks
ORDER BY
Composer NULLS LAST;
Code language: SQL (Structured Query Language) (sql)
Nếu bạn cuộn đầu ra xuống, bạn sẽ thấy rằng NULL được đặt ở cuối tập kết quả:
Trong hướng dẫn này, bạn đã học cách sử dụng ORDER BY
của SQLite mệnh đề sắp xếp tập hợp kết quả bằng cách sử dụng một cột duy nhất, nhiều cột theo thứ tự tăng dần và giảm dần.