欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL 查詢的排序、分頁相關(guān)

 更新時間:2020年11月13日 10:59:35   作者:翁智華  
這篇文章主要介紹了MySQL 查詢的排序、分頁相關(guān)的相關(guān)知識,幫助大家更好的理解和使用數(shù)據(jù)庫,感興趣的朋友可以了解下

概述

數(shù)據(jù)庫中的數(shù)據(jù)直接呈現(xiàn)出來一般不是我們想要的,所以我們上兩節(jié)演示了如何對數(shù)據(jù)進行過濾的方法。除了對數(shù)據(jù)進行過濾,

我們可能還需要對數(shù)據(jù)進行排序,比如想從列表中了解消費最高的項,就可能需要對金額字段做降序排序,想看年齡從小到大的分布情況,就可能需要對user表的age字段進行升序排序。

也可能需要對數(shù)據(jù)進行限制,比如我們需要對付款的1~10,11~20,21~30 名的用戶分別贈予不同的禮品,這時候?qū)?shù)據(jù)的限制就很有用了。

備注:下面腳本中[]包含的表示可選,| 分隔符表示可選其一。

數(shù)據(jù)排序 order by

語法格式如下:

1、需要排序的字段跟在order by之后;

2、asc 和 desc表示排序的規(guī)則,asc:升序,desc:降序,默認為升序 asc;

3、排序可以指定多次字段,多字段排序之間用逗號隔開。

4、多字段排序中,越靠前優(yōu)先級越高,下面中cname1優(yōu)先排序,當(dāng)cname1等值的時候,cname2開始排序,直至所有字段都排序完。

select cname from tname order by cname1 [asc|desc],cname2 [asc|desc]...;

單個字段排序

舉個例子,在銷售額中通按照交易的訂單進行金額額度降序的方式顯示:

mysql> select * from t_order;
+---------+---------+---------+-------+
| orderid | account | amount | goods |
+---------+---------+---------+-------+
|    8 | brand  | 52.2  |   2 |
|    9 | hen   | 1752.02 |   7 |
|   10 | helyn  | 88.5  |   4 |
|   11 | sol   | 1007.9 |  11 |
|   12 | diny  | 12   |   1 |
|   13 | weng  | 52.2  |   5 |
|   14 | sally  | 99.71  |   9 |
+---------+---------+---------+-------+
7 rows in set

mysql> select * from t_order order by amount desc;
+---------+---------+---------+-------+
| orderid | account | amount | goods |
+---------+---------+---------+-------+
|    9 | hen   | 1752.02 |   7 |
|   11 | sol   | 1007.9 |  11 |
|   14 | sally  | 99.71  |   9 |
|   10 | helyn  | 88.5  |   4 |
|    8 | brand  | 52.2  |   2 |
|   13 | weng  | 52.2  |   5 |
|   12 | diny  | 12   |   1 |
+---------+---------+---------+-------+
7 rows in set

多個字段排序

多個字段排序用逗號隔開,優(yōu)先級從左到右逐次遞減,如下圖,如果金額一致,則按照購買商品數(shù)量從多到少排序:

mysql> select * from t_order order by amount desc,goods desc;
+---------+---------+---------+-------+
| orderid | account | amount | goods |
+---------+---------+---------+-------+
|    9 | hen   | 1752.02 |   7 |
|   11 | sol   | 1007.9 |  11 |
|   14 | sally  | 99.71  |   9 |
|   10 | helyn  | 88.5  |   4 |
|   13 | weng  | 52.2  |   5 |
|    8 | brand  | 52.2  |   2 |
|   12 | diny  | 12   |   1 |
+---------+---------+---------+-------+
7 rows in set

按alias排序

按照別名排序或者做條件查詢的目的都是為了簡化代碼,方便使用,別名可以是英文,也可以是中文:

mysql> select account as ac,amount as am,goods as gd from t_order order by am,gd desc;

+-------+---------+----+
| ac  | am   | gd |
+-------+---------+----+
| diny | 12   | 1 |
| weng | 52.2  | 5 |
| brand | 52.2  | 2 |
| helyn | 88.5  | 4 |
| sally | 99.71  | 9 |
| sol  | 1007.9 | 11 |
| hen  | 1752.02 | 7 |
+-------+---------+----+
7 rows in set

字段排序中使用函數(shù)

下面使用了abs取絕對值函數(shù),所以在 am字段降序排序中,-99.99 排在 99.71之上。

mysql> select * from t_order;
+---------+---------+---------+-------+
| orderid | account | amount | goods |
+---------+---------+---------+-------+
|    8 | brand  | 52.2  |   2 |
|    9 | hen   | 1752.02 |   7 |
|   10 | helyn  | 88.5  |   4 |
|   11 | sol   | 1007.9 |  11 |
|   12 | diny  | 12   |   1 |
|   13 | weng  | 52.2  |   5 |
|   14 | sally  | 99.71  |   9 |
|   15 | brand1 | -99.99 |   5 |
+---------+---------+---------+-------+
8 rows in set

mysql> select account as ac,amount as am,goods as gd from t_order order by abs(am) desc;

+--------+---------+----+
| ac   | am   | gd |
+--------+---------+----+
| hen  | 1752.02 | 7 |
| sol  | 1007.9 | 11 |
| brand1 | -99.99 | 5 |
| sally | 99.71  | 9 |
| helyn | 88.5  | 4 |
| brand | 52.2  | 2 |
| weng  | 52.2  | 5 |
| diny  | 12   | 1 |
+--------+---------+----+
8 rows in set

與Where條件結(jié)合使用

order 在 where 條件之后,根據(jù)where已經(jīng)過濾好的數(shù)據(jù)再進行排序。下面是過濾出購買金額>80 且 購買數(shù)量>5的數(shù)據(jù),并且按照價格降序排序。

mysql> select * from t_order;
+---------+---------+---------+-------+
| orderid | account | amount | goods |
+---------+---------+---------+-------+
|    8 | brand  | 52.2  |   2 |
|    9 | hen   | 1752.02 |   7 |
|   10 | helyn  | 88.5  |   4 |
|   11 | sol   | 1007.9 |  11 |
|   12 | diny  | 12   |   1 |
|   13 | weng  | 52.2  |   5 |
|   14 | sally  | 99.71  |   9 |
|   15 | brand1 | -99.99 |   5 |
+---------+---------+---------+-------+
8 rows in set

mysql> select * from t_order where amount>80 and goods>5 order by amount desc;
+---------+---------+---------+-------+
| orderid | account | amount | goods |
+---------+---------+---------+-------+
|    9 | hen   | 1752.02 |   7 |
|   11 | sol   | 1007.9 |  11 |
|   14 | sally  | 99.71  |   9 |
+---------+---------+---------+-------+

數(shù)據(jù)limit

很多時候我們過濾出符合要求的數(shù)據(jù)之后,還需要得到這些數(shù)據(jù)中的某一個具體區(qū)間,比如對付款超過1000的用戶的第1~10,11~20,21~30 名分別贈予不同的禮品,這時候就要使用limit操作了。

limit用來限制select查詢返回的數(shù)據(jù),常用于數(shù)據(jù)排行或者分頁等情況。

語法格式如下:

select cname from tname limit [offset,] count;

1、offset表示偏移量,就是指跳過的行數(shù),可以省略不寫,默認為0,表示跳過0行,如 limit 8 等同于 limit 0,8。

2、count:跳過偏移量offset之后開始取的數(shù)據(jù)行數(shù),有count行。

3、limit中offset和count的值不能用表達式。

獲取前n條記錄

如下圖,limit n 和 limit 0,n 是一致的:

mysql> select * from t_order;
+---------+---------+---------+-------+
| orderid | account | amount | goods |
+---------+---------+---------+-------+
|    8 | brand  | 52.2  |   2 |
|    9 | hen   | 1752.02 |   7 |
|   10 | helyn  | 88.5  |   4 |
|   11 | sol   | 1007.9 |  11 |
|   12 | diny  | 12   |   1 |
|   13 | weng  | 52.2  |   5 |
|   14 | sally  | 99.71  |   9 |
|   15 | brand1 | -99.99 |   5 |
+---------+---------+---------+-------+
8 rows in set

mysql> select * from t_order limit 2
;
+---------+---------+---------+-------+
| orderid | account | amount | goods |
+---------+---------+---------+-------+
|    8 | brand  | 52.2  |   2 |
|    9 | hen   | 1752.02 |   7 |
+---------+---------+---------+-------+
2 rows in set

mysql> select * from t_order limit 0,2;
+---------+---------+---------+-------+
| orderid | account | amount | goods |
+---------+---------+---------+-------+
|    8 | brand  | 52.2  |   2 |
|    9 | hen   | 1752.02 |   7 |
+---------+---------+---------+-------+
2 rows in set

limit限制單條記錄

這邊我們獲取支付金額中最大和最小的的一條記錄??梢韵仁褂?order 條件進行排序,然后limit 第1條記錄即可:

 mysql> select * from t_order;
 +---------+---------+---------+-------+
 | orderid | account | amount | goods |
 +---------+---------+---------+-------+
 |    8 | brand  | 52.2  |   2 |
 |    9 | hen   | 1752.02 |   7 |
 |   10 | helyn  | 88.5  |   4 |
 |   11 | sol   | 1007.9 |  11 |
 |   12 | diny  | 12   |   1 |
 |   13 | weng  | 52.2  |   5 |
 |   14 | sally  | 99.71  |   9 |
 |   15 | brand1 | -99.99 |   5 |
 +---------+---------+---------+-------+
 8 rows in set

 mysql> select * from t_order where amount>0 order by amount desc limit 1;
 +---------+---------+---------+-------+
 | orderid | account | amount | goods |
 +---------+---------+---------+-------+
 |    9 | hen   | 1752.02 |   7 |
 +---------+---------+---------+-------+
 1 row in set

 mysql> select * from t_order where amount>0 order by amount asc limit 1;
 +---------+---------+--------+-------+
 | orderid | account | amount | goods |
 +---------+---------+--------+-------+
 |   12 | diny  | 12   |   1 |
 +---------+---------+--------+-------+
 1 row in set

以上就是MySQL 查詢的排序、分頁相關(guān)的詳細內(nèi)容,更多關(guān)于MySQL 查詢的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • mysql如何實現(xiàn)最大連接數(shù)

    mysql如何實現(xiàn)最大連接數(shù)

    云服務(wù)器同時最大連接數(shù),也就是說可以有一千個用戶,那么mysql如何實現(xiàn)最大連接數(shù),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-12-12
  • MySQL生成日期維度表的sql語句

    MySQL生成日期維度表的sql語句

    這篇文章主要介紹了MySQL生成日期維度表的sql語句,通過存儲過程生成,其次是通過遞歸的公用表表達式生成,需要的朋友可以參考下
    2024-07-07
  • 淺談mysql數(shù)據(jù)庫事物隔離級別

    淺談mysql數(shù)據(jù)庫事物隔離級別

    本文主要介紹了淺談mysql數(shù)據(jù)庫事物隔離級別,數(shù)據(jù)庫事務(wù)的隔離級別有4個,這四個級別可以逐個解決臟讀 、不可重復(fù)讀 、幻讀這幾類問題,本文就詳細的介紹一下,感興趣的可以了解一下
    2023-05-05
  • mysql 行轉(zhuǎn)列和列轉(zhuǎn)行實例詳解

    mysql 行轉(zhuǎn)列和列轉(zhuǎn)行實例詳解

    這篇文章主要介紹了mysql 行轉(zhuǎn)列和列轉(zhuǎn)行實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • 有關(guān)SQL模糊查詢

    有關(guān)SQL模糊查詢

    在進行數(shù)據(jù)庫查詢時,有完整查詢和模糊查詢之分,這里簡單介紹下,方便需要的朋友
    2006-12-12
  • 關(guān)于Mysql中文亂碼問題該如何解決(亂碼問題完美解決方案)

    關(guān)于Mysql中文亂碼問題該如何解決(亂碼問題完美解決方案)

    這篇文章給大家介紹關(guān)于Mysql中文亂碼問題該如何解決(亂碼問題完美解決方案)的相關(guān)資料,還給大家收集些關(guān)于MySQL會出現(xiàn)中文亂碼原因常見的幾點,小伙伴快來看看吧
    2015-11-11
  • (MariaDB)MySQL數(shù)據(jù)類型和存儲機制全面講解

    (MariaDB)MySQL數(shù)據(jù)類型和存儲機制全面講解

    下面小編就為大家分享一篇(MariaDB)MySQL數(shù)據(jù)類型和存儲機制全面講解,具有很的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • MySQL檢索數(shù)據(jù)操作方法梳理

    MySQL檢索數(shù)據(jù)操作方法梳理

    SELECT語句是SQL中最常用的語句。它的用途是從一個或多個表中檢索信息。為了使用SELECT檢索表數(shù)據(jù),必須至少給出兩條信息:想選擇什么、從什么地方選擇
    2022-10-10
  • MySQLexplain之ref和rows的使用

    MySQLexplain之ref和rows的使用

    在MySQL中,優(yōu)化器通過分析表之間的引用關(guān)系、使用的索引列、以及估算查詢所需讀取的行數(shù)來優(yōu)化查詢,"ref"關(guān)鍵字顯示被參考的索引列,如果可能,這個值會是一個常數(shù),表示哪些列或常量用于查找索引列上的值,"rows"關(guān)鍵字表示優(yōu)化器根據(jù)表統(tǒng)計信息及索引使用情況
    2024-10-10
  • MySQL百萬級數(shù)據(jù),怎樣做分頁查詢

    MySQL百萬級數(shù)據(jù),怎樣做分頁查詢

    這篇文章主要介紹了MySQL百萬級數(shù)據(jù),怎樣做分頁查詢?今天咱們就來聊聊這個話題,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-10-10

最新評論