首頁  >  文章  >  資料庫  >  MySQL單表查詢進階總結

MySQL單表查詢進階總結

WBOY
WBOY轉載
2022-12-02 17:23:352154瀏覽

這篇文章為大家帶來了關於mysql的相關知識,其中主要介紹了關於單表查詢的相關內容,下面一起來看一下,希望對大家有幫助。

MySQL單表查詢進階總結

推薦學習:mysql影片教學

#在我們對資料進行操作時,查詢無疑是至關重要的,查詢操作靈活多變,我們可以依照開發的需求,設計高效率的查詢操作,把資料庫中儲存的資料展示給使用者。

查詢是資料操作至關重要的一部分,比如說在所有商品中找出價格在規定範圍內的所有商品,要想把資料庫中的資料放在客戶端中展示給用戶,一般都進行了查詢的操作。

在實際開發中,我們要根據不同的需求,並且考慮查詢的效率來決定怎樣進行查詢,學習查詢前,可以先看看查詢的完整語法:

SELECT
	字段列表FROM
	表名列表WHERE
	条件列表GROUP BY
	分组字段HAVING
	分组后条件ORDER BY
	排序字段LIMIT
	分页限定

根據查詢的完整語法中的關鍵字,我們分別來學習基礎查詢,條件查詢,排序查詢,分組查詢和分頁查詢。

我們使用以下的案例學習單表查詢:

-- 删除stu表
drop table if exists stu;
-- 创建stu表
CREATE TABLE stu (
id int, -- 编号
name varchar(10), -- 姓名
age int, -- 年龄
gender varchar(5), -- 性别
math double(5,2), -- 数学成绩
english double(5,2) -- 英语成绩

);
-- 添加数据
INSERT INTO stu(id,name,age,gender,math,english)
VALUES
(1,'小张',23,'男',66,78),
(2,'小李',20,'女',98,87),
(3,'小陈',55,'男',56,77),
(4,'小樊',20,'女',76,65),
(5,'小马',20,'男',86,NULL),
(6,'小赵',57,'男',99,99);

在Navicat中選取SQL執行:

MySQL單表查詢進階總結

##1. 基礎查詢

1.1 基礎查詢語法

#查詢多個欄位:

select 字段列表 from 表名;
查詢全部欄位:

select * from 表名;
移除重複記錄:

select distinct 字段列表 from 表名;
起別名操作:

select 字段名 别名 from 表名;

1.2 基礎查詢練習

我們使用前言中的案例進行基礎查詢練習:

查詢多個欄位的練習:

select name,math from stu;

MySQL單表查詢進階總結

#起別名運算練習:

select name,english 英语成绩 from stu;

MySQL單表查詢進階總結

#2. 條件查詢2.1 條件查詢語法一般語法:條件查詢一般配合運行符進行,以下是常見的幾個運算子:功能描述> between…and…
select 字段列表 from 表名 where 条件列表;
運算子
大於小於等於不等於
在這個範圍之內
# in(…)

多選一

is null / is not null

是null / 不是null

MySQL單表查詢進階總結

#and 或&&MySQL單表查詢進階總結並且

  • or 或||

MySQL單表查詢進階總結

2.2 條件查詢練習

我們使用前言中的案例進行條件查詢練習:

查詢年齡大於20的學生資訊:

select * from stu where age>20;
查詢年齡等於18歲或年齡等於20歲或年齡等於21歲的學生資料:

select * from stu where age in(18,20,21);

模糊查詢使用like關鍵字,可以使用通配符進行佔位:

_ : 代表單一任意字元

% : 代表任意數字符號

查詢姓名中含有張的學生資訊:
select * from stu where name like '%张%';

3. 排序查詢

3.1 排序查詢語法3.2 排序查詢練習我們使用前言中的案例進行排序查詢練習:4.聚合函數4.1 聚合函數語法什麼是聚合函數呢?在進行查詢操作時,我們往往需要對一整列進行運算,例如我們可以計算一整列成績資料的平均值,我們就要使用聚合函數。以下是常見的聚合函數:函數名稱##count (列名)統計數量(一般選用不為null的列)#max(列名)
select 字段列表 from 表名 order by 排序字段名1 [排序方式]...;
#註:排序方式又兩種:分別是升序ASC和降序DESC,預設為升序ASC。
函數
###最大值#### ########min(列名)######最小值#############sum(列名)######求和##### ########avg(列名)######平均值#############

一般语法:

select 聚合函数 from 表名;

注:NULL值不参与聚合函数运算。

4.2 聚合函数练习

我们使用前言中的案例进行聚合函数的练习:

统计该表中一共有几个学生:

select count(id) from stu;

MySQL單表查詢進階總結

上面我们使用某一字段进行运算,这样做可能面临的问题是某一个值可能是NULL,所以我们一般使用 * 进行运算,因为一行中不可能所有的字段都是NULL。

select count(*) from stu;

查询数学成绩的平均分:

select avg(math) from stu;

MySQL單表查詢進階總結

5. 分组查询

5.1 分组查询语法

select 字段列表 from 表名 [where 分组前的条件限定] group by 分组字段名 [having 分组后的条件过滤]

注:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义。

5.2 分组查询练习

我们使用前言中的案例进行分组查询练习:

查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组:

select gender, avg(math),count(*) from stu where math > 70 group by gender;

MySQL單表查詢進階總結

查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组,分组之后人数大于2个的:

select gender, avg(math),count(*) from stu where math > 70 group by gender having count(*) > 2;

MySQL單表查詢進階總結

注:where 和 having 执行时机不一样:where 是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤。所以,where 不能对聚合函数进行判断,having 可以。

6. 分页查询

6.1 分页查询语法

在大家的印象中,网页在展示大量的数据时,往往不是把数据一下全部展示出来,也是用分页展示的形式,其实就是对数据进行分页查询的操作,即每次只查询一页的数据展示到页面上。

select 字段列表 from 表名 limit 查询起始索引,查询条目数;

limit 关键字中,查询起始索引这个参数是从0开始的。

5.2 分页查询练习

我们使用前言中的案例进行分页查询练习:

从0开始查询,查询3条数据:

select * from stu limit 0,3;

MySQL單表查詢進階總結起始索引 = (当前页码 - 1) * 每页显示的条数

推荐学习:mysql视频教程

以上是MySQL單表查詢進階總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除