Thứ sáu, 18/12/2020 | 00:00 GMT+7

Lệnh Select các hàng trong Sql

Một trong những phần cơ bản nhất của việc làm việc với cơ sở dữ liệu là thực hành truy xuất thông tin về dữ liệu. Trong hệ quản trị cơ sở dữ liệu quan hệ, bất kỳ thao tác nào được sử dụng để lấy thông tin từ bảng được gọi là truy vấn . Trong hướng dẫn này, ta sẽ thảo luận về cú pháp của truy vấn trong Ngôn ngữ truy vấn có cấu trúc (SQL) cũng như một số hàm và toán tử được sử dụng phổ biến hơn của chúng.

Yêu cầu

Để làm theo hướng dẫn này, bạn cần một máy tính chạy một số loại hệ quản trị cơ sở dữ liệu quan hệ (RDBMS) sử dụng SQL. Các hướng dẫn và ví dụ trong hướng dẫn này đã được kiểm nghiệm bằng cách sử dụng môi trường sau:

  • Server chạy Ubuntu 20.04, với user không phải root có quyền quản trị và tường lửa được cấu hình bằng UFW, như được mô tả trong hướng dẫn cài đặt server ban đầu cho Ubuntu 20.04.
  • MySQL được cài đặt và bảo mật trên server, như được nêu trong Cách cài đặt MySQL trên Ubuntu 20.04 . Cheat sheets này đã được xác minh với một user mới được tạo, như được mô tả trong Bước 3 .

Lưu ý : Xin lưu ý nhiều RDBMS sử dụng các triển khai SQL duy nhất của riêng họ. Mặc dù các lệnh được nêu trong hướng dẫn này sẽ hoạt động trên hầu hết các RDBMS, nhưng cú pháp hoặc kết quả chính xác có thể khác nếu bạn kiểm tra chúng trên một hệ thống không phải MySQL.

  • Bạn cũng cần một cơ sở dữ liệu với một số bảng được tải với dữ liệu mẫu mà bạn có thể sử dụng để thực hành viết truy vấn. Ta khuyến khích bạn xem qua phần Kết nối với MySQL và Cài đặt Database Mẫu sau đây để biết chi tiết về cách kết nối với server MySQL và tạo cơ sở dữ liệu thử nghiệm được sử dụng trong các ví dụ xuyên suốt hướng dẫn này.

Kết nối với MySQL và cài đặt cơ sở dữ liệu mẫu

Nếu hệ thống cơ sở dữ liệu SQL của bạn chạy trên một server từ xa, hãy SSH vào server từ máy cục bộ của bạn:

  • ssh sammy@your_server_ip

Sau đó, mở dấu nhắc server cơ sở dữ liệu. Nếu bạn đang sử dụng MySQL, hãy làm như vậy bằng cách chạy lệnh sau, đảm bảo thay sammy bằng tên tài khoản user MySQL của bạn:

  • mysql -u sammy -p

Từ dấu nhắc, hãy tạo cơ sở dữ liệu có tên queries_db :

  • CREATE DATABASE queries_db;

Nếu cơ sở dữ liệu được tạo thành công, bạn sẽ nhận được kết quả như sau:

Output
Query OK, 1 row affected (0.01 sec)

Để chọn cơ sở dữ liệu queries_db , hãy chạy câu lệnh USE

  • USE queries_db;

Output
Database changed

Sau khi chọn queries_db , hãy tạo một vài bảng bên trong nó.

Để làm theo các ví dụ được sử dụng trong hướng dẫn này, hãy tưởng tượng rằng bạn điều hành một sáng kiến dọn dẹp các công viên công cộng ở Thành phố New York. Chương trình gồm các tình nguyện viên cam kết làm sạch công viên thành phố gần nhà bằng cách thường xuyên nhặt rác. Khi tham gia sáng kiến, mỗi tình nguyện viên này đặt mục tiêu có bao nhiêu túi rác mà họ muốn nhặt mỗi tuần. Bạn quyết định lưu trữ thông tin về mục tiêu của tình nguyện viên trong cơ sở dữ liệu SQL với một bảng có năm cột:

  • vol_id : số nhận dạng của mỗi tình nguyện viên, được thể hiện bằng kiểu dữ liệu int Cột này sẽ đóng vai trò là khóa chính của bảng, nghĩa là mỗi giá trị sẽ hoạt động như một số nhận dạng duy nhất cho hàng tương ứng của nó. Bởi vì mọi giá trị trong khóa chính phải là duy nhất, cột này cũng sẽ có một UNIQUE được áp dụng cho nó
  • name mỗi tình nguyện viên, được thể hiện bằng varchar với tối đa 20 ký tự
  • park : tên công viên nơi mỗi tình nguyện viên sẽ nhặt rác, được thể hiện bằng varchar với tối đa 20 ký tự. Lưu ý nhiều tình nguyện viên có thể dọn rác trong cùng một công viên
  • weekly_goal : mục tiêu của mỗi tình nguyện viên về số lượng túi rác mà họ muốn nhặt trong một tuần, được biểu thị bằng kiểu int
  • max_bags : kỷ lục cá nhân của mỗi tình nguyện viên về số lượng túi rác nhiều nhất mà họ nhặt được trong một tuần, được biểu thị dưới dạng int

Chạy câu CREATE TABLE sau để tạo một bảng có tên là volunteers có năm cột sau:

  • CREATE TABLE volunteers (
  • vol_id int UNIQUE,
  • name varchar(20),
  • park varchar(30),
  • weekly_goal int,
  • max_bags int,
  • PRIMARY KEY (vol_id)
  • );

Sau đó tải volunteers với một số dữ liệu mẫu. Chạy INSERT INTO sau để thêm bảy hàng dữ liệu đại diện cho bảy tình nguyện viên của chương trình:

  • INSERT INTO volunteers
  • VALUES
  • (1, 'Gladys', 'Prospect Park', 3, 5),
  • (2, 'Catherine', 'Central Park', 2, 2),
  • (3, 'Georgeanna', 'Central Park', 2, 1),
  • (4, 'Wanda', 'Van Cortland Park', 1, 1),
  • (5, 'Ann', 'Prospect Park', 2, 7),
  • (6, 'Juanita', 'Riverside Park', 1, 4),
  • (7, 'Georgia', 'Prospect Park', 1, 3);

Như vậy, bạn đã sẵn sàng làm theo phần còn lại của hướng dẫn và bắt đầu học cách tạo truy vấn trong SQL.

Các thành phần truy vấn bắt buộc: các điều khoản SELECTFROM

Trong SQL, một câu lệnh là bất kỳ hoạt động nào được gửi đến hệ thống cơ sở dữ liệu sẽ thực hiện một số loại tác vụ, như tạo bảng, chèn hoặc xóa dữ liệu hoặc thay đổi cấu trúc của cột hoặc bảng. Truy vấn là một câu lệnh SQL lấy thông tin về dữ liệu được giữ trong cơ sở dữ liệu.

Riêng nó, một truy vấn sẽ không thay đổi bất kỳ dữ liệu hiện có nào được giữ trong bảng. Nó sẽ chỉ trả về thông tin về dữ liệu mà tác giả của truy vấn yêu cầu rõ ràng. Thông tin được trả về bởi một truy vấn nhất định được gọi là tập kết quả của nó. Tập kết quả thường bao gồm một hoặc nhiều cột từ một bảng được chỉ định và mỗi cột được trả về trong tập kết quả có thể chứa một hoặc nhiều hàng thông tin.

Đây là cú pháp chung của truy vấn SQL:

  • SELECT columns_to_return
  • FROM table_to_query;

Các câu lệnh SQL được tạo thành từ các mệnh đề khác nhau, bao gồm các từ khóa nhất định và thông tin mà các từ khóa này yêu cầu. Ở mức tối thiểu, các truy vấn SQL chỉ yêu cầu bạn bao gồm hai mệnh đề: mệnh đề SELECTFROM .

Lưu ý : Trong cú pháp ví dụ này, cả hai mệnh đề đều được viết trên dòng riêng của chúng. Tuy nhiên, bất kỳ câu lệnh SQL nào cũng có thể được viết trên một dòng, như sau:

  • SELECT columns_to_return FROM table_to_query;

Hướng dẫn này sẽ tuân theo quy ước kiểu SQL phổ biến là tách các câu lệnh thành nhiều dòng để mỗi dòng chỉ chứa một mệnh đề. Điều này nhằm mục đích làm cho mỗi ví dụ dễ đọc và dễ hiểu hơn, nhưng lưu ý miễn là bạn không bao gồm bất kỳ lỗi cú pháp nào, bạn có thể viết bất kỳ truy vấn nào trên một dòng hoặc trên nhiều dòng tùy thích.

Mọi truy vấn SQL đều bắt đầu bằng SELECT , dẫn đến một số đề cập đến các truy vấn nói chung là SELECT . Sau SELECT xuất hiện danh sách bất kỳ cột nào bạn muốn được trả về trong tập kết quả. Các cột này được vẽ từ bảng được chỉ định trong mệnh đề FROM

Trong các truy vấn SQL, thứ tự thực hiện bắt đầu bằng mệnh đề FROM Điều này có thể gây nhầm lẫn vì SELECT được viết trước FROM , nhưng hãy nhớ rằng RDBMS trước tiên phải biết tập dữ liệu làm việc đầy đủ được truy vấn trước khi bắt đầu truy xuất thông tin từ nó. Có thể hữu ích khi coi các truy vấn là SELECT các cột được chỉ định FROM bảng được chỉ định. Cuối cùng, điều quan trọng cần lưu ý là mọi câu lệnh SQL phải kết thúc bằng dấu chấm phẩy ( ; ).

Như một ví dụ, hãy chạy truy vấn sau. Thao tác này sẽ lấy cột name từ bảng volunteers

  • SELECT name
  • FROM volunteers;

Đây là tập hợp kết quả của truy vấn này:

Output
+------------+
| name       |
+------------+
| Gladys     |
| Catherine  |
| Georgeanna |
| Wanda      |
| Ann        |
| Juanita    |
| Georgia    |
+------------+
7 rows in set (0.00 sec)

Mặc dù thao tác này đã xem xét toàn bộ volunteers , nhưng nó chỉ trả về cột, name được chỉ định.

Bạn có thể truy xuất thông tin từ nhiều cột bằng cách tách tên của mỗi cột bằng dấu phẩy, như trong truy vấn sau. Thao tác này sẽ trả về các vol_id , namepark từ bảng volunteers

  • SELECT park, name, vol_id
  • FROM volunteers;

Output
+-------------------+------------+--------+
| park              | name       | vol_id |
+-------------------+------------+--------+
| Prospect Park     | Gladys     |      1 |
| Central Park      | Catherine  |      2 |
| Central Park      | Georgeanna |      3 |
| Van Cortland Park | Wanda      |      4 |
| Prospect Park     | Ann        |      5 |
| Riverside Park    | Juanita    |      6 |
| Prospect Park     | Georgia    |      7 |
+-------------------+------------+--------+
7 rows in set (0.00 sec)

Lưu ý tập kết quả này trả về park đầu tiên, tiếp theo là name và sau đó là vol_id . Database SQL thường sẽ trả về các cột theo bất kỳ thứ tự nào mà chúng được liệt kê trong mệnh đề SELECT

Có thể có lúc bạn muốn truy xuất mọi cột từ một bảng. Thay vì viết ra tên của mọi cột trong truy vấn của bạn, thay vào đó bạn có thể nhập dấu hoa thị ( * ). Trong SQL, đây là cách viết tắt của “mọi cột”.

Truy vấn sau sẽ trả về mọi cột từ bảng volunteers

  • SELECT *
  • FROM volunteers;

Output
+--------+------------+-------------------+-------------+----------+
| vol_id | name       | park              | weekly_goal | max_bags |
+--------+------------+-------------------+-------------+----------+
|      1 | Gladys     | Prospect Park     |           3 |        5 |
|      2 | Catherine  | Central Park      |           2 |        2 |
|      3 | Georgeanna | Central Park      |           2 |        1 |
|      4 | Wanda      | Van Cortland Park |           1 |        1 |
|      5 | Ann        | Prospect Park     |           2 |        7 |
|      6 | Juanita    | Riverside Park    |           1 |        4 |
|      7 | Georgia    | Prospect Park     |           1 |        3 |
+--------+------------+-------------------+-------------+----------+
7 rows in set (0.00 sec)

Lưu ý cách các cột của tập kết quả này được liệt kê theo cùng thứ tự mà chúng được xác định trong câu CREATE TABLE từ phần Kết nối với MySQL và Cài đặt Database Mẫu trước đó. Đây là cách hầu hết các hệ thống cơ sở dữ liệu quan hệ sẽ sắp xếp thứ tự các cột trong tập kết quả khi chạy một truy vấn sử dụng dấu hoa thị thay cho các tên cột riêng lẻ.

Lưu ý bạn có thể lấy thông tin từ nhiều bảng trong cùng một truy vấn với từ khóa JOIN Bạn có thể làm theo hướng dẫn về Cách sử dụng tham gia trong SQL để biết chi tiết về cách thực hiện việc này.

Loại bỏ các giá trị trùng lặp với DISTINCT

Theo mặc định, các RDBMS sẽ trả về mọi giá trị từ một cột được trả về bởi một truy vấn, bao gồm cả các giá trị trùng lặp.

Như một ví dụ, hãy chạy truy vấn sau. Kết quả sẽ trả về các giá trị từ cột park của bảng volunteers

  • SELECT park
  • FROM volunteers;

Output
+-------------------+
| park              |
+-------------------+
| Prospect Park     |
| Central Park      |
| Central Park      |
| Van Cortland Park |
| Prospect Park     |
| Riverside Park    |
| Prospect Park     |
+-------------------+
7 rows in set (0.00 sec)

Lưu ý cách tập hợp kết quả này bao gồm hai giá trị trùng lặp: Prospect ParkCentral Park . Điều này có ý nghĩa, vì nhiều tình nguyện viên có thể dọn rác trong cùng một công viên. Tuy nhiên, có thể có lúc bạn chỉ muốn biết những giá trị duy nhất nào được giữ trong một cột. Bạn có thể đưa ra các truy vấn loại bỏ các giá trị trùng lặp bằng cách thực hiện theo SELECT với từ khóa DISTINCT

Truy vấn sau sẽ trả về mọi giá trị duy nhất trong parks , loại bỏ mọi trùng lặp. Nó giống với truy vấn trước đó ngoại trừ nó bao gồm từ khóa DISTINCT

  • SELECT DISTINCT park
  • FROM volunteers;

Output
+-------------------+
| park              |
+-------------------+
| Prospect Park     |
| Central Park      |
| Van Cortland Park |
| Riverside Park    |
+-------------------+
4 rows in set (0.00 sec)

Tập hợp kết quả của truy vấn này có ít hơn ba hàng so với tập hợp trước đó, vì nó đã loại bỏ một trong các Central Park và hai trong số các giá trị Prospect Park

Lưu ý SQL xử lý mọi hàng của tập kết quả như một bản ghi riêng lẻ và DISTINCT sẽ chỉ loại bỏ các bản sao nếu nhiều hàng chia sẻ các giá trị giống nhau trong mỗi cột

Để minh họa điều này, ban hành các truy vấn sau đây bao gồm các DISTINCT từ khóa nhưng lợi nhuận cả namepark cột:

  • SELECT DISTINCT name, park
  • FROM volunteers;

Output
+------------+-------------------+
| name       | park              |
+------------+-------------------+
| Gladys     | Prospect Park     |
| Catherine  | Central Park      |
| Georgeanna | Central Park      |
| Wanda      | Van Cortland Park |
| Ann        | Prospect Park     |
| Juanita    | Riverside Park    |
| Georgia    | Prospect Park     |
+------------+-------------------+
7 rows in set (0.00 sec)

Các giá trị trùng lặp trong park - ba lần xuất hiện của Prospect Park và hai lần của Central Park - xuất hiện trong tập kết quả này, ngay cả khi truy vấn bao gồm từ khóa DISTINCT Mặc dù các cột riêng lẻ trong một tập hợp kết quả có thể chứa các giá trị trùng lặp, toàn bộ một hàng phải là một bản sao chính xác của một hàng khác để DISTINCT loại bỏ nó. Trong trường hợp này, mọi giá trị trong name là duy nhất nên DISTINCT không xóa bất kỳ hàng nào khi cột đó được chỉ định trong mệnh đề SELECT

Lọc dữ liệu với WHERE

Có thể đôi khi bạn muốn truy xuất thông tin chi tiết hơn từ các bảng trong cơ sở dữ liệu. Bạn có thể lọc ra các hàng nhất định bằng cách bao gồm WHERE trong truy vấn của bạn sau FROM , như trong:

  • SELECT columns_to_return
  • FROM table_to_query
  • WHERE search_condition;

Theo sau WHERE trong cú pháp ví dụ này là điều kiện tìm kiếm , là điều kiện thực sự xác định hàng nào được lọc ra khỏi tập kết quả. Điều kiện tìm kiếm là một tập hợp một hoặc nhiều vị từ hoặc biểu thức có thể đánh giá một hoặc nhiều biểu thức giá trị. Trong SQL, một biểu thức giá trị - đôi khi còn gọi là biểu thức vô hướng - là bất kỳ biểu thức nào sẽ trả về một giá trị duy nhất. Biểu thức giá trị có thể là giá trị chữ (như chuỗi hoặc giá trị số), biểu thức toán học hoặc tên cột.

Các vị từ trong WHERE có thể có nhiều dạng, nhưng chúng thường tuân theo cú pháp sau:

. . .
WHERE value expression OPERATOR value_expression
. . .

Sau WHERE , bạn cung cấp một biểu thức giá trị theo sau bởi một trong một số toán tử SQL đặc biệt được sử dụng để đánh giá các giá trị của cột so với biểu thức giá trị (hoặc biểu thức giá trị) đứng sau toán tử. Có một số toán tử như vậy có sẵn trong SQL và hướng dẫn này sẽ nêu rõ một số toán tử trong số đó sau trong phần này, nhưng với mục đích minh họa, nó sẽ chỉ tập trung vào một trong những toán tử được sử dụng phổ biến nhất: dấu bằng ( = ). Toán tử này kiểm tra xem hai biểu thức giá trị có tương đương nhau hay không.

Các dự đoán luôn trả về kết quả là “true”, “false” hoặc “không xác định”. Khi chạy các truy vấn SQL có chứa WHERE , DBMS sẽ áp dụng điều kiện tìm kiếm tuần tự cho mọi hàng trong bảng được xác định trong mệnh đề FROM Nó sẽ chỉ trả về các hàng mà mọi vị từ trong điều kiện tìm kiếm đánh giá là “true”.

Để minh họa ý tưởng này, hãy chạy SELECT sau. Truy vấn này trả về các giá trị từ cột name của bảng volunteers Tuy nhiên, thay vì đánh giá các giá trị từ một trong các cột của bảng, WHERE này kiểm tra xem hai biểu thức giá trị - (2 + 2)4 - có tương đương hay không:

  • SELECT name
  • FROM volunteers
  • WHERE (2 + 2) = 4;

Bởi vì (2 + 2) luôn bằng 4 , điều kiện tìm kiếm này đánh giá là "đúng" cho mọi hàng trong bảng. Do đó, mọi name của hàng được trả về trong tập kết quả:

Output
+------------+
| name       |
+------------+
| Gladys     |
| Catherine  |
| Georgeanna |
| Wanda      |
| Ann        |
| Juanita    |
| Georgia    |
+------------+
7 rows in set (0.00 sec)

Bởi vì điều kiện tìm kiếm này luôn trả về kết quả là "true", nên nó không hữu ích lắm. Bạn cũng có thể không bao gồm WHERE , vì SELECT name FROM volunteers; sẽ tạo ra cùng một tập kết quả.

Thay vì so sánh hai giá trị theo nghĩa đen như thế này, thông thường bạn sẽ sử dụng tên cột làm một trong các biểu thức giá trị trong điều kiện tìm kiếm của mệnh đề WHERE Bằng cách đó, bạn đang yêu cầu hệ thống quản lý cơ sở dữ liệu sử dụng giá trị của mỗi hàng từ cột đó như một biểu thức giá trị cho việc lặp lại điều kiện tìm kiếm của hàng đó.

WHERE của truy vấn sau áp dụng điều kiện tìm kiếm độc quyền hơn cho mỗi hàng. Nó sẽ trả về namemax_bags từ bất kỳ hàng nào có giá trị max_bags 4 :

  • SELECT name, max_bags
  • FROM volunteers
  • WHERE max_bags = 4;

max_bags của một tình nguyện viên chính xác bằng 4 , vì vậy truy vấn chỉ trả về bản ghi của tình nguyện viên đó:

Output
+---------+----------+
| name    | max_bags |
+---------+----------+
| Juanita |        4 |
+---------+----------+
1 row in set (0.00 sec)

Bạn cũng có thể đánh giá các giá trị chuỗi ký tự trong các vị từ điều kiện tìm kiếm. Truy vấn sau đây trả về vol_idname của mọi hàng có giá trị name 'Wanda' :

  • SELECT vol_id, name
  • FROM volunteers
  • WHERE name = 'Wanda';

Bởi vì chỉ có một tình nguyện viên tên là Wanda , truy vấn chỉ trả về thông tin từ hàng đó:

Output
+--------+-------+
| vol_id | name  |
+--------+-------+
|      4 | Wanda |
+--------+-------+
1 row in set (0.00 sec)

Để nhắc lại, tất cả các ví dụ của phần này đều sử dụng cùng một toán tử điều kiện tìm kiếm - dấu bằng - để lọc dữ liệu. Tuy nhiên, có một số loại toán tử khác cho phép bạn viết nhiều vị từ khác nhau, cung cấp khả năng kiểm soát cao đối với thông tin mà truy vấn của bạn trả về.

Tiêu chuẩn SQL xác định 18 loại vị từ khác nhau, mặc dù không phải tất cả chúng đều được hỗ trợ trên mọi RDBMS. Dưới đây là năm loại vị từ điều kiện tìm kiếm được sử dụng phổ biến nhất và các toán tử chúng sử dụng:

So sánh : Các vị từ so sánh so sánh một biểu thức giá trị này với một biểu thức giá trị khác; trong các truy vấn, luôn có trường hợp ít nhất một trong những biểu thức giá trị này là tên của một cột. Sáu toán tử so sánh là:

  • = : kiểm tra xem hai giá trị có tương đương nhau không
  • <> : kiểm tra xem hai giá trị có tương đương không
  • < : kiểm tra xem giá trị đầu tiên có nhỏ hơn giá trị thứ hai hay không
  • > : kiểm tra xem giá trị đầu tiên có lớn hơn giá trị thứ hai hay không
  • <= : kiểm tra xem giá trị đầu tiên nhỏ hơn hoặc bằng giá trị thứ hai
  • >= : kiểm tra xem giá trị đầu tiên lớn hơn hoặc bằng giá trị thứ hai

Null : Các dự đoán sử dụng IS NULL kiểm tra xem các giá trị trong một cột nhất định có phải là Null hay không
Phạm vi : Các vị từ phạm vi sử dụng BETWEEN để kiểm tra xem một biểu thức giá trị có nằm giữa hai biểu thức giá trị khác hay không
Thành viên : Loại vị từ này sử dụng IN để kiểm tra xem một giá trị có phải là thành viên của một tập hợp nhất định hay không
Đối sánh mẫu : Các vị từ đối sánh mẫu sử dụng LIKE để kiểm tra xem một giá trị có trùng với mẫu chuỗi có chứa giá trị ký tự đại diện hay không

Nó nằm ngoài phạm vi của hướng dẫn này để đi sâu vào từng loại vị từ này một cách chi tiết hơn. Tuy nhiên, nếu bạn muốn tìm hiểu thêm về chúng, ta khuyến khích bạn xem các hướng dẫn sau:

Để tìm hiểu thêm về WHERE nói chung, vui lòng xem hướng dẫn về Cách sử dụng mệnh đề WHERE trong SQL .

Sắp xếp kết quả truy vấn với ORDER BY

Đôi khi các truy vấn sẽ trả về thông tin theo những cách có thể không trực quan hoặc có thể không phù hợp với nhu cầu cụ thể của bạn. Bạn có thể sắp xếp kết quả truy vấn bằng cách thêm ORDER BY vào cuối câu lệnh truy vấn của bạn.

Đây là cú pháp chung của truy vấn với mệnh đề ORDER BY

  • SELECT columns_to_return
  • FROM table_to_query
  • ORDER BY column_name;

Để minh họa cách hoạt động của điều này, giả sử bạn muốn biết tình nguyện viên nào của bạn có giá trị max_bags Bạn có thể chạy truy vấn sau để trả về name và giá trị max_bags từ bảng volunteers

  • SELECT name, max_bags
  • FROM volunteers;

Tuy nhiên, truy vấn này sắp xếp tập hợp kết quả theo thứ tự mỗi hàng được thêm vào:

Output
+------------+----------+
| name       | max_bags |
+------------+----------+
| Gladys     |        5 |
| Catherine  |        2 |
| Georgeanna |        1 |
| Wanda      |        1 |
| Ann        |        7 |
| Juanita    |        4 |
| Georgia    |        3 |
+------------+----------+
7 rows in set (0.00 sec)

Đối với một tập dữ liệu tương đối nhỏ như thế này, thứ tự của tập kết quả không quá quan trọng và bạn có thể chỉ cần quét max_bags của tập kết quả này để tìm giá trị cao nhất. Tuy nhiên, điều này có thể nhanh chóng trở nên tẻ nhạt khi làm việc với lượng dữ liệu lớn hơn.

Thay vào đó, bạn có thể chạy cùng một truy vấn nhưng thêm ORDER BY sắp xếp tập hợp kết quả dựa trên giá trị max_bags

  • SELECT name, max_bags
  • FROM volunteers
  • ORDER BY max_bags;

Output
+------------+----------+
| name       | max_bags |
+------------+----------+
| Georgeanna |        1 |
| Wanda      |        1 |
| Catherine  |        2 |
| Georgia    |        3 |
| Juanita    |        4 |
| Gladys     |        5 |
| Ann        |        7 |
+------------+----------+
7 rows in set (0.00 sec)

Như kết quả này chỉ ra, hành vi mặc định của các truy vấn SQL bao gồm ORDER BY là sắp xếp các giá trị của cột được chỉ định theo thứ tự tăng dần (tăng dần). Bạn có thể thay đổi hành vi này và sắp xếp chúng theo thứ tự giảm dần bằng cách thêm từ khóa DESC vào mệnh đề ORDER BY

  • SELECT name, max_bags
  • FROM volunteers
  • ORDER BY max_bags DESC;

Output
+------------+----------+
| name       | max_bags |
+------------+----------+
| Ann        |        7 |
| Gladys     |        5 |
| Juanita    |        4 |
| Georgia    |        3 |
| Catherine  |        2 |
| Georgeanna |        1 |
| Wanda      |        1 |
+------------+----------+
7 rows in set (0.00 sec)

Kết luận

Bằng cách đọc hướng dẫn này, bạn đã học cách viết các truy vấn cơ bản, cũng như lọc và sắp xếp các tập kết quả truy vấn. Mặc dù các lệnh hiển thị ở đây sẽ hoạt động trên hầu hết các cơ sở dữ liệu quan hệ, nhưng hãy lưu ý mọi cơ sở dữ liệu SQL sử dụng cách triển khai ngôn ngữ duy nhất của riêng nó. Bạn nên tham khảo tài liệu chính thức của DBMS để có mô tả đầy đủ hơn về từng lệnh và tập hợp đầy đủ các tùy chọn của chúng.

Nếu bạn muốn tìm hiểu thêm về cách làm việc với SQL, ta khuyến khích bạn xem các hướng dẫn khác trong loạt bài này về Cách sử dụng SQL .


Tags:

Các tin trước