天天看點

如何對查詢結果進行排序

1. 單列排序

我們先來看下不排序的結果:

SELECT prod_name FROM products;      

運作結果如下:

如何對查詢結果進行排序

接下來我們對 prod_name 列進行排序。排序使用 ORDER BY 關鍵字,後面跟着要排序的列。例如:

SELECT prod_name FROM products ORDER BY prod_name;      

運作結果如下:

如何對查詢結果進行排序

可以看到結果按照升序進行了排序。

當我們不明确指定排序的順序時,MySQL 預設按照升序排序。效果和我們明确指定升序是一樣的,如果要明确指定按照升序排序,我們隻要在需要排序的字段後面指定 ASC。例如:

SELECT prod_name FROM products ORDER BY prod_name ASC;      

運作結果如下:

如何對查詢結果進行排序

可以看到結果和不明确指定排序順序是一樣的。

和升序相對應的,我們可以進行降序排序。文法和升序一樣,隻不過 ASC 改成 DESC。例如:

SELECT prod_name FROM products ORDER BY prod_name DESC;      

運作結果如下:

如何對查詢結果進行排序

我們可以看到,結果是降序排序的。

2. 多列排序

除了可以對單列進行排序,我們還可以對多列進行排序,例如:

SELECT prod_price, prod_name FROM products ORDER BY prod_price, prod_name;      

運作結果如下:

如何對查詢結果進行排序

像單列排序一樣,我們同樣可以明确指定排序順序,例如:

SELECT prod_price, prod_name FROM products ORDER BY prod_price DESC, prod_name;      

運作結果如下:

如何對查詢結果進行排序

我們可以看到,結果按照 prod_price 進行了降序排序,但是當 prod_price 相等時,prod_name 還是按照升序進行排序,這說明 DESC 關鍵字隻對位于其前面的列名起作用,

如果想在多個列上進行降序排序,必須對每一列指定DESC關鍵字。例如:

SELECT prod_price, prod_name FROM products ORDER BY prod_price DESC, prod_name DESC;      

運作結果如下:

如何對查詢結果進行排序

我們可以看到,當 prod_price 相等時,prod_name 同樣按照降序進行了排序。

剛才講的排序,ORDER BY 後面跟的列都是我們要查詢的列,實際上,用非查詢的列排序資料也是可以的。例如:

SELECT prod_name FROM products ORDER BY prod_price;      

運作結果如下:

如何對查詢結果進行排序

ORDER BY 後面除了跟列名之外,我們還可以使用查詢列的相對位置。

SELECT prod_id, prod_price, prod_name FROM products ORDER BY 2, 3;      

運作結果如下:

如何對查詢結果進行排序

這種排序方式的優點是:不用重複輸入列名。缺點是:1.有可能用錯誤的列進行排序,特别是在檢索列改變後,忘記對order by子句做相應的改動。2.如果要進行排序的列不在檢索的列中,就不能使用相對位置。

下列哪一個關鍵字的作用是排序?

A. ORDER BY

B. ASC

C. DESC

D. SELECT

下列哪一個關鍵字的作用是降序排序?

A. ORDER BY