一步一步學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;