這篇文章為大家帶來了關於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執行:
select 字段列表 from 表名;查詢全部欄位:
select * from 表名;移除重複記錄:
select distinct 字段列表 from 表名;起別名操作:
select 字段名 别名 from 表名;
select name,math from stu;#起別名運算練習:
select name,english 英语成绩 from stu;
#2. 條件查詢 | |
一般語法: | select 字段列表 from 表名 where 条件列表; | 條件查詢一般配合運行符進行,以下是常見的幾個運算子:
運算子 | |
大於小於等於不等於 | between…and… |
在這個範圍之內 |
#and 或&&並且
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. 排序查詢
select 字段列表 from 表名 order by 排序字段名1 [排序方式]...; |
#註:排序方式又兩種:分別是升序ASC和降序DESC,預設為升序ASC。 |
---|---|
我們使用前言中的案例進行排序查詢練習: | |
4.1 聚合函數語法 | |
函數 | |
統計數量(一般選用不為null的列) |
一般语法:
select 聚合函数 from 表名;
注:NULL值不参与聚合函数运算。
我们使用前言中的案例进行聚合函数的练习:
统计该表中一共有几个学生:
select count(id) from stu;
上面我们使用某一字段进行运算,这样做可能面临的问题是某一个值可能是NULL,所以我们一般使用 *
进行运算,因为一行中不可能所有的字段都是NULL。
select count(*) from stu;
查询数学成绩的平均分:
select avg(math) from stu;
select 字段列表 from 表名 [where 分组前的条件限定] group by 分组字段名 [having 分组后的条件过滤]
注:分组之后,查询的字段为聚合函数和分组字段,查询其他字段无任何意义。
我们使用前言中的案例进行分组查询练习:
查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组:
select gender, avg(math),count(*) from stu where math > 70 group by gender;
查询男同学和女同学各自的数学平均分,以及各自人数,要求:分数低于70分的不参与分组,分组之后人数大于2个的:
select gender, avg(math),count(*) from stu where math > 70 group by gender having count(*) > 2;
注:where 和 having
执行时机不一样:where 是分组之前进行限定,不满足where条件,则不参与分组,而having是分组之后对结果进行过滤。所以,where 不能对聚合函数进行判断,having 可以。
在大家的印象中,网页在展示大量的数据时,往往不是把数据一下全部展示出来,也是用分页展示的形式,其实就是对数据进行分页查询的操作,即每次只查询一页的数据展示到页面上。
select 字段列表 from 表名 limit 查询起始索引,查询条目数;
在 limit
关键字中,查询起始索引这个参数是从0开始的。
我们使用前言中的案例进行分页查询练习:
从0开始查询,查询3条数据:
select * from stu limit 0,3;
起始索引 = (当前页码 - 1) * 每页显示的条数
推荐学习:mysql视频教程
以上是MySQL單表查詢進階總結的詳細內容。更多資訊請關注PHP中文網其他相關文章!