select 聚合函数(字段列表) from 表名;
Mysql的相关知识
好处 :
1.持久化数据到本地
2.可以实现结构化查询,方便管理
数据库主要分为:
DB(数据库),保存一系列有组织的数据容器。
DBMS(数据库管理系统),用于对DB获得数据进行操作管理,又称为数据库软件(产品)
SQL(结构化查询语言,用于和DBMS通信的语言):DML语言,TCL语言,DDL语言,DQL语言;
一、什么是DQL?
DQL(查询表中的数据)通俗来讲就是查询数据库中表的数据,主要用SELECT关键字去对表中想要的数据去进行查找,用WHERE写条件去约束查找的内容。接下来和小伙伴们分享DQL的操作语句。
二、DQL查询语句
1.语法
select
字段列表
from
表名列表
where
条件列表
group by
分组字段
having
分组之后的条件
order by
排序
limit
分页限定
2.基础查询
1.多个字段查询
select 字段名1,字段名2, ... from 表名;
注意:如果查询所有字段,则可以使用*来代替字段
2.计算列
select *,(数值1+数值2+...+数值n) 新列名 from 表名;
一般可以使用四则运算计算一些列的值。(一般只会进行数值型计算)
注:如果数值存在null,则最终结果为null。
这里可以使用ifnull(表达式1,表达式2),表达式1为需要判断是否为null,如果为空,则替换为
表达式2的值。
3.去除重复:
关键字 distinct
select distinct 字段名 from 表名;
(1)起别名
特点:
1.便于理解;
2.当要查询多个字段时,出现重名的情况,使用别名可以区分开;
方式一:使用关键字AS
SELECT 查询列表 AS 别名,查询列表 AS 别名 FROM 表;
方式二:使用空格
SELECT 查询列表 别名,查询列表 别名 FROM 表;
(2)去重
运用关键字DISTINCT进行去重显示;
SELECT DISTINCT department_id FROM employees;
# 一、基本查询
SELECT*FROM emp;
# 1.查询指定字段name,workno,age返回
SELECT NAME,workno,age FROM emp;
# 2.查询所有字段返回
SELECT*FROM emp;
SELECT id,workno,NAME,gender,age,idcard,workaddress,entrydate FROM emp;
# 3.查询所有员工的工作地址,起别名
SELECT workaddress AS '工作地址' FROM emp;
# as可以省略
SELECT workaddress '工作地址' FROM emp;
# 4.查询公司员工的上班地址(不要重复)
SELECT DISTINCT workaddress AS '工作地址' FROM emp;
2.条件查询
语法(运算步骤):
select 查询列表;(3) from 表名;(1) where 筛选条件;(2)
分类:
1.按条件表达式筛选
条件运算符:> < = <>(!=) >= <=
2.按逻辑表达式筛选
逻辑运算符:and(&&) or(||) not(!)
3.模糊查询
like , between and , in , is null
一、按条件表达式筛选
二、逻辑运算符筛选
and(&&) or(||) not(!)
用于:需要多个条件表达式来进行判断时;
三、模糊查询
1.like(查找含有某种特殊的范围)
特点:一般和通配符搭配使用,可以判断字符型和数值型;
通配符:
'% '为任意多个字符,也包含0字符;
'_ '为任意单个字符;
2.between and(查询某范围的)
3.in(查询包含某一类的)
说明:判断某字段的值是否属于in列表中的某一项;
特点:
①使用in可以提高语句的简洁度;
②in列表的值类型必须一致或者兼容;
③in列表不能使用通配符;
4.is null(判断是否为null值)
注意:=或者<>不能用于判断null值;
用于:is null 或者 is not null 用于判断null值,可读性较高;
补充:isnull函数,用于:判断某字段或表达式是否为null,是返回1,否返回0;
5.安全等于 :<=>
说明:可读性较小,既可以判断null值,也可以判断普通数值
代码演示:
# 二、条件查询
# 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;
# 6.查询年龄不等于88的员工信息(两种写法)
SELECT * FROM emp WHERE age <> 88;
SELECT * FROM emp WHERE age!=88;
# 7.查询年龄在15岁(包含)到20岁(包含)之间的员工信息(三种写法)
SELECT * FROM emp WHERE age BETWEEN 15 AND 20;
SELECT * FROM emp WHERE age>=15 AND age <=20;
SELECT * FROM emp WHERE age>=15 && age <=20;
# 8.查询性别为女且年龄小于25岁的员工信息(两种写法)
SELECT * FROM emp WHERE gender='女' AND age<25;
SELECT * FROM emp WHERE gender='女' && 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个'_';
3、聚合函数
(1)介绍
将一列数据作为一个整体,进行纵向运算
(2)常见聚合函数
函数 | 功能 |
count | 统计数量 |
max | 最大值 |
min | 最小值 |
avg | 平均值 |
sum | 求和 |
(3)语法
select 聚合函数(字段列表) from 表名;
代码演示:
# 三、聚合函数
# 1.统计该企业员工数量
SELECT COUNT(*) AS '员工数量' FROM emp;
# 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='西安';
4、分组查询
1.语法
select 字段列表 from 表名 [where条件] group by 分组字段名[having 分组后过滤条件];
2.where 与 having的区别:
- 执行时机不同:where是分组之前进行过滤,不满足where条件,不参与分组;而having是分组之后对结果进行过滤。
- 判断条件不同:where不能对聚合函数进行判断,而having可以。
3.代码演示:
四、分组查询
# 1.根据性别分组,统计男性员工和女性员工的数量
SELECT gender,COUNT(*) FROM emp GROUP BY gender;
# 2.根据性别分组,统计男性员工和女性员工的平均年龄
SELECT gender,AVG(age) FROM emp GROUP BY gender;
# 3.查询年龄小于45的员工,并根据工作地址分组,获取员工数量大于等于3的工作地址
SELECT workaddress,COUNT(*) AS c FROM emp WHERE age<45 GROUP BY workaddress HAVING c>=3;
5、排序查询
1、语法
select 字段列表 from 表名 order by 字段1 排序方式1,字段2 排序方式2;
2、排序方式
- ASC:升序(默认值)
- DESC:降序
注意:如果是多字段排序,当地一个字段值相同时,才会根据第二个字段进行排序
3、代码演示:
# 五、排序查询
# 1.根据年龄对公司的员工进行升序排序
SELECT * FROM emp ORDER BY age ASC;
# 2.根据入职时间,对员工进行降序排序
SELECT * FROM emp ORDER BY entrydate DESC;
# 3.根据年龄对公司的员工进行升序排序,年龄相同,再按照入职时间进行降序排序
SELECT * FROM emp ORDER BY age ASC,entrydate DESC;
6、分页查询
1、语法
select 字段列表 from 表名 limit 起始索引,查询记录数;
2、注意:
- 起始索引从0开始,起始索引=(查询页码-1)*每页显示记录数。
- 分页查询是数据库的方言,不同的数据库有不同的实现,MySQL是LIMIT。
- 如果查询的是第一页数据,起始索引可以省略,直接简写为limit 10。
3、代码演示:
# 六、分页查询
# 1.查询第一页员工数据,每页展示10条记录
SELECT * FROM emp LIMIT 10;
# 2.查询第二页员工数据,每页展示10条记录
SELECT * FROM emp LIMIT 10,10;
7、案例练习
# 七、DQL语句练习
# 1.查询年龄为20,21,22,23岁的女性员工信息(两种写法)
SELECT * FROM emp WHERE gender='女' AND age=20 OR age=21 OR age=22 OR age=23;
SELECT * FROM emp WHERE gender='女' AND age IN (20,21,22,23);
# 2.查询性别为男,并且年龄在20~40岁以内的姓名为三个字的员工(两种写法)
SELECT*FROM emp WHERE gender='男' AND age BETWEEN 20 AND 40 AND NAME LIKE'___';
SELECT*FROM emp WHERE gender='男' AND age >=20 AND age<=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,entrydate DESC;
# 5.查询性别为男,且年龄在20~40岁(包含)以内的前五个员工信息,对查询的结果按照年龄升序排序,年龄相同按照入职时间升序排序
SELECT*FROM emp WHERE gender='男' AND age>=20 AND age<=40 ORDER BY age ASC,entrydate ASC LIMIT 5;
8、执行顺序