SQL (二)排序檢索出來的數據(select語句的order by子句)


之前只用select語句檢索一列,但是沒排序
在這裏插入圖片描述

order by子句

在這裏插入圖片描述
在這裏插入圖片描述

對一列排序

按照產品名字排序(字符串排序,根據ascii碼)

select prod_name 
from products
order by prod_name;

在這裏插入圖片描述

也可以不用被選列的名字作爲order by子句的列,即不根據被顯示列本身來排序:

根據價格對產品排序

select prod_name 
from products
order by prod_price;

在這裏插入圖片描述

對多個列按照多個標準排序

select prod_id, prod_price, prod_name
from products
order by prod_price, prod_name;

選擇了三列數據,先用價格排序,價格相同的再根據名稱排序。如果所有行的價格都不一樣,則不會用到名稱排序。
在這裏插入圖片描述
這裏還有一種簡單的寫法:

select prod_id, prod_price, prod_name
from products
order by 2, 3;

order by2, 3表示先按顯示的第2列排序,再按照第三列排序,即先按照價格排序再按照名稱排序,因此和上面的代碼的效果一樣。

這樣做的好處是:不用輸入列名
壞處是:

  • 容易出錯,列位置給錯了,列很多的時候容易給錯,其次如果清單更改了,列位置可能就不一樣了
  • 如果排序規則列不在select清單中,就根本沒法用這個方法。

綜上,還是老實寫列名吧,保險。

指定排序方向(升序 or 降序,DESC關鍵字)

默認都是升序
在這裏插入圖片描述

select prod_id, prod_price, prod_name
from products
order by prod_price desc;

在這裏插入圖片描述

如果用多個列排序:

select prod_id, prod_price, prod_name
from products
order by prod_price desc, prod_name;

可以看到價格相同的產品按照產品名稱升序排序,說明DESC關鍵字只作用於它前面的列名。(和distinct不同,distinct作用於後面的所有列名)
在這裏插入圖片描述
在這裏插入圖片描述

即上面代碼和下面的等價:

select prod_id, prod_price, prod_name
from products
order by prod_price desc, prod_name asc;

asc升序指定不指定都行,因爲是默認的
在這裏插入圖片描述

總結

  • order by子句必須是select語句的最後一條子句。
  • 可以用多個列來排序

關鍵字

  • desc
  • asc
  • order by
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章