MySQL 对查询结果进行排序
MySQL SELECT 語句,ORDER BY 子句主要用來將結果集中的數據按照一定的順序進行排序。
其語法格式為:
ORDER BY {<列名> | <表達式> | <位置>} [ASC|DESC]語法說明如下。
1 列名
指定用于排序的列。可以指定多個列,列名之間用逗號分隔。
2 表達式
指定用于排序的表達式。
3 位置
指定用于排序的列在 SELECT 語句結果集中的位置,通常是一個正整數。
4 ASC|DESC
關鍵字 ASC 表示按升序分組,關鍵字 DESC 表示按降序分組,其中 ASC 為默認值。這兩個關鍵字必須位于對應的列名、表達式、列的位置之后。
使用 ORDER BY 子句應該注意以下幾個方面:
ORDER BY 子句中可以包含子查詢。當排序的值中存在空值時,ORDER BY 子句會將該空值作為最小值來對待。當在 ORDER BY 子句中指定多個列進行排序時,MySQL 會按照列的順序從左到右依次進行排序。查詢的數據并沒有以一種特定的順序顯示,如果沒有對它們進行排序,則將根據插入到數據表中的順序顯示。使用 ORDER BY 子句對指定的列數據進行排序。查詢 tb_students_info 表的 height 字段值,并對其進行排序,輸入的 SQL 語句和執行結果如下所示。
mysql> SELECT * FROM tb_students_info ORDER BY height; +----+--------+---------+------+------+--------+------------+ | id | name | dept_id | age | sex | height | login_date | +----+--------+---------+------+------+--------+------------+ | 2 | Green | 3 | 23 | F | 158 | 2016-10-22 | | 1 | Dany | 1 | 25 | F | 160 | 2015-09-10 | | 4 | Jane | 1 | 22 | F | 162 | 2016-12-20 | | 7 | Lily | 6 | 22 | F | 165 | 2016-02-26 | | 10 | Tom | 4 | 23 | M | 165 | 2016-08-05 | | 8 | Susan | 4 | 23 | F | 170 | 2015-10-01 | | 6 | John | 2 | 21 | M | 172 | 2015-11-11 | | 5 | Jim | 1 | 24 | M | 175 | 2016-01-15 | | 9 | Thomas | 3 | 22 | M | 178 | 2016-06-07 | | 3 | Henry | 2 | 23 | M | 185 | 2015-05-31 | +----+--------+---------+------+------+--------+------------+ 10 rows in set (0.08 sec)該語句通過指定 ORDER BY 子句,MySQL 對查詢的 height 列的數據按數值的大小進行了升序排序。
有時需要根據多列進行排序。對多列數據進行排序要將需要排序的列之間用逗號隔開。
查詢 tb_students_info 表中的 name 和 height 字段,先按 height 排序,再按 name 排序,輸入的 SQL 語句和執行結果如下所示。
mysql> SELECT name,height-> FROM tb_students_info-> ORDER BY height,name; +--------+--------+ | name | height | +--------+--------+ | Green | 158 | | Dany | 160 | | Jane | 162 | | Lily | 165 | | Tom | 165 | | Susan | 170 | | John | 172 | | Jim | 175 | | Thomas | 178 | | Henry | 185 | +--------+--------+ 10 rows in set (0.09 sec)注意:在對多列進行排序時,首行排序的第一列必須有相同的列值,才會對第二列進行排序。如果第一列數據中所有的值都是唯一的,將不再對第二列進行排序。
默認情況下,查詢數據按字母升序進行排序(A~Z),但數據的排序并不僅限于此,還可以使用 ORDER BY 對查詢結果進行降序排序(Z~A),這可以通過關鍵字 DESC 實現。可以對多列進行不同的順序排序。
查詢 tb_students_info 表,先按 height 降序排序,再按 name 升序排序,輸入的 SQL 語句和執行過程如下所示。
mysql> SELECT name,height FROM tb_student_info ORDER BY height DESC,name ASC; +--------+--------+ | name | height | +--------+--------+ | Henry | 185 | | Thomas | 178 | | Jim | 175 | | John | 172 | | Susan | 170 | | Lily | 165 | | Tom | 165 | | Jane | 162 | | Dany | 160 | | Green | 158 | +--------+--------+ 10 rows in set (0.00 sec)注意:DESC 關鍵字只對前面的列進行降序排列,在這里只對 height 排序,而并沒有對 name 進行排序,因此,height 按降序排序,而 name 仍按升序排序,如果要對多列進行降序排序,必須要在每一列的后面加 DESC 關鍵字。
總結
以上是生活随笔為你收集整理的MySQL 对查询结果进行排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL 创建触发器
- 下一篇: Spring基于Annotation装配