7. 基礎SQL-DQL語句-條件查詢-排序-聚合函數-分組-limit語句
1. 條件查詢
前面我們的查詢都是将所有資料都查詢出來,但是有時候我們隻想擷取到
滿足條件
的資料 文法格式:
SELECT 字段名 FROM 表名 WHERE 條件;
流程:取出表中的每條資料,滿足條件的記錄就傳回,不滿足條件的記錄不傳回
1.1 準備資料
CREATE TABLE stu3 (
id INT,
NAME VARCHAR(20),
age INT,
sex VARCHAR(5),
address VARCHAR(100),
math INT,
english INT
);
-- 批量插入
INSERT INTO stu3 VALUES
(1,'馬雲',55,'男','杭州',66,78),
(2,'馬化騰',45,'女','深圳',98,87),
(3,'馬景濤',55,'男','香港',56,77),
(4,'柳岩',20,'女','湖南',76,65),
(5,'柳青',20,'男','湖南',86,NULL),
(6,'劉德華',57,'男','香港',99,99),
(7,'馬德',22,'女','香港',99,99),
(8,'德瑪西亞',18,'男','南京',56,65);
1.2 比較運算符
> 大于
< 小于
<= 小于等于
>= 大于等于 a=3,a>=1 true; b = 4, b>=4, true
= 等于
<> != 不等于
具體操作:
查詢math分數大于80分的學生
select * from stu3 where math > 80;
執行如下:
-- stu3表的資料
mysql> select * from stu3;
+------+--------------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+--------------+------+------+---------+------+---------+
| 1 | 馬雲 | 55 | 男 | 杭州 | 66 | 78 |
| 2 | 馬化騰 | 45 | 女 | 深圳 | 98 | 87 |
| 3 | 馬景濤 | 55 | 男 | 香港 | 56 | 77 |
| 4 | 柳岩 | 20 | 女 | 湖南 | 76 | 65 |
| 5 | 柳青 | 20 | 男 | 湖南 | 86 | NULL |
| 6 | 劉德華 | 57 | 男 | 香港 | 99 | 99 |
| 7 | 馬德 | 22 | 女 | 香港 | 99 | 99 |
| 8 | 德瑪西亞 | 18 | 男 | 南京 | 56 | 65 |
+------+--------------+------+------+---------+------+---------+
8 rows in set (0.00 sec)
-- 查詢math分數大于80分的學生
mysql> select * from stu3 where math > 80;
+------+-----------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+-----------+------+------+---------+------+---------+
| 2 | 馬化騰 | 45 | 女 | 深圳 | 98 | 87 |
| 5 | 柳青 | 20 | 男 | 湖南 | 86 | NULL |
| 6 | 劉德華 | 57 | 男 | 香港 | 99 | 99 |
| 7 | 馬德 | 22 | 女 | 香港 | 99 | 99 |
+------+-----------+------+------+---------+------+---------+
4 rows in set (0.00 sec)
mysql>
查詢english分數小于或等于80分的學生
select * from stu3 where english<=80;
mysql> select * from stu3 where english<=80;
+------+--------------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+--------------+------+------+---------+------+---------+
| 1 | 馬雲 | 55 | 男 | 杭州 | 66 | 78 |
| 3 | 馬景濤 | 55 | 男 | 香港 | 56 | 77 |
| 4 | 柳岩 | 20 | 女 | 湖南 | 76 | 65 |
| 8 | 德瑪西亞 | 18 | 男 | 南京 | 56 | 65 |
+------+--------------+------+------+---------+------+---------+
4 rows in set (0.00 sec)
mysql>
查詢age等于20歲的學生
select * from stu3 where age=20;
mysql> select * from stu3 where age=20;
+------+--------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+--------+------+------+---------+------+---------+
| 4 | 柳岩 | 20 | 女 | 湖南 | 76 | 65 |
| 5 | 柳青 | 20 | 男 | 湖南 | 86 | NULL |
+------+--------+------+------+---------+------+---------+
2 rows in set (0.00 sec)
mysql>
查詢age不等于20歲的學生
SELECT * FROM student3 WHERE age!=20;
SELECT * FROM student3 WHERE age<>20;
mysql> SELECT * FROM stu3 WHERE age!=20;
+------+--------------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+--------------+------+------+---------+------+---------+
| 1 | 馬雲 | 55 | 男 | 杭州 | 66 | 78 |
| 2 | 馬化騰 | 45 | 女 | 深圳 | 98 | 87 |
| 3 | 馬景濤 | 55 | 男 | 香港 | 56 | 77 |
| 6 | 劉德華 | 57 | 男 | 香港 | 99 | 99 |
| 7 | 馬德 | 22 | 女 | 香港 | 99 | 99 |
| 8 | 德瑪西亞 | 18 | 男 | 南京 | 56 | 65 |
+------+--------------+------+------+---------+------+---------+
6 rows in set (0.00 sec)
mysql>
mysql> SELECT * FROM stu3 WHERE age<>20;
+------+--------------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+--------------+------+------+---------+------+---------+
| 1 | 馬雲 | 55 | 男 | 杭州 | 66 | 78 |
| 2 | 馬化騰 | 45 | 女 | 深圳 | 98 | 87 |
| 3 | 馬景濤 | 55 | 男 | 香港 | 56 | 77 |
| 6 | 劉德華 | 57 | 男 | 香港 | 99 | 99 |
| 7 | 馬德 | 22 | 女 | 香港 | 99 | 99 |
| 8 | 德瑪西亞 | 18 | 男 | 南京 | 56 | 65 |
+------+--------------+------+------+---------+------+---------+
6 rows in set (0.00 sec)
mysql>
1.3 邏輯運算符
and(&&) 多個條件同時滿足
or(||) 多個條件其中一個滿足
not(!) 不滿足
查詢age大于35且性别為男的學生(兩個條件同時滿足)
mysql> SELECT * FROM stu3 WHERE age>35 and sex='男';
+------+-----------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+-----------+------+------+---------+------+---------+
| 1 | 馬雲 | 55 | 男 | 杭州 | 66 | 78 |
| 3 | 馬景濤 | 55 | 男 | 香港 | 56 | 77 |
| 6 | 劉德華 | 57 | 男 | 香港 | 99 | 99 |
+------+-----------+------+------+---------+------+---------+
3 rows in set (0.00 sec)
mysql>
查詢age大于35或性别為男的學生(兩個條件其中一個滿足)
mysql> SELECT * FROM stu3 WHERE age>35 or sex='男';
+------+--------------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+--------------+------+------+---------+------+---------+
| 1 | 馬雲 | 55 | 男 | 杭州 | 66 | 78 |
| 2 | 馬化騰 | 45 | 女 | 深圳 | 98 | 87 |
| 3 | 馬景濤 | 55 | 男 | 香港 | 56 | 77 |
| 5 | 柳青 | 20 | 男 | 湖南 | 86 | NULL |
| 6 | 劉德華 | 57 | 男 | 香港 | 99 | 99 |
| 8 | 德瑪西亞 | 18 | 男 | 南京 | 56 | 65 |
+------+--------------+------+------+---------+------+---------+
6 rows in set (0.00 sec)
查詢id是1或3或5的學生
mysql> SELECT * FROM stu3 WHERE id=1 OR id=3 OR id=5;
+------+-----------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+-----------+------+------+---------+------+---------+
| 1 | 馬雲 | 55 | 男 | 杭州 | 66 | 78 |
| 3 | 馬景濤 | 55 | 男 | 香港 | 56 | 77 |
| 5 | 柳青 | 20 | 男 | 湖南 | 86 | NULL |
+------+-----------+------+------+---------+------+---------+
3 rows in set (0.00 sec)
mysql>
1.4 in關鍵字
文法格式:SELECT 字段名 FROM 表名 WHERE 字段 in (資料1, 資料2...);
in裡面的每個資料都會作為一次條件,隻要滿足條件的就會顯示
mysql> SELECT * FROM stu3 WHERE id in (1,3,5);
+------+-----------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+-----------+------+------+---------+------+---------+
| 1 | 馬雲 | 55 | 男 | 杭州 | 66 | 78 |
| 3 | 馬景濤 | 55 | 男 | 香港 | 56 | 77 |
| 5 | 柳青 | 20 | 男 | 湖南 | 86 | NULL |
+------+-----------+------+------+---------+------+---------+
3 rows in set (0.01 sec)
mysql>
查詢id不是1或3或5的學生
mysql> SELECT * FROM stu3 WHERE id not in (1,3,5);
+------+--------------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+--------------+------+------+---------+------+---------+
| 2 | 馬化騰 | 45 | 女 | 深圳 | 98 | 87 |
| 4 | 柳岩 | 20 | 女 | 湖南 | 76 | 65 |
| 6 | 劉德華 | 57 | 男 | 香港 | 99 | 99 |
| 7 | 馬德 | 22 | 女 | 香港 | 99 | 99 |
| 8 | 德瑪西亞 | 18 | 男 | 南京 | 56 | 65 |
+------+--------------+------+------+---------+------+---------+
5 rows in set (0.00 sec)
mysql>
1.5 範圍
文法格式:SELECT * FROM 表名 WHERE 字段名 BETWEEN 值1 AND 值2
between 值1 and 值2
值1一定要小于值2
比如: age BETWEEN 80 AND 100
相當于: age>=80 && age<=100
查詢english成績大于等于75,且小于等于90的學生
-- 查詢 [75,90]
mysql> SELECT * FROM stu3 WHERE english >= 75 and english <= 90;
+------+-----------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+-----------+------+------+---------+------+---------+
| 1 | 馬雲 | 55 | 男 | 杭州 | 66 | 78 |
| 2 | 馬化騰 | 45 | 女 | 深圳 | 98 | 87 |
| 3 | 馬景濤 | 55 | 男 | 香港 | 56 | 77 |
+------+-----------+------+------+---------+------+---------+
3 rows in set (0.00 sec)
-- 查詢 [75,90]
mysql> SELECT * FROM stu3 WHERE english BETWEEN 75 AND 90;
+------+-----------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+-----------+------+------+---------+------+---------+
| 1 | 馬雲 | 55 | 男 | 杭州 | 66 | 78 |
| 2 | 馬化騰 | 45 | 女 | 深圳 | 98 | 87 |
| 3 | 馬景濤 | 55 | 男 | 香港 | 56 | 77 |
+------+-----------+------+------+---------+------+---------+
3 rows in set (0.00 sec)
mysql>
1.6 like 模糊查詢:% 與 _ 占位符的使用
select * from 表名 where 字段 like 條件;
% : 模糊所有
_ : 模糊一位
例如:
"馬%" 比對以"馬"字開頭
"%馬" 比對以"馬"字結尾
"_馬" 比對第二個字是"馬"字的
"__馬%" 比對第三個字是"馬"字的
"%馬%" 比對包含"馬"字的
查詢姓馬的學生
mysql> SELECT * FROM stu3 WHERE name LIKE '馬%';
+------+-----------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+-----------+------+------+---------+------+---------+
| 1 | 馬雲 | 55 | 男 | 杭州 | 66 | 78 |
| 2 | 馬化騰 | 45 | 女 | 深圳 | 98 | 87 |
| 3 | 馬景濤 | 55 | 男 | 香港 | 56 | 77 |
| 7 | 馬德 | 22 | 女 | 香港 | 99 | 99 |
+------+-----------+------+------+---------+------+---------+
4 rows in set (0.00 sec)
mysql>
查詢姓名中包含'德'字的學生
mysql> SELECT * FROM stu3 WHERE name LIKE '%德%';
+------+--------------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+--------------+------+------+---------+------+---------+
| 6 | 劉德華 | 57 | 男 | 香港 | 99 | 99 |
| 7 | 馬德 | 22 | 女 | 香港 | 99 | 99 |
| 8 | 德瑪西亞 | 18 | 男 | 南京 | 56 | 65 |
+------+--------------+------+------+---------+------+---------+
3 rows in set (0.01 sec)
mysql>

查詢姓馬,且姓名有三個字的學生
mysql> SELECT * FROM stu3 WHERE name LIKE '馬__';
+------+-----------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+-----------+------+------+---------+------+---------+
| 2 | 馬化騰 | 45 | 女 | 深圳 | 98 | 87 |
| 3 | 馬景濤 | 55 | 男 | 香港 | 56 | 77 |
+------+-----------+------+------+---------+------+---------+
2 rows in set (0.01 sec)
mysql>
2. 排序
通過 ORDER BY 子句,可以将查詢出的結果進行排序(排序隻是顯示方式,不會影響資料庫中資料的順序)
文法: select * from 表名 where 條件 order by 字段名稱1 [desc | asc] , 字段名2 [desc | asc]... ;
asc(預設) : 升序
desc : 降序
先根據字段1排序,若有第二排序字段,在第一排序字段的基礎上進行第二次排序
2.1 單列排序
單列排序就是使用一個字段排序
查詢所有資料,使用年齡降序排序
mysql> SELECT * FROM stu3 ORDER BY age DESC;
+------+--------------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+--------------+------+------+---------+------+---------+
| 6 | 劉德華 | 57 | 男 | 香港 | 99 | 99 |
| 1 | 馬雲 | 55 | 男 | 杭州 | 66 | 78 |
| 3 | 馬景濤 | 55 | 男 | 香港 | 56 | 77 |
| 2 | 馬化騰 | 45 | 女 | 深圳 | 98 | 87 |
| 7 | 馬德 | 22 | 女 | 香港 | 99 | 99 |
| 4 | 柳岩 | 20 | 女 | 湖南 | 76 | 65 |
| 5 | 柳青 | 20 | 男 | 湖南 | 86 | NULL |
| 8 | 德瑪西亞 | 18 | 男 | 南京 | 56 | 65 |
+------+--------------+------+------+---------+------+---------+
8 rows in set (0.00 sec)
mysql>
2.2 組合排序
組合排序就是先按第一個字段進行排序,如果第一個字段相同,才按第二個字段進行排序,依次類推。上面的例子中,年齡是有相同的。當年齡相同再使用math進行排序
SELECT 字段名 FROM 表名 WHERE 字段=值 ORDER BY 字段名1 [ASC|DESC], 字段名2 [ASC|DESC];
查詢所有資料,在年齡降序排序的基礎上,如果年齡相同再以數學成績降序排序
mysql> SELECT * FROM stu3 ORDER BY age DESC, math DESC;
+------+--------------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+--------------+------+------+---------+------+---------+
| 6 | 劉德華 | 57 | 男 | 香港 | 99 | 99 |
| 1 | 馬雲 | 55 | 男 | 杭州 | 66 | 78 |
| 3 | 馬景濤 | 55 | 男 | 香港 | 56 | 77 |
| 2 | 馬化騰 | 45 | 女 | 深圳 | 98 | 87 |
| 7 | 馬德 | 22 | 女 | 香港 | 99 | 99 |
| 5 | 柳青 | 20 | 男 | 湖南 | 86 | NULL |
| 4 | 柳岩 | 20 | 女 | 湖南 | 76 | 65 |
| 8 | 德瑪西亞 | 18 | 男 | 南京 | 56 | 65 |
+------+--------------+------+------+---------+------+---------+
8 rows in set (0.00 sec)
mysql>
3. 聚合函數
之前我們做的查詢都是橫向查詢,它們都是根據條件一行一行的進行判斷,而使用聚合函數查詢是縱向查詢,它是對一列的值進行計算,然後傳回一個結果值。另外聚合函數會忽略空值
五個聚合函數:
count() : 計數
IFNULL(字段名,0) : 如果指定字段的值為null,則使用0表示
sum() : 求和
max() : 求最大值
min() : 求最小值
avg() : 求平均值
擴充-保留小數位
cast(avg(字段名稱) as decimal(5,2))
-------------------
聚合函數的使用:寫在 SQL語句SELECT後查詢結果的位置
SELECT 字段名... FROM 表名;
SELECT COUNT(age) FROM 表名;
使用 count(字段) 查詢學生總數,不會統計 null 值
mysql> SELECT count(english) FROM stu3;
+----------------+
| count(english) |
+----------------+
| 7 |
+----------------+
1 row in set (0.00 sec)
mysql>
我們發現對于NULL的記錄不會統計
IFNULL(expr1, expr2)的用法:
假如expr1 不為 NULL,則 IFNULL() 的傳回值為 expr1; 否則其傳回值為expr2, 我們可以利用IFNULL()函數,如果記錄為NULL,給個預設值,這樣統計的資料就不會遺漏
mysql> SELECT COUNT(IFNULL(english,0)) FROM stu3;
+--------------------------+
| COUNT(IFNULL(english,0)) |
+--------------------------+
| 8 |
+--------------------------+
1 row in set (0.00 sec)
mysql>
使用 count(*) 可以統計所有條數
mysql> SELECT COUNT(*) FROM stu3;
+----------+
| COUNT(*) |
+----------+
| 8 |
+----------+
1 row in set (0.00 sec)
mysql>
使用 count(*) 查詢年齡大于40的總數
mysql> SELECT COUNT(*) FROM stu3 WHERE age>40;
+----------+
| COUNT(*) |
+----------+
| 4 |
+----------+
1 row in set (0.00 sec)
mysql>
使用 sum(字段) 查詢數學成績總分
mysql> SELECT SUM(math) FROM stu3;
+-----------+
| SUM(math) |
+-----------+
| 636 |
+-----------+
1 row in set (0.00 sec)
mysql>
使用 avg(字段) 查詢數學成績平均分
mysql> SELECT AVG(math) FROM stu3;
+-----------+
| AVG(math) |
+-----------+
| 79.5000 |
+-----------+
1 row in set (0.00 sec)
mysql>
使用 max(字段) 查詢數學成績最高分
mysql> SELECT MAX(math) FROM stu3;
+-----------+
| MAX(math) |
+-----------+
| 99 |
+-----------+
1 row in set (0.00 sec)
mysql>
使用 min(字段) 查詢數學成績最低分
mysql> SELECT MIN(math) FROM stu3;
+-----------+
| MIN(math) |
+-----------+
| 56 |
+-----------+
1 row in set (0.00 sec)
mysql>
4. GROUP BY 分組 以及 HAVING 條件的使用
分組查詢是指使用 GROUP BY語句對查詢資訊進行分組,相同資料作為一組
SELECT 字段1,字段2... FROM 表名 GROUP BY 分組字段 [HAVING 條件];
GROUP BY怎麼分組的?将分組字段結果中相同内容作為一組
SELECT * FROM stu3 GROUP BY sex;
mysql> select * from stu3 group by sex;
+------+-----------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+-----------+------+------+---------+------+---------+
| 2 | 馬化騰 | 45 | 女 | 深圳 | 98 | 87 |
| 1 | 馬雲 | 55 | 男 | 杭州 | 66 | 78 |
+------+-----------+------+------+---------+------+---------+
2 rows in set (0.00 sec)
mysql>
這句話會将sex相同的資料作為一組
GROUP BY
将分組字段結果中相同内容作為一組,并且傳回每組的第一條資料,是以單獨分組沒什麼用處。分組的目的就是為了統計,一般分組會跟聚合函數一起使用。
分組後聚合函數的作用?不是操作所有資料,而是操作一組資料。SELECT SUM(math), sex FROM stu3 GROUP BY sex;效果如下:
mysql> select sum(math),sex from stu3 group by sex;
+-----------+------+
| sum(math) | sex |
+-----------+------+
| 273 | 女 |
| 363 | 男 |
+-----------+------+
2 rows in set (0.00 sec)
mysql>
實際上是将每組的math進行求和,傳回每組統計的結果
注意事項:當我們使用某個字段分組,在查詢的時候也需要将這個字段查詢出來,否則看不到資料屬于哪組的
- 查詢的時候沒有查詢出分組字段
基礎SQL-DQL語句-條件查詢-排序-聚合函數-分組-limit語句 - 查詢的時候查詢出分組字段
基礎SQL-DQL語句-條件查詢-排序-聚合函數-分組-limit語句
按性别分組
mysql> select sex from stu3 group by sex;
+------+
| sex |
+------+
| 女 |
| 男 |
+------+
2 rows in set (0.00 sec)
mysql>
查詢男女各多少人
-- 1.查詢所有資料,按性别分組。2.統計每組人數
mysql> select sex,count(*) from stu3 group by sex;
+------+----------+
| sex | count(*) |
+------+----------+
| 女 | 3 |
| 男 | 5 |
+------+----------+
2 rows in set (0.00 sec)
mysql>
查詢年齡大于25歲的人,按性别分組,統計每組的人數
1.先過濾掉年齡小于25歲的人。2.再分組。3.最後統計每組的人數
mysql> select sex,count(*) from stu3 where age > 25 group by sex;
+------+----------+
| sex | count(*) |
+------+----------+
| 女 | 1 |
| 男 | 3 |
+------+----------+
2 rows in set (0.00 sec)
查詢年齡大于25歲的人,按性别分組,統計每組的人數,并隻顯示性别人數大于2的資料
有很多同學可能會将SQL語句寫出這樣:
SELECT sex, COUNT(*) FROM stu3 WHERE age > 25 GROUP BY sex WHERE COUNT(*) >2;
“
注意: 并隻顯示性别人數>2的資料屬于分組後的條件,對于分組後的條件需要使用
having
子句
”
mysql> SELECT sex, COUNT(*) FROM stu3 WHERE age > 25 GROUP BY sex HAVING COUNT(*) >2;
+------+----------+
| sex | COUNT(*) |
+------+----------+
| 男 | 3 |
+------+----------+
1 row in set (0.00 sec)
隻有分組後人數大于2的男這組資料顯示出來
having與where的差別
- having是在分組後對資料進行過濾.
- where是在分組前對資料進行過濾
- having後面可以使用聚合函數
- where後面不可以使用聚合函數
5. limit語句
LIMIT
是
限制
的意思,是以
LIMIT
的作用就是限制查詢記錄的條數。SELECT *|字段清單 [as 别名] FROM 表名 [WHERE子句] [GROUP BY子句]\ [HAVING子句] [ORDER BY子句] [LIMIT子句];
思考:limit子句為什麼排在最後?因為前面所有的限制條件都處理完了,隻剩下顯示多少條記錄的問題了!
LIMIT文法格式:LIMIT offset,length; 或者limit length;
offset
是指偏移量,可以認為是跳過的記錄數量,預設為0
length
是指需要顯示的總記錄數
查詢學生表中資料,從第三條開始顯示,顯示6條
-- 我們可以認為跳過前面2條,取6條資料, LIMIT offset,length
mysql> SELECT * FROM stu3 LIMIT 2,6;
+------+--------------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+--------------+------+------+---------+------+---------+
| 3 | 馬景濤 | 55 | 男 | 香港 | 56 | 77 |
| 4 | 柳岩 | 20 | 女 | 湖南 | 76 | 65 |
| 5 | 柳青 | 20 | 男 | 湖南 | 86 | NULL |
| 6 | 劉德華 | 57 | 男 | 香港 | 99 | 99 |
| 7 | 馬德 | 22 | 女 | 香港 | 99 | 99 |
| 8 | 德瑪西亞 | 18 | 男 | 南京 | 56 | 65 |
+------+--------------+------+------+---------+------+---------+
6 rows in set (0.00 sec)
mysql>
LIMIT的使用場景:分頁
比如我們登入京東,淘寶,傳回的商品資訊可能有幾萬條,不是一次全部顯示出來。是一頁顯示固定的條數。假設我們一每頁顯示5條記錄的方式來分頁,SQL語句如下:
-- 每頁顯示5條
-- 第一頁:LIMIT 0,5; 跳過0條,顯示5條
mysql> SELECT * FROM stu3 LIMIT 0,5;
+------+-----------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+-----------+------+------+---------+------+---------+
| 1 | 馬雲 | 55 | 男 | 杭州 | 66 | 78 |
| 2 | 馬化騰 | 45 | 女 | 深圳 | 98 | 87 |
| 3 | 馬景濤 | 55 | 男 | 香港 | 56 | 77 |
| 4 | 柳岩 | 20 | 女 | 湖南 | 76 | 65 |
| 5 | 柳青 | 20 | 男 | 湖南 | 86 | NULL |
+------+-----------+------+------+---------+------+---------+
5 rows in set (0.00 sec)
mysql>
-- 第二頁:LIMIT 5,5; 跳過5條,顯示5條
mysql> SELECT * FROM stu3 LIMIT 5,5;
+------+--------------+------+------+---------+------+---------+
| id | NAME | age | sex | address | math | english |
+------+--------------+------+------+---------+------+---------+
| 6 | 劉德華 | 57 | 男 | 香港 | 99 | 99 |
| 7 | 馬德 | 22 | 女 | 香港 | 99 | 99 |
| 8 | 德瑪西亞 | 18 | 男 | 南京 | 56 | 65 |
+------+--------------+------+------+---------+------+---------+
3 rows in set (0.00 sec)
mysql>
-- 第三頁:LIMIT 10,5; 跳過10條,顯示5條
mysql> SELECT * FROM stu3 LIMIT 10,5;
Empty set (0.00 sec)
mysql>
- 如果第一個參數是0可以簡寫:
SELECT * FROM student3 LIMIT 0,5;
SELECT * FROM student3 LIMIT 5;
- LIMIT 10,5; -- 不夠5條,有多少顯示多少
6. select 查詢條件的執行順序
# DQL查詢語言書寫順序
select 字段
from 表名
where 條件1
group by 分組字段
having 條件2(一般是分組條件)
order by 排序字段 (desc/asc)
limit 索引,最大查詢數量;
# DQL查詢語言執行順序
from ... where ... group by ... having... select ... order by... limit ...
# from 後續内容
1. 表名可以取别名 as (可以省略)
# where 後續内容
1. 比較運算符: > < >= <= = <> != (都是不等于)
2. 邏輯運算符: and or not
a. in關鍵字: id = 1 or id =2 -> id in(1,2)
b. between關鍵字: age between 5 and 10; -> age>=5 and age <=10
c. like關鍵字(模糊查詢) : name like '%馬%'
1). _ 表示一個
2). % 表示0或多個
3. 注意: 不能跟聚合函數
# group by 後續内容
1. 聚合函數
a. 如果不在分組查詢中,所有資料分為一組
b. 如果在分組查詢中, 分組之後執行聚合函數
c. 常見聚合函數
1). sum 求和
2). avg 平均
3). count 統計
4). max/min 最大/最小
d. 注意: null不參與聚合運算的
2. select 後面隻能跟 '被分組的列' 和 聚合函數
3. having 可以用來過濾聚合函數的判斷條件
# select 後續内容
1. 跟被查詢的字段
2. * 代表該表所有字段
3. distinct 濾重: 隻儲存這個字段不同的值
4. 字段可以取别名 as(也可以省略)
# order by
1. order by 字段 desc : 根據字段值降序排序(asc是升序,可以省略)
2. order by 字段1 desc, 字段2 asc : 先根據字段1降序,如果字段1相等,根據字段2升序
# limit 索引,最大查詢數量
-- 規律: 使用者 查詢第x頁,每頁count條
-- 目前頁的sql如何編寫
-- index = (x-1) * count
select * from student limit index,count;