在 MySQL 中對多列使用 ORDER BY 子句

Mehvish Ashiq 2023年1月30日
  1. MySQL 中的 ORDER BY 子句
  2. 在 MySQL 中對多列使用 ORDER BY 子句
在 MySQL 中對多列使用 ORDER BY 子句

今天,我們將瞭解在 MySQL 中使用多列的 ORDER BY 子句。

MySQL 中的 ORDER BY 子句

每當我們使用 SELECT 語句從表中檢索資料時,輸出中記錄(行)的順序是未指定的。要對其進行排序,我們可以將 ORDER BY 子句與 SELECT 語句結合使用。

使用 ORDER BY 子句,我們可以使用 ASC(升序)和 DESC(降序)選項對從一列或多列檢索的資料進行升序或降序排序。

如果我們不指定選項(ASCDESC),ORDER BY 子句使用預設選項 ASC 按升序對資料進行排序。因此,我們使用以下查詢得到相同的結果,因為兩者是等價的。

#following both queries are equivalent
SELECT selectlist FROM tablename ORDER BY column1;
SELECT selectlist FROM tablename ORDER BY column1 ASC;

我們在 ORDER BY 子句之後只寫一列,以使用一列對資料進行排序。否則,寫入多個以逗號分隔的列。

請參閱以下程式碼行。

#sort data in ascending order by using one column
SELECT selectlist FROM tablename ORDER BY column1 ASC;

#sort data in descending order by using multiple columns
SELECT selectlist FROM tablename ORDER BY column1 DESC, column2 DESC;

在 MySQL 中對多列使用 ORDER BY 子句

要學習 ORDER BY 子句的使用,我們必須有一個表。出於這個原因,我們在 db_ms20 資料庫中建立了一個名為 tb_students 的表,其中 tb 是表的字首,db 是資料庫的字首。

這不是強制性的,而是一種很好的方法來區分具有確切名稱的表和資料庫。

示例程式碼(建立和填充表 tb_students):

#create a database
CREATE SCHEMA `db_ms20` ;

#create a table
CREATE TABLE `db_ms20`.`tb_students` (
    `ID` INT NOT NULL AUTO_INCREMENT,
    `FIRSTNAME` VARCHAR(45) NOT NULL,
    `LASTNAME` VARCHAR(45) NOT NULL,
    PRIMARY KEY (`ID`));

#insert data into a table
INSERT INTO db_ms20.tb_students (FIRSTNAME, LASTNAME) VALUES
('Thomas', 'Christoper'),
('Thomas', 'Jorge'),
('Mehvish', 'Ashiq'),
('Johny', 'James'),
('Daniel', 'Glass'),
('Debbra', 'Herring'),
('Daniel', 'Costner');

#select all data from the table
SELECT * FROM db_ms20.tb_students;

輸出(tb_students 表的資料):

| ID   | FIRSTNAME | LASTNAME   |
| ---- | --------- | ---------- |
| 1    | Thomas    | Christoper |
| 2    | Thomas    | Jorge      |
| 3    | Mehvish   | Ashiq      |
| 4    | Johny     | James      |
| 5    | Daniel    | Glass      |
| 6    | Debbra    | Herring    |
| 7    | Daniel    | Costner    |

讓我們使用帶有 ASCDESC 選項的 ORDER BY 子句將結果集按升序或降序排序。

示例程式碼:

SELECT * FROM db_ms20.tb_students ORDER BY FIRSTNAME, LASTNAME;

# we can use the following query as an alternative
# for getting the same output
SELECT * FROM db_ms20.tb_students ORDER BY FIRSTNAME ASC, LASTNAME ASC;

輸出:

在 mysql 中使用帶有多列的 order by 子句 - 輸出一

ORDER BY 子句使用 FIRSTNAME 列按升序對資料進行排序。此外,它使用 LASTNAME 列按升序對已排序的資料進行排序。

值得注意的一點是如何使用多列對資料進行排序。

資料將分兩步排序,我們使用兩列對資料進行排序。

  1. 結果集使用 FIRSTNAME 列按升序排序。
  2. 如果 FIRSTNAME 列中的兩個或多個值相同,則 LASTNAME 將按這些記錄的升序排序。請參閱上述輸出中的紅色框。

類似地,我們可以通過在每一列中用 DESC 選項替換 ASC 來按降序對資料進行排序。下面是另一個示例,我們需要按降序對 FIRSTNAME 列和按升序對 LASTNAME 列進行排序。

示例程式碼:

SELECT * FROM db_ms20.tb_students ORDER BY FIRSTNAME DESC, LASTNAME ASC;

輸出:

在 mysql 中使用帶有多列的 order by 子句 - 輸出二

在這裡,ORDER BY 將按如下方式對資料進行排序:

  1. 首先,資料將使用 FIRSTNAME 列按降序排序。

  2. 其次,已經排序的資料將使用 LASTNAME 列按升序排序,而不更改 FIRSTNAME 列中的值順序。這意味著如果 FIRSTNAME 列中的兩個或多個值相同,LASTNAME 將按升序排序。

    請參閱紅色矩形以瞭解。

請記住,如果你的資料集中有 NULL 值,那麼 NULLS FIRST(將 non-NULL 值放在 NULL 值之後)和 NULLS LAST(將 NULL 值放在 non-NULL 值)選項可按如下方式使用:

SELECT selectlist FROM tablename
ORDER BY
column1 [ASC | DESC] [NULLS FIRST | NULLS LAST],
column2 [ASC | DESC] [NULLS FIRST | NULLS LAST];
作者: Mehvish Ashiq
Mehvish Ashiq avatar Mehvish Ashiq avatar

Mehvish Ashiq is a former Java Programmer and a Data Science enthusiast who leverages her expertise to help others to learn and grow by creating interesting, useful, and reader-friendly content in Computer Programming, Data Science, and Technology.

LinkedIn GitHub Facebook

相關文章 - MySQL Column