數據顯示控制

開放

4.1 限制

如果您希望您的 SQL 查詢返回過多的數據,您可以提前限制最大數量。畢竟,表格可以包含數千甚至數百萬行。

SQL 使得使用LIMIT. 此關鍵字用在 SQL 查詢的最後,如下所示:

LIMIT quantity

讓我們針對產品表編寫一個查詢,其中包含我們商店產品的列表。但是由於我們有一家非常成功的商店並且我們銷售了很多產品,所以我們只想獲得答案的前 10 行。該請求如下所示:

SELECT * FROM product
LIMIT 10

我們得到以下查詢結果:

ID 姓名 品牌 價格 數數
1個 桌子 宜家 20.00 15
2個 椅子 宜家 5.00 45
3個 沙發 宜家 80.00 10
4個 宜家 75.00 10
5個 壁櫥 博世 125.00 15
6個 架子 架子 25.00 114
7 電視 LG 350.00 4個
8個 LG 15.00 100
9 梳妝台 宜家 99.00 10
10 盤子 博世 199.00 10

現在我們將隻請求前 5 行。該請求如下所示:

SELECT * FROM product
LIMIT 5

我們得到如下查詢結果:

ID 姓名 品牌 價格 數數
1個 桌子 宜家 20.00 15
2個 椅子 宜家 5.00 45
3個 沙發 宜家 80.00 10
4個 宜家 75.00 10
5個 壁櫥 博世 125.00 15

4.2 偏移量

上次我們學習瞭如何限制服務器響應中的行數。現在,我們可以獲取前 10 行並將它們顯示給用戶,而不是產品表中的數千行。這是完美的。但是我們如何顯示後 10 行呢?第三個?

如果我們寫LIMIT 20, or LIMIT 30,服務器不會分別返回 20 和 30 行嗎?

對於這種情況,SQL 有一個特殊的關鍵字OFFSET,您可以使用該關鍵字要求服務器在其響應中跳過 N 行。此關鍵字用在 SQL 查詢的最後(在 之後LIMIT),如下所示:

OFFSET quantity

讓我們在產品表上寫一個查詢,並嘗試獲取記錄 11 到 15。換句話說,我們要求服務器返回 5 行給我們,但首先跳過響應的前 10 行。該請求如下所示:

SELECT * FROM product
LIMIT 5
OFFSET 10

我們得到如下查詢結果:

ID 姓名 品牌 價格 數數
十一 扶手椅 博世 44.00 8個
12 花盆 聰明花 99.00 9
13 站立 宜家 100.00 10

服務器只返回了 3 行,這意味著我們的表中總共有 13 行。服務器跳過前 10 個並返回接下來的 5 個。

4.3 選擇不同的

另一個有用的關鍵字是DISTINCT. 當表中有重複記錄並且我們想要刪除重複項時使用它。

我們表中的重複項來自哪裡?表中可能沒有重複項,但作為查詢的結果,很容易。讓我們編寫一個查詢,返回我們銷售的所有產品的品牌。該請求如下所示:

SELECT brand FROM product

我們得到如下查詢結果:

品牌
宜家
宜家
宜家
宜家
博世
博世
LG
LG
宜家
博世
博世
聰明花
宜家

很容易看出這張表中有重複的行。這是為了確保沒有重複,你需要使用關鍵字DISTINCT。更正後的請求如下所示:

SELECT DISTINCT brand
FROM product

我們得到如下查詢結果:

品牌
宜家
博世
LG
聰明花

好多了。是不是?;)

4.4 訂購方式

最後我們要進行排序。要對查詢結果進行排序,您需要使用關鍵字ORDER BY。從技術上講,這是兩個詞,但本質並不重要。兩個字,一個運營商。

它必須寫在關鍵字之後WHERE,但在LIMIT和之前OFFSET。如果你ORDER BY在 之後寫LIMIT,那麼 SQL 服務器將簡單地返回一個錯誤給你。

通常,此運算符如下所示:

ORDER BY column order

其中 column 是表/排序結果中列的名稱。而順序就是排序順序。

排序順序可以是三種類型:

  • ASC(來自升序)- 升序;
  • DESC(來自降序)-降序;
  • 未指定 - 將被使用ASC

讓我們編寫一個查詢,返回按價格升序排列的產品列表。該請求如下所示:

SELECT * FROM product
ORDER BY price ASC
LIMIT 10

我們得到如下查詢結果:

ID 姓名 品牌 價格 數數
2個 椅子 宜家 5.00 45
8個 LG 15.00 100
1個 桌子 宜家 20.00 15
6個 架子 博世 25.00 114
十一 扶手椅 博世 44.00 8個
4個 宜家 75.00 10
3個 沙發 宜家 80.00 10
12 花盆 聰明花 99.00 9
9 梳妝台 宜家 99.00 10
13 站立 宜家 100.00 10

如果我們不指定排序順序,我們將得到相同的結果——我們將跳過單詞ASC

4.5 跨多列的ORDER BY

運算符ORDER BY允許您按多個列對結果進行排序。當第一列有很多重複元素時,這會非常有用。該運算符的一般形式如下:

ORDER BY column 1 order 1, column 2 order 2, column 3 order 3

換句話說,如果按第一列排序後你附近有幾個相同的值,那麼它們按第二列排序,依此類推。

讓我們編寫一個查詢,該查詢將按品牌對我們的產品進行排序,對於具有相同品牌的產品 - 按其編號的降序排列。該請求如下所示:

SELECT * FROM product
ORDER BY brand ASC, count
DESC

我們得到如下查詢結果:

ID 姓名 品牌 價格 數數
6個 架子 博世 25.00 114
5個 壁櫥 博世 125.00 15
10 盤子 博世 199.00 10
十一 扶手椅 博世 44.00 8個
2個 椅子 宜家 5.00 45
1個 桌子 宜家 20.00 15
9 梳妝台 宜家 99.00 10
13 站立 宜家 100.00 10
4個 宜家 75.00 10
3個 沙發 宜家 80.00 10
8個 LG 15.00 100
7 電視 LG 350.00 4個
12 花盆 聰明花 99.00 9

仔細查看表格 - 它的行按品牌名稱排序(字母順序),具有相同品牌名稱的行按產品編號降序排序(最後一列)。

留言
  • 受歡迎
你必須登入才能留言
此頁面尚無留言