Mysql教程(五):DQL学习

Mysql教程(五):DQL学习

DQL Data Query Language 数据查询语言,用来查询数据库中表的记录

1 基本语法

DQL查询语句,语法结构如下:

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

分为以下几个部分:

  • 基本查询(不带任何条件)
  • 条件查询(WHERE)
  • 聚合函数(count、max、min、avg、sum)
  • 分组查询(group by)
  • 排序查询(order by)
  • 分页查询(limit)

2 基本查询

查询多个字段

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

注意:*代表查询所有字,在实际开发中尽量少用(不直观,影响效率)

字段设置别名

SELECT 字段1 [ AS 别名1 ] , 字段2 [ AS 别名2 ] ... FROM 表名;

AS也可以省略:

SELECT 字段1 [ 别名1 ] , 字段2 [ 别名2 ] ... FROM 表名;

去除重复记录

SELECT DISTINCT 字段列表 FROM 表名;

案例

A. 查询指定字段 name,workno,age并返回

select name, worknum, age from empolyee;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mVs1bEXJ-1689737094170)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230719105556960.png)]

B. 查询员工的身份证号,起别名

SELECT name, idcard '身份证号' FROM empolyee;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PrhV6Hpc-1689737094171)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230719105748800.png)]

C. 查询员工的年龄有哪些,不重复

SELECT DISTINCT age '年龄' FROM empolyee;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ELVu3trW-1689737094171)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230719105926010.png)]

3 条件查询

语法

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

条件

常用比较运算法

比较运算法 功能
> 大于
>= 大于等于
< 小于
<= 小于等于
= 等于
<> 或 != 不等于
BETWEEN … AND … 在某个范围之内(含最小、最大值)
IN(…) 在in之后的列表中的值,多选
LIKE 占位符 模糊匹配(_匹配单个字符, %匹配任意个字符)
IS NULL 是NULL

常用的逻辑运算符

逻辑运算符 功能
AND 或 && 并且(多个条件同时成立)
OR 或 || 或者(多个条件任意一个成立)
NOT 或 ! 非, 不是

案例

查询年龄等于21的员工信息

SELECT * FROM empolyee WHERE age=21;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XoNBZSEV-1689737094172)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230719110525388.png)]

查询年龄大于21的员工信息

SELECT * FROM empolyee WHERE age>21;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KHMgIzSL-1689737094172)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230719110552571.png)]

查询身份证号为空的员工信息

SELECT * FROM empolyee WHERE idcard IS NULL;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XRdd492C-1689737094172)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230719110959208.png)]

查询身份证号不为空的员工信息

SELECT * FROM empolyee WHERE idcard IS NOT NULL;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-91EtIAcj-1689737094172)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230719111042476.png)]

查询年龄不等于21的员工信息

SELECT * FROM empolyee WHERE age != 21;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0ZAwHW1g-1689737094173)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230719111134473.png)]

查询年龄大于等于22并且小于等于24的员工信息

SELECT * FROM empolyee WHERE age>=22 && age<=24;

SELECT * FROM empolyee WHERE age>=22 AND age<=24;

# BETWEEN后跟的是最小值,AND后跟的是最大值,切不可写反了
SELECT * FROM empolyee WHERE age BETWEEN 22 AND 24;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qOna1zHU-1689737094173)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230719111257433.png)]

查询年龄为24并且性别为女的员工信息

SELECT * FROM empolyee WHERE age=24 AND gender='女';

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Dun3vDo6-1689737094173)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230719111532428.png)]

查询年龄为24或者21员工信息

SELECT * FROM empolyee WHERE age=24 OR age=21;

SELECT * FROM empolyee WHERE age IN (21, 24);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kmFw4yJB-1689737094173)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230719111608847.png)]

查询姓名为两个字员工信息

SELECT * FROM empolyee WHERE name like '__';

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nCJeV1ni-1689737094173)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230719111815549.png)]

查询身份证号最后一位是X的员工信息

SELECT * FROM empolyee WHERE idcard LIKE '%X';

SELECT * FROM empolyee WHERE idcard LIKE '_________________X';

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-AabY1qWa-1689737094174)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230719112039324.png)]

4 聚合函数

什么是聚合函数?

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

常见的聚合函数

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

语法

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

注意:NULL值是不参与所有聚合函数运算的。

案例

A.统计员工数量

SELECT COUNT(*) FROM empolyee;

SELECT COUNT(idcard) FROM empolyee;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-wY6mSGVv-1689752070614)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230719153316863.png)]

B.统计员工的平均年龄

SELECT AVG(age) FROM empolyee;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Mgc4q1mo-1689752070614)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230719153303255.png)]

C.统计员工最大年龄

SELECT MAX(age) FROM empolyee;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tAxfPFkc-1689752070614)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230719153255630.png)]

D.统计员工最小年龄

SELECT MIN(age) FROM empolyee;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H9CTmqkk-1689752070614)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230719153246045.png)]

E.统计男员工的年龄之和

SELECT SUM(age) FROM empolyee WHERE gender = '男';

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-CveZdeuh-1689752070615)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230719153236042.png)]

5 分组查询

语法

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

where和having区别

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

注意:

  • 分组之后,查询的字段一般为聚合函数和分组字段,查询其他字段无任何意义。
  • 执行顺序: where > 聚合函数 > having
  • 支持多字段分组, 具体语法为 : group by columnA,columnB

A.根据性别分组 , 统计男性员工 和 女性员工的数量

SELECT gender, COUNT(*) FROM empolyee GROUP BY gender;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-79a5Rg20-1689752870980)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230719154635811.png)]

B.根据性别分组 , 统计男性员工 和 女性员工的平均年龄

SELECT gender, AVG(age) FROM empolyee GROUP BY gender;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-6a1AH9qN-1689752870980)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230719154628571.png)]

C.查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于2的工作地址

SELECT workaddress, count(*) address_count
FROM empolyee
WHERE age < 45
GROUP BY workaddress
HAVING address_count >= 2;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xeQtPjgv-1689752870980)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230719154621138.png)]

D.统计各个工作地址上班的男性及女性员工的数量

SELECT workaddress, gender, count(*) '数量'
FROM empolyee
GROUP BY gender , workaddress;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4QEKn9qk-1689752870980)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230719154611960.png)]

6 排序查询

语法

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

排序方式

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

注意:

如果是升序,可以不指定排序方式ASC

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

案例:

A.根据年龄对员工进行升序排序

SELECT * FROM empolyee ORDER BY age ASC;

SELECT * FROM empolyee ORDER BY age;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aoV3w0xl-1689753482314)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230719155457723.png)]

B. 根据入职时间对员工进行降序排序

SELECT * FROM empolyee ORDER BY entrydate DESC;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nHn45H0r-1689753482314)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230719155601265.png)]

C. 根据年龄对员工进行升序排序,如果年龄相同,按照入职时间进行降序排序

SELECT * FROM empolyee ORDER BY age ASC , entrydate DESC;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HbPklQzS-1689753482315)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230719155710736.png)]

7 分页查询

语法

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

注意事项:

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

案例

A. 查询第1页员工数据,每页展示10条记录

SELECT * FROM empolyee LIMIT 0, 5;

SELECT * FROM empolyee LIMIT 5;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Otz8HjdH-1689753848341)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230719160302119.png)]

B. 查询第2页员工数据,每页展示10条记录 ------> (页码-1)*页 展示记录数

SELECT * FROM empolyee LIMIT 5, 5;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xRrWDktE-1689753848342)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230719160355413.png)]

8 案例

查询年龄为20, 21, 22,23的女员工

SELECT * FROM empolyee 
WHERE gender='女' 
AND age in (20,21,22,23);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VWzMVFje-1689754717639)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230719160611781.png)]

查询性别为 男,并且年龄在22-23之间的姓名为2个字的员工

SELECT * FROM empolyee 
		WHERE gender='男' 
		AND age 
		BETWEEN 22 AND 23 
		AND name LIKE '__';

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2pqKwdyQ-1689754717639)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230719160655552.png)]

查询员工年龄小于60的,男性员工和女性员工的人数

SELECT gender, COUNT(*) FROM empolyee 
						WHERE age < 60 
						GROUP BY gender;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hnslKXqM-1689754717640)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230719161119264.png)]

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

SELECT name, age FROM empolyee 
                 WHERE age <= 35 
                 ORDER BY age ASC, entrydate DESC;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0bDeHciB-1689754717640)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230719161457772.png)]

查询性别为男,年龄在20-40之间以内的5个员工信息,对结果按照年龄升序排序,年龄相同按照入职时间升序排序

SELECT * FROM empolyee 
         WHERE gender='男' AND 
               age BETWEEN 20 AND 40 
         ORDER BY age ASC, entrydate DESC LIMIT 5;

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LjrbrLAE-1689754717640)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20230719161757900.png)]

9 执行顺序

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/WwLK123/article/details/131804855
今日推荐