1. 程式人生 > >一步一步學MySQL----10 排序和限制資料記錄查詢

一步一步學MySQL----10 排序和限制資料記錄查詢

MySQL中排序資料查詢結果通過SQL語句order by關鍵字來實現。

語法:

select field1 field2 …… fieldn from table_name where condition order by fieldm1 [asc|desc], [fieldm2 [asc|desc],]

說明:
(1) 引數asc表示升序排列,desc表示降序排列;
(2) 關鍵字order by後面可以設定多個不同的欄位進行排序。

  • 按照單欄位排序
  • 按照多欄位排序

限制資料記錄查詢時因為當條件查詢時,有時所查詢到的資料記錄太多,如果全部顯示出來則不符合實際需求,此時就可以通過限制查詢結果的資料記錄的數量來控制。

限制資料記錄查詢的數量通過關鍵字limit來實現。

語法:

select field1 field2 …… fieldn from table_name where condition limit offset_start, row_count;

根據是否制定初始位置(起始偏移量) ,關於限制資料查詢結果數量語句可以分為如下兩類:

  • 不指定初始位置方式
  • 指定初始位置方式

10.1 按照單欄位排序

(1)升序排序

例如:查詢員工薪水,並按升序排列

mysql> select * from employee order by

salary asc;

這裡寫圖片描述

(2)降序排序
例如:查詢員工薪水,並按降序排列

mysql> select * from employee order by salary desc;

這裡寫圖片描述

10.2 按照多欄位排序

例如:查詢員工薪水升序排列),入職日期降序排列

mysql> select * from employee order by salary asc, Hiredate desc;

說明:

查詢結果都是先按照欄位salary的值從小到大進行排序,當遇到值相同的資料記錄時,則按照欄位Hiredate的值進行從大到小排序。
這裡寫圖片描述

10.3 不指定初始位置

說明:如果不指定初始位置,預設值為0,即表示從第一條記錄開始顯示。

(1)顯示記錄數小於查詢結果

首先我們在原先的員工資料表中薪水欄位後面增加一個欄位bonus(獎金),如下:

mysql> alter table employee add bonus int after salary;

Query OK, 8 rows affected (0.18 sec)
Records: 8 Duplicates: 0 Warnings: 0

這裡寫圖片描述

然後,我們查詢欄位bonus值為null的資料記錄,並且只顯示兩條查詢結果:

mysql> select * from employee where bonus is null limit 2;

這裡寫圖片描述

(2)顯示記錄數大於查詢結果

從上面的表中,我們可以看到,符合bonus的值為null的資料記錄有8條,如果我們設定關鍵字row_count引數大於8時,會出現什麼效果?

mysql> select * from employee where bonus is null limit 10;

這裡寫圖片描述

從查詢結果來看,雖然要求顯示的查詢結果數量是10,但是查詢結果總數才8,所以此時如果要求顯示記錄數大於查詢結果時,只會顯示所有查詢結果。

10.4 指定初始位置

例如:查詢欄位bonus為空的員工(從第2條記錄開始的6條記錄),然後對排序結果根據入職時間(Hiredate)從早到晚排序進行顯示。

mysql> select * from employee where bonus is null order by Hiredate limit 1, 6;

這裡寫圖片描述