当前位置: 首页 > news >正文

【MySQL | 基础】DQL

前文回顾:DML

文章目录

1、DQL语法

2、基本查询 

3、条件查询

4、聚合函数

5、分组查询

6、排序查询

7、分页查询

8、综合案例

9、执行顺序​编辑

10、总结


        DQL英文全称是Data Quety Language(数据查询语言),数据查询语言,用来查询数据库中表的记录。

查询关键字:SELECT

1、DQL语法

SELECT   字段列表   

FROM   表名列表   

WHERE   条件列表   

GROUP BY   分组字段列表 HAVING   分组后条件列表   

ORDER BY   排序字段列表 

 LIMIT   分页参数;

2、基本查询 

1.查询多个字段

SELECT 字段1,字段2,字段3...FROM 表名;

SELECT * FROM 表名;

2.设置别名

SELECT 字段1[AS 别名1], 字段2[AS 别名2]... FROM表名; -- 这里的AS可省略

3.去除重复记录

SELECT DISTINCE 字段列表 FROM 表名;

4.基本查询演示

例题:为了做下面的例题,先创建一个emp表。语句如下:

create table emp(id          int              COMMENT '编号',workno      VARCHAR(10)      COMMENT '工号',name        VARCHAR(10)      COMMENT'姓名',gender      char(1)          COMMENT '性别',age         TINYINT UNSIGNED COMMENT '年龄', -- 无符号整数idcard      char(18)         COMMENT '身份证号',workaddress VARCHAR(50)      COMMENT '工作地址',entrydata   date             COMMENT '入职年龄'
)COMMENT '员工表';insert into emp values
(1,'1','柳岩','女','20','123456789112345678','北京','2000-01-01'),
(2,'2','张无忌','男','18','123456891012345678','北京','2005-09-01'),
(3,'3','韦一笑','男','38','123456781012345678','上海','2005-08-01'),
(4,'4','赵敏','女','18','123456789102345678','北京','2009-12-01'),
(5,'5','小昭','女','16','123456789101345678','上海','2007-07-01'),
(6,'6','杨逍','男','28','12345678910123467X','北京','2006-01-01'),
(7,'7','范瑶','男','40','123456789101245678','北京','2005-05-01'),
(8,'8','黛绮丝','女','38','123456789101345678','天津','2015-05-01'),
(9,'9','范凉凉','女','45','123456789101345678','北京','2010-04-01'),
(10,'10','陈友凉','男','53','123456789102345678','上海','2011-01-01'),
(11,'11','张士诚','男','55','123456789112345678','江苏','2015-05-01'),
(12,'12','常遇春','男','32','123456789101245678','北京','2004-02-01'),
(13,'13','张三丰','男','88','123456789102345678','江苏','2020-11-01'),
(14,'14','灭绝','女','65','123456789101235678','西安','2019-05-01'),
(15,'15','胡青牛','男','70','123456789102345678','西安','2018-04-01'),
(16,'16','周芷若','女','18',null,'北京','2012-06-01');select * from emp;
-- 基本查询
-- 1、查询指定字段 name,workno, age返回
SELECT name, workno,age FROM emp;-- 2、查询所以字段返回
SELECT id, workno,name,gender,age,idcard,workaddress,entrydata FROM emp;  -- 推荐
SELECT * FROM emp;-- 3、查询所以员工的工作地址,起别名
SELECT workaddress AS '工作地址' FROM emp;
SELECT workaddress '工作地址' FROM emp;  -- AS可省略-- 4、查询公司员工的上班地址(不要重复)
SELECT DISTINCT workaddress AS '工作地址'  FROM emp;

3、条件查询

1.语法

SELECT 字段列表 FROM 表名 WHERE 条件列表;

2.条件

比较运算符功能
>大于
>=大于等于
<小于
<=小于等于
=等于
<> 或 !=不等于
BETWEEN...AND...在某个范围之内(含最小,最大值)
IN(...)在in之后的列表中的值,多选一
LIKE 占位符模糊匹配(_匹配单个字符,%匹配任意个字符)
IS NULL是NULL
逻辑运算符功能
AND 或 &&并且(多个条件同时成立)
OR 或 || 或者(多个条件任意一个成立)
NOT 或 ! 非,不是

3.条件查询演示

-- 条件查询
-- 1、查询年龄等于 88 的员工
SELECT * from emp WHERE age = 88;-- 2、查询年龄小于 20 的员工信息
SELECT * FROM emp WHERE age < 20;-- 3、查询年龄小于等于 20 的员工信息
SELECT * FROM emp WHERE age <= 20;-- 4、查询没有身份证号的员工信息
SELECT * from emp WHERE idcard is NULL;-- 5、查询有身份证号的员工信息
SELECT * FROM emp WHERE idcard is not null; -- is not null-- 6、查询年龄不等于 88 的员工信息
SELECT * FROM emp WHERE age <> 88;
SELECT * FROM emp WHERE age != 88;-- 7、查询年龄在 15(包含) 到 20(包含) 之间的员工信息
SELECT * FROM emp WHERE age >= 15 && age <= 20;
SELECT * FROM emp WHERE age >= 15 AND age <= 20;
SELECT * FROM emp WHERE age BETWEEN 15 AND 20; -- 左右都闭[]-- 8、查询性别为 女 且年龄小于 25 岁的员工信息
SELECT * FROM emp WHERE gender = '女' and age < 25; -- 9、查询年龄等于 18 或 20 或 40 的员工信息
SELECT * FROM emp WHERE age = 18 or age = 20 or age = 40;
SELECT * FROM emp WHERE age IN(18, 20, 40);-- 10、查询姓名姓名为两个字的员工信息
SELECT * FROM emp WHERE name LIKE'__';-- 11、查询身份证号最后一位是X的员工信息
SELECT * FROM emp WHERE idcard LIKE '%X';
SELECT * FROM emp WHERE idcard LIKE '_________________X';  -- 17个_ 原因身份证号有18位

4、聚合函数

1.认识聚合函数

        将一列数据作为一个整体,进行纵向计算

2.常见的聚合函数

函数功能
count统计数量
max最大值
min最小值
avg平均数
sum求和

3.语法

SELECT  聚合函数(字段列表) FROM 表名;

注意:null值不参与所以聚合函数运算。

4.聚合函数演示

-- 聚合函数
-- 1、统计该企业员工数量
SELECT count(*) '员工数量' FROM emp; 
SELECT count(id) '员工数量' FROM emp;  -- null不参与聚合函数的运算-- 2、统计该企业员工的平均年龄
SELECT AVG(age) '平均年龄' FROM emp;-- 3、统计该企业员工的最大年龄
SELECT MAX(age) '最大年龄'FROM emp;-- 4、统计该企业员工的最小年龄
SELECT MIN(age)'最小年龄' FROM emp;-- 5、统计西安地区员工的年龄之和
SELECT sum(age) '西安员工年龄之和' FROM emp WHERE workaddress = '西安';

5、分组查询

1.语法

SELECT  字段列表  表名  [WHERE  条件] GROUP BY 分组字段名 [HAVING  分组后过滤条件];

2.where 与 having区别

  • 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
  • 判断条件不同:where不能对聚合函数进行判断,而having可以。

注意:

  • 执行顺序:where  > 聚合函数 > having。
  • 分组之后:查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。

3.分组查询演示

-- 分组查询
-- 1、根据性别分组,统计男性员工 和 女性员工的数量
SELECT gender, COUNT(gender) from emp GROUP BY gender;  
SELECT gender, COUNT(*) from emp GROUP BY gender;  -- 2、根据性别分组,统计男员工 和 女员工的平均年龄
SELECT gender,AVG(age) FROM emp GROUP BY gender;-- 3、查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址
SELECT workaddress,count(*) FROM emp WHERE age < 45 GROUP BY workaddress HAVING count(*)  > 3;

6、排序查询

1.语法

SELECT 字段列表  FROM 表名  ORDER  BY  字段1  排序方式1, 字段2  排序方式2;

2.排序方式

  • ASC:升序(默认值)
  • DESC : 降序

注意:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。

-- 排序查询
-- 1、根据年龄对公司的员工进行升序排序
SELECT * FROM emp ORDER BY age ASC;
SELECT * FROM emp ORDER BY age;-- 2、根据入职时间,对员工进行降序
SELECT * FROM emp ORDER BY entrydata DESC;-- 3、根据年龄对公司的员工进行升序排序,年龄相同,再按照入职时间进行降序
SELECT * FROM emp ORDER BY age ASC, entrydata DESC;

7、分页查询

1.语法

SELECT 字段列表  FROM  表名  LIMIT  起始索引, 查询记录数;

注意:

  • 起始索引从0开始,起始索引 = (查询页码 - 1) * 每页显示记录数。
  • 分页查询时数据库的方言,不同的数据库有不同的实现,MySQL中是LIMIT。
  • 如果查询的是第一页数据,起始索引可以省略,直接简写为LIMIT 10。

2.分页查询演示

-- 分页查询
-- 1、查询第1页员工数据,每页展示10条记录
SELECT * FROM emp limit 0, 10;
SELECT * FROM emp limit 10;-- 2、查询第2页员工数据,每页显示10条记录
SELECT * FROM emp limit 10, 10;

8、综合案例

1、查询年龄为20,21,22,23 的女性员工信息

2、查询性别为 男 ,并且年龄在20 ~ 40(岁)以内的姓名为三个字的员工。

3、统计员工表,年龄小于60 岁,男性员工和女性员工的人数。

4、查询所以年龄小于等于35岁员工的姓名和年龄,并对查询结果按照年龄升序排序,如果年龄相同按入职时间降序。

5、查询性别为 男,并且年龄在 20 ~ 40 岁(含)以内的前5个员工信息,对查询的结果按照年龄升序排序,年龄相同按照入职时间升序排序。

-- 1、查询年龄为20,21,22,23 的女性员工信息
SELECT * FROM emp WHERE age in(20,21,22,23) and gender = '女';
SELECT * FROM emp WHERE age = 20 or age = 21 or age = 22 or age = 23 and gender = '女';-- 2、查询性别为 男 ,并且年龄在20 ~ 40(岁)以内的姓名为三个字的员工。
SELECT * FROM emp WHERE gender = '男' and age BETWEEN 20 and 40 and name LIKE'___' -- 3、统计员工表,年龄小于60 岁,男性员工和女性员工的人数。
SELECT gender, count(*) FROM emp WHERE age < 60 GROUP BY gender; -- 4、查询所有年龄小于等于35岁员工的姓名和年龄,并对查询结果按照年龄升序排序,如果年龄相同按入职时间降序。
SELECT name, age FROM emp WHERE age <= 35 ORDER BY age ASC, entrydata DESC;-- 5、查询性别为 男,并且年龄在 20 ~ 40 岁(含)以内的前5个员工信息,对查询的结果按照年龄升序排序,年龄相同按照入职时间升序排序。
SELECT * FROM emp where  gender = '男' and age BETWEEN 20 AND 40  ORDER BY age ASC,entrydata ASC LIMIT 0,5;

9、执行顺序

10、总结

http://www.dtcms.com/a/597811.html

相关文章:

  • 为什么Redis不支持回滚
  • 中航网站建设国家icp备案网站
  • 中国室内设计联盟官方网站入口360建筑网怎么重新注册
  • 专业网站制作企业公司网站的制作公司
  • 深入理解Java泛型:类型擦除、通配符PECS原则与实践
  • Supabase 适用场景全解析:从原型到生产的落地指南
  • moodle网站建设自己做网站如何盈利
  • 网络建站网网络推广中国建设网官方网站电子银行
  • 专业网站排名优化公司公司企业logo
  • 《STM32单片机开发》p5
  • C#桌面框架与Qt对比及选型(国产操作系统开发视角)
  • (4)框架搭建:Qt实战项目之主窗体介绍
  • 网站开发建设准备工作公司在百度怎么推广
  • 大文件上传实战经验分享:从痛点到完美解决方案
  • 图书馆网站建设的作用iis8出现在网站首页
  • 如何使用Enterprise Architect和SysML进行复杂嵌入式系统建模
  • RocketMQ核心知识点
  • 网站运营岗位职责描述网络优化分为
  • 【 前端 -- css 】浮动元素导致父容器高度塌陷如何解决
  • 用html5的视频网站重庆公司有哪些
  • Leessun Procreate素描画笔套装含纸张纹理数字插画创作资源
  • websocket(即时通讯)
  • 宁波cms建站网站建设的切片是什么
  • 在防火墙环境下进行LoadRunner性能测试的配置方法
  • 企业门户网站开发门户网站英文版建设
  • 【系统架构设计师-2025下半年真题】案例分析-参考答案及详解(回忆版)
  • 在家做私房菜的网站永州本地网站建设
  • MyBatis如何处理懒加载和预加载?
  • 计算机更换硬盘并新装系统
  • 高端营销型企业网站建设wordpress升级vip