玩轉Mysql系列 - 第7篇:詳解排序和分頁(order by & limit),及存在的坑

2021-03-02 路人甲Java

打算提升sql技能的,可以加我微信itsoku,帶你成為sql高手。

這是Mysql系列第7篇。

環境:mysql5.7.25,cmd命令中進行演示。

代碼中被[]包含的表示可選,|符號分開的表示可選其一。

本章內容

詳解排序查詢

詳解limit

limit存在的坑

分頁查詢中的坑

排序查詢(order by)

電商中:我們想查看今天所有成交的訂單,按照交易額從高到低排序,此時我們可以使用資料庫中的排序功能來完成。

排序語法:

select 欄位名 from 表名 order by 欄位1 [asc|desc],欄位2 [asc|desc];

需要排序的欄位跟在order by之後;

asc|desc表示排序的規則,asc:升序,desc:降序,默認為asc;

支持多個欄位進行排序,多欄位排序之間用逗號隔開。

單欄位排序

mysql> create table test2(a int,b varchar(10));
Query OK, 0 rows affected (0.01 sec)

mysql> insert into test2 values (10,'jack'),(8,'tom'),(5,'ready'),(100,'javacode');
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select * from test2;
+-++
| a    | b        |
+-++
|   10 | jack     |
|    8 | tom      |
|    5 | ready    |
|  100 | javacode |
+-++
4 rows in set (0.00 sec)

mysql> select * from test2 order by a asc;
+-++
| a    | b        |
+-++
|    5 | ready    |
|    8 | tom      |
|   10 | jack     |
|  100 | javacode |
+-++
4 rows in set (0.00 sec)

mysql> select * from test2 order by a desc;
+-++
| a    | b        |
+-++
|  100 | javacode |
|   10 | jack     |
|    8 | tom      |
|    5 | ready    |
+-++
4 rows in set (0.00 sec)

mysql> select * from test2 order by a;
+-++
| a    | b        |
+-++
|    5 | ready    |
|    8 | tom      |
|   10 | jack     |
|  100 | javacode |
+-++
4 rows in set (0.00 sec)

多欄位排序

比如學生表,先按學生年齡降序,年齡相同時,再按學號升序,如下:

mysql> create table stu(id int not null comment '學號' primary key,age tinyint not null comment '年齡',name varchar(16) comment '姓名');
Query OK, 0 rows affected (0.01 sec)

mysql> insert into stu (id,age,name) values (1001,18,'路人甲Java'),(1005,20,'劉德華'),(1003,18,'張學友'),(1004,20,'張國榮'),(1010,19,'梁朝偉');
Query OK, 5 rows affected (0.00 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql> select * from stu;
+-+++
| id   | age | name          |
+-+++
| 1001 |  18 | 路人甲Java    |
| 1003 |  18 | 張學友        |
| 1004 |  20 | 張國榮        |
| 1005 |  20 | 劉德華        |
| 1010 |  19 | 梁朝偉        |
+-+++
5 rows in set (0.00 sec)

mysql> select * from stu order by age desc,id asc;
+-+++
| id   | age | name          |
+-+++
| 1004 |  20 | 張國榮        |
| 1005 |  20 | 劉德華        |
| 1010 |  19 | 梁朝偉        |
| 1001 |  18 | 路人甲Java    |
| 1003 |  18 | 張學友        |
+-+++
5 rows in set (0.00 sec)

按別名排序

mysql> select * from stu;
+-+++
| id   | age | name          |
+-+++
| 1001 |  18 | 路人甲Java    |
| 1003 |  18 | 張學友        |
| 1004 |  20 | 張國榮        |
| 1005 |  20 | 劉德華        |
| 1010 |  19 | 梁朝偉        |
+-+++
5 rows in set (0.00 sec)

mysql> select age '年齡',id as '學號' from stu order by 年齡 asc,學號 desc;
+---+---+
| 年齡   | 學號   |
+---+---+
|     18 |   1003 |
|     18 |   1001 |
|     19 |   1010 |
|     20 |   1005 |
|     20 |   1004 |
+---+---+

按函數排序

有學生表(id:編號,birth:出生日期,name:姓名),如下:

mysql> drop table if exists student;
Query OK, 0 rows affected (0.01 sec)

mysql> CREATE TABLE student (
    ->   id int(11) NOT NULL COMMENT '學號',
    ->   birth date NOT NULL COMMENT '出生日期',
    ->   name varchar(16) DEFAULT NULL COMMENT '姓名',
    ->   PRIMARY KEY (id)
    -> );
Query OK, 0 rows affected (0.01 sec)

mysql> insert into student (id,birth,name) values (1001,'1990-10-10','路人甲Java'),(1005,'1960-03-01','劉德華'),(1003,'1960-08-16','張學友'),(1004,'1968-07-01','張國榮'),(1010,'1962-05-16','梁朝偉');
Query OK, 5 rows affected (0.00 sec)
Records: 5  Duplicates: 0  Warnings: 0

mysql>
mysql> SELECT * FROM student;
+-+--++
| id   | birth      | name          |
+-+--++
| 1001 | 1990-10-10 | 路人甲Java    |
| 1003 | 1960-08-16 | 張學友        |
| 1004 | 1968-07-01 | 張國榮        |
| 1005 | 1960-03-01 | 劉德華        |
| 1010 | 1962-05-16 | 梁朝偉        |
+-+--++
5 rows in set (0.00 sec)

需求:按照出生年份升序、編號升序,查詢出編號、出生日期、出生年份、姓名,2種寫法如下:

mysql> SELECT id 編號,birth 出生日期,year(birth) 出生年份,name 姓名 from student ORDER BY year(birth) asc,id asc;
+---+----+----++
| 編號   | 出生日期     | 出生年份     | 姓名          |
+---+----+----++
|   1003 | 1960-08-16   |         1960 | 張學友        |
|   1005 | 1960-03-01   |         1960 | 劉德華        |
|   1010 | 1962-05-16   |         1962 | 梁朝偉        |
|   1004 | 1968-07-01   |         1968 | 張國榮        |
|   1001 | 1990-10-10   |         1990 | 路人甲Java    |
+---+----+----++
5 rows in set (0.00 sec)

mysql> SELECT id 編號,birth 出生日期,year(birth) 出生年份,name 姓名 from student ORDER BY 出生年份 asc,id asc;
+---+----+----++
| 編號   | 出生日期     | 出生年份     | 姓名          |
+---+----+----++
|   1003 | 1960-08-16   |         1960 | 張學友        |
|   1005 | 1960-03-01   |         1960 | 劉德華        |
|   1010 | 1962-05-16   |         1962 | 梁朝偉        |
|   1004 | 1968-07-01   |         1968 | 張國榮        |
|   1001 | 1990-10-10   |         1990 | 路人甲Java    |
+---+----+----++
5 rows in set (0.00 sec)

說明:

year函數:屬於日期函數,可以獲取對應日期中的年份。

上面使用了2種方式排序,第一種是在order by中使用了函數,第二種是使用了別名排序。

where之後進行排序

有訂單數據如下:

mysql> drop table if exists t_order;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> create table t_order(
    ->   id int not null auto_increment comment '訂單編號',
    ->   price decimal(10,2) not null default 0 comment '訂單金額',
    ->   primary key(id)
    -> )comment '訂單表';
Query OK, 0 rows affected (0.01 sec)

mysql> insert into t_order (price) values (88.95),(100.68),(500),(300),(20.88),(200.5);
Query OK, 6 rows affected (0.00 sec)
Records: 6  Duplicates: 0  Warnings: 0

mysql> select * from t_order;
+----+---+
| id | price  |
+----+---+
|  1 |  88.95 |
|  2 | 100.68 |
|  3 | 500.00 |
|  4 | 300.00 |
|  5 |  20.88 |
|  6 | 200.50 |
+----+---+
6 rows in set (0.00 sec)

需求:查詢訂單金額>=100的,按照訂單金額降序排序,顯示2列數據,列頭:訂單編號、訂單金額,如下:

mysql> select a.id 訂單編號,a.price 訂單金額 from t_order a where a.price>=100 order by a.price desc;
+----+----+
| 訂單編號     | 訂單金額     |
+----+----+
|            3 |       500.00 |
|            4 |       300.00 |
|            6 |       200.50 |
|            2 |       100.68 |
+----+----+
4 rows in set (0.00 sec)

limit介紹

limit用來限制select查詢返回的行數,常用於分頁等操作。

語法:

select 列 from 表 limit [offset,] count;

說明:

offset:表示偏移量,通俗點講就是跳過多少行,offset可以省略,默認為0,表示跳過0行;範圍:[0,+∞)。

count:跳過offset行之後開始取數據,取count行記錄;範圍:[0,+∞)。

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

下面我們列一些常用的示例來加深理解。

獲取前n行記錄

select 列 from 表 limit 0,n;
或者
select 列 from 表 limit n;

示例,獲取訂單的前2條記錄,如下:

mysql> create table t_order(
    ->   id int not null auto_increment comment '訂單編號',
    ->   price decimal(10,2) not null default 0 comment '訂單金額',
    ->   primary key(id)
    -> )comment '訂單表';
Query OK, 0 rows affected (0.01 sec)

mysql> insert into t_order (price) values (88.95),(100.68),(500),(300),(20.88),(200.5);
Query OK, 6 rows affected (0.01 sec)
Records: 6  Duplicates: 0  Warnings: 0

mysql> select * from t_order;
+----+---+
| id | price  |
+----+---+
|  1 |  88.95 |
|  2 | 100.68 |
|  3 | 500.00 |
|  4 | 300.00 |
|  5 |  20.88 |
|  6 | 200.50 |
+----+---+
6 rows in set (0.00 sec)

mysql> select a.id 訂單編號,a.price 訂單金額 from t_order a limit 2;
+----+----+
| 訂單編號     | 訂單金額     |
+----+----+
|            1 |        88.95 |
|            2 |       100.68 |
+----+----+
2 rows in set (0.00 sec)

mysql> select a.id 訂單編號,a.price 訂單金額 from t_order a limit 0,2;
+----+----+
| 訂單編號     | 訂單金額     |
+----+----+
|            1 |        88.95 |
|            2 |       100.68 |
+----+----+
2 rows in set (0.00 sec)

獲取最大的一條記錄

我們需要獲取訂單金額最大的一條記錄,可以這麼做:先按照金額降序,然後取第一條記錄,如下:

mysql> select a.id 訂單編號,a.price 訂單金額 from t_order a order by a.price desc;
+----+----+
| 訂單編號     | 訂單金額     |
+----+----+
|            3 |       500.00 |
|            4 |       300.00 |
|            6 |       200.50 |
|            2 |       100.68 |
|            1 |        88.95 |
|            5 |        20.88 |
+----+----+
6 rows in set (0.00 sec)

mysql> select a.id 訂單編號,a.price 訂單金額 from t_order a order by a.price desc limit 1;
+----+----+
| 訂單編號     | 訂單金額     |
+----+----+
|            3 |       500.00 |
+----+----+
1 row in set (0.00 sec)

mysql> select a.id 訂單編號,a.price 訂單金額 from t_order a order by a.price desc limit 0,1;
+----+----+
| 訂單編號     | 訂單金額     |
+----+----+
|            3 |       500.00 |
+----+----+
1 row in set (0.00 sec)

獲取排名第n到m的記錄

我們需要先跳過n-1條記錄,然後取m-n+1條記錄,如下:

select 列 from 表 limit n-1,m-n+1;

如:我們想獲取訂單金額最高的3到5名的記錄,我們需要跳過2條,然後獲取3條記錄,如下:

mysql> select a.id 訂單編號,a.price 訂單金額 from t_order a order by a.price desc;
+----+----+
| 訂單編號     | 訂單金額     |
+----+----+
|            3 |       500.00 |
|            4 |       300.00 |
|            6 |       200.50 |
|            2 |       100.68 |
|            1 |        88.95 |
|            5 |        20.88 |
+----+----+
6 rows in set (0.00 sec)

mysql> select a.id 訂單編號,a.price 訂單金額 from t_order a order by a.price desc limit 2,3;
+----+----+
| 訂單編號     | 訂單金額     |
+----+----+
|            6 |       200.50 |
|            2 |       100.68 |
|            1 |        88.95 |
+----+----+
3 rows in set (0.00 sec)

分頁查詢

開發過程中,分頁我們經常使用,分頁一般有2個參數:

page:表示第幾頁,從1開始,範圍[1,+∞)

pageSize:每頁顯示多少條記錄,範圍[1,+∞)

如:page = 2,pageSize = 10,表示獲取第2頁10條數據。

我們使用limit實現分頁,語法如下:

select 列 from 表名 limit (page - 1) * pageSize,pageSize;

需求:我們按照訂單金額降序,每頁顯示2條,依次獲取所有訂單數據、第1頁、第2頁、第3頁數據,如下:

mysql> select a.id 訂單編號,a.price 訂單金額 from t_order a order by a.price desc;
+----+----+
| 訂單編號     | 訂單金額     |
+----+----+
|            3 |       500.00 |
|            4 |       300.00 |
|            6 |       200.50 |
|            2 |       100.68 |
|            1 |        88.95 |
|            5 |        20.88 |
+----+----+
6 rows in set (0.00 sec)

mysql> select a.id 訂單編號,a.price 訂單金額 from t_order a order by a.price desc limit 0,2;
+----+----+
| 訂單編號     | 訂單金額     |
+----+----+
|            3 |       500.00 |
|            4 |       300.00 |
+----+----+
2 rows in set (0.00 sec)

mysql> select a.id 訂單編號,a.price 訂單金額 from t_order a order by a.price desc limit 2,2;
+----+----+
| 訂單編號     | 訂單金額     |
+----+----+
|            6 |       200.50 |
|            2 |       100.68 |
+----+----+
2 rows in set (0.00 sec)

mysql> select a.id 訂單編號,a.price 訂單金額 from t_order a order by a.price desc limit 4,2;
+----+----+
| 訂單編號     | 訂單金額     |
+----+----+
|            1 |        88.95 |
|            5 |        20.88 |
+----+----+
2 rows in set (0.00 sec)

避免踩坑 limit中不能使用表達式

mysql> select * from t_order where limit 1,4+1;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'limit 1,4+1' at line 1
mysql> select * from t_order where limit 1+0;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'limit 1+0' at line 1
mysql>

結論:limit後面只能夠跟明確的數字。

limit後面的2個數字不能為負數

mysql> select * from t_order where limit -1;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 
mysql> select * from t_order where limit 0,-1;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 
mysql> select * from t_order where limit -1,-1;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 

排序分頁存在的坑

準備數據:

mysql> insert into test1 (b) values (1),(2),(3),(4),(2),(2),(2),(2);
Query OK, 8 rows affected (0.01 sec)
Records: 8  Duplicates: 0  Warnings: 0

mysql> select * from test1;
+---+---+
| a | b |
+---+---+
| 1 | 1 |
| 2 | 2 |
| 3 | 3 |
| 4 | 4 |
| 5 | 2 |
| 6 | 2 |
| 7 | 2 |
| 8 | 2 |
+---+---+
8 rows in set (0.00 sec)

mysql> select * from test1 order by b asc;
+---+---+
| a | b |
+---+---+
| 1 | 1 |
| 2 | 2 |
| 5 | 2 |
| 6 | 2 |
| 7 | 2 |
| 8 | 2 |
| 3 | 3 |
| 4 | 4 |
+---+---+
8 rows in set (0.00 sec)

下面我們按照b升序,每頁2條數據,來獲取數據。

下面的sql依次為第1頁、第2頁、第3頁、第4頁、第5頁的數據,如下:

mysql> select * from test1 order by b asc limit 0,2;
+---+---+
| a | b |
+---+---+
| 1 | 1 |
| 2 | 2 |
+---+---+
2 rows in set (0.00 sec)

mysql> select * from test1 order by b asc limit 2,2;
+---+---+
| a | b |
+---+---+
| 8 | 2 |
| 6 | 2 |
+---+---+
2 rows in set (0.00 sec)

mysql> select * from test1 order by b asc limit 4,2;
+---+---+
| a | b |
+---+---+
| 6 | 2 |
| 7 | 2 |
+---+---+
2 rows in set (0.00 sec)

mysql> select * from test1 order by b asc limit 6,2;
+---+---+
| a | b |
+---+---+
| 3 | 3 |
| 4 | 4 |
+---+---+
2 rows in set (0.00 sec)

mysql> select * from test1 order by b asc limit 7,2;
+---+---+
| a | b |
+---+---+
| 4 | 4 |
+---+---+
1 row in set (0.00 sec)

上面有2個問題:

問題1:看一下第2個sql和第3個sql,分別是第2頁和第3頁的數據,結果出現了相同的數據,是不是懵逼了。

問題2:整個表只有8條記錄,怎麼會出現第5頁的數據呢,又懵逼了。

我們來分析一下上面的原因:主要是b欄位存在相同的值,當排序過程中存在相同的值時,沒有其他排序規則時,mysql懵逼了,不知道怎麼排序了。

就像我們上學站隊一樣,按照身高排序,那身高一樣的時候如何排序呢?身高一樣的就亂排了。

建議:排序中存在相同的值時,需要再指定一個排序規則,通過這種排序規則不存在二義性,比如上面可以再加上a降序,如下:

mysql> select * from test1 order by b asc,a desc;
+---+---+
| a | b |
+---+---+
| 1 | 1 |
| 8 | 2 |
| 7 | 2 |
| 6 | 2 |
| 5 | 2 |
| 2 | 2 |
| 3 | 3 |
| 4 | 4 |
+---+---+
8 rows in set (0.00 sec)

mysql> select * from test1 order by b asc,a desc limit 0,2;
+---+---+
| a | b |
+---+---+
| 1 | 1 |
| 8 | 2 |
+---+---+
2 rows in set (0.00 sec)

mysql> select * from test1 order by b asc,a desc limit 2,2;
+---+---+
| a | b |
+---+---+
| 7 | 2 |
| 6 | 2 |
+---+---+
2 rows in set (0.00 sec)

mysql> select * from test1 order by b asc,a desc limit 4,2;
+---+---+
| a | b |
+---+---+
| 5 | 2 |
| 2 | 2 |
+---+---+
2 rows in set (0.00 sec)

mysql> select * from test1 order by b asc,a desc limit 6,2;
+---+---+
| a | b |
+---+---+
| 3 | 3 |
| 4 | 4 |
+---+---+
2 rows in set (0.00 sec)

mysql> select * from test1 order by b asc,a desc limit 8,2;
Empty set (0.00 sec)

看上面的結果,分頁數據都正常了,第5頁也沒有數據了。

總結

order by … [asc|desc]用於對查詢結果排序,asc:升序,desc:降序,asc|desc可以省略,默認為asc

limit用來限制查詢結果返回的行數,有2個參數(offset,count),offset:表示跳過多少行,count:表示跳過offset行之後取count行

limit中offset可以省略,默認值為0

limit中offset 和 count都必須大於等於0

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

分頁排序時,排序不要有二義性,二義性情況下可能會導致分頁結果亂序,可以在後面追加一個主鍵排序

Mysql系列目錄

第1篇:mysql基礎知識

第2篇:詳解mysql數據類型(重點)

第3篇:管理員必備技能(必須掌握)

第4篇:DDL常見操作

第5篇:DML操作匯總

第6篇:select查詢基礎篇

第7篇:玩轉select條件查詢,避免採坑

mysql系列大概有20多篇,喜歡的請關注一下!提前祝大家中秋快樂!

相關焦點

  • 小心避坑:MySQL分頁時使用 limit+order by 會出現數據重複問題
    但是,當limit遇到order by的時候,可能會出現翻到第二頁的時候,竟然又出現了第一頁的記錄。但是事實就是,MySQL再order by和limit混用的時候,出現了排序的混亂情況。2、分析問題在MySQL 5.6的版本上,優化器在遇到order by limit語句的時候,做了一個優化,即 使用了priority queue。
  • 玩轉Mysql系列 - 第25篇:sql中where條件在資料庫中提取與應用淺析
    p=577Mysql系列目錄 第1篇:mysql基礎知識 第2篇:詳解mysql數據類型(重點) 第3篇:管理員必備技能(必須掌握) 第4篇:DDL常見操作 第5篇:DML操作匯總(insert,update,delete) 第6篇:select查詢基礎篇 第7篇:玩轉select條件查詢,避免採坑 第8篇:詳解排序和分頁(order by & limit) 第9篇:分組查詢詳解
  • Java從零開始學 - 第64篇:分組查詢詳解(group by & having)
    這是Mysql系列第9篇。環境:mysql5.7.25,cmd命令中進行演示。本篇內容 分組查詢語法聚合函數單欄位分組多欄位分組分組前篩選數據分組後篩選數據where和having的區別分組後排序where & group by & having & order by & limit 一起協作mysql分組中的坑
  • MySQL的limit用法和分頁查詢的性能分析及優化
    不用擔心,mysql已經為我們提供了這樣一個功能。二、Mysql的分頁查詢語句的性能分析MySql分頁sql語句,如果和MSSQL的TOP語法相比,那麼MySQL的LIMIT語法要顯得優雅了許多。使用它來分頁是再自然不過的事情了。最基本的分頁方式:SELECT ... FROM ... WHERE ... ORDER BY ... LIMIT ...
  • 玩轉Mysql系列 - 第12篇:子查詢(非常重要,高手必備)
    這是Mysql系列第12篇。環境:mysql5.7.25,cmd命令中進行演示。本章節非常重要。子查詢 出現在select語句中的select語句,稱為子查詢或內查詢。外部的select查詢語句,稱為主查詢或外查詢。
  • Mysql的limit用法與幾種分頁形式
    1、Mysql的limit用法
  • Mysql Limit 字句優化
    PRIMARY KEY(id),index(col1))ENGINE=InnoDBmysql root@localhost:test_db> select * from tbl6 limit 8000,10;# resultSet...
  • MySQL 分頁優化中的 「 INNER JOIN方式優化分頁算法 」 到底在什麼情況下會生效?
    測試環境是centos 7 ,mysql 5.7,測試表的數據是500W重現經典分頁「優化」,當沒有篩選條件,排序列為聚集索引的時候,並不會有所改善這裡來對比以下兩種寫法在聚集索引列作為排序條件時候的性能select * from t order by id limit
  • MySQL分頁優化解析
    似乎討論分頁的人很少,難道大家都沉迷於limit m,n?在有索引的情況下,limit m,n速度足夠,可是在複雜條件搜索時,where somthing order by somefield+somefieldmysql會搜遍資料庫,找出「所有」符合條件的記錄,然後取出m,n條記錄。
  • 【219期】面試官:談談MySQL的limit用法、邏輯分頁和物理分頁
    物理分頁為什麼用limit在講解limit之間,我們先說說分頁的事情。分頁有邏輯分頁和物理分頁,就像刪除有邏輯刪除和物理刪除。邏輯刪除就是改變資料庫的狀態,物理刪除就是直接刪除資料庫的記錄,而邏輯刪除只是改變該資料庫的狀態。
  • 別在用offset和limit分頁了
    explain分析語句都知道只要有關於分頁就必存在排序,那麼加一個排序再來看一下查詢效率。對於排序來說,在這種場景下是不會給時間加排序的,而是給主鍵加排序,並且由於添加測試數據的原因將時間欄位給取消了。接下來使用覆蓋索引加inner join的方式來進行優化。
  • 資料庫分頁查詢的幾種實現思路
    另一方面當數據量大時,伺服器的資源也限制了一次查所有數據,如果一次查詢的數據量過多,資料庫和應用伺服器的內存都有可能被撐爆。單庫分頁查詢主流的資料庫的sql語法都支持分頁,比如mysql的offset ... limit,oracle的rownum。
  • 完全講解PHP+MySQL的分頁顯示示例分析
    Web開發是今後分布式程式開發的主流,通常的web開發都要涉及到與資料庫打交道,客戶端從伺服器端讀取通常都是以分頁的形式來顯示,一頁一頁的閱讀起來既方便又美觀。所以說寫分頁程序是web開發的一個重要組成部分,在這裡,我們共同來研究分頁程序的編寫。
  • Mysql跨庫分頁查詢方案總結
    本文將分析如何解決不同資料庫實例上的數據分頁解決方案。現假設有N個資料庫實例,按照時間time排序,查詢偏移量為X,查詢數據量為Y。全局視野法全局視野法是通過將每一個資料庫實例上的分頁數據查詢到內存中,然後在服務層進行內存排序,得到分頁數據。
  • MySQL的Limit詳解
    在SQL Server資料庫中語法為:SELECT TOP number|percent column_name(s) FROM table_name但是並非所有的資料庫系統都支持 TOP 子句,比如Oracle和MySQL,它們有等價的語法。
  • 玩轉Mysql系列 - 第6篇:select查詢基礎篇
    這是Mysql系列第6篇。環境:mysql5.7.25,cmd命令中進行演示。DQL(Data QueryLanguage):數據查詢語言,通俗點講就是從資料庫獲取數據的,按照DQL的語法給資料庫發送一條指令,資料庫將按需求返回數據。DQL分多篇來說,本文屬於第1篇。
  • 詳細的說說mysql的分頁查詢,請細品
    今天和大家聊聊mysql的分頁查詢,我想關於MySQL的分頁查詢,大家肯定都不陌生,為什麼要講呢?因為當初剛剛學習的時候,被這個分頁搞暈過,所以今天拿出來講講,也是重溫一下當年的感覺,好了,話不多說,直接開始吧!
  • 基礎SQL-DQL語句-條件查詢-排序-聚合函數-分組-limit語句
    7. 基礎SQL-DQL語句-條件查詢-排序-聚合函數-分組-limit語句1.排序通過 ORDER BY 子句,可以將查詢出的結果進行排序(排序只是顯示方式,不會影響資料庫中數據的順序)語法: select * from 表名 where 條件  order by 欄位名稱1 [desc | asc] , 欄位名2 [desc | asc]...
  • mysql limit高級用法示例
    mysql limit效率: select `id`,`title
  • web開發中PHP+MySQL分頁顯示示例分析
    Web開發是今後分布式程式開發的主流,通常的web開發都要涉及到與資料庫打交道,客戶端從伺服器端讀取通常都是以分頁的形式來顯示,一頁一頁的閱讀起來既方便又美觀。所以說寫分頁程序是web開發的一個重要組成部分,在這裡,我們共同來研究分頁程序的編寫。