目录
一、函数
函数:执行特定功能的一段代码块
1. 单行函数:
(1) 单行函数:只要有一条数据,执行一次,同时会产生一个对应结果
注意:单行函数作用在每条数据上,有几条数据,就执行几次
(2) -- 查询每个员工的 名的长度
select employee_id,first_name,length(first_name) from employees
-- 查询当前系统时间
select now() from dual
(3) 常见的单行函数:
length('字符串')/length(字段名) 获取字符串长度
now():获取当前系统时间
2、组函数:
(1) 组函数:作用在提前分好的一组数据上,只要有一个小组数据,则组组函数就执行一次
(2) 常见组函数:
sum(列名) :对指定列进行求和
avg(列名): 对指定列进行求平均
min(列名):对指定列求最小值
max(列名):对指定列求最大值
注意:如果使用组函数时,没有对表中数据进行分组,则整张表默认为一个小组
-- 查询员工表中最高工资
select max(salary) from employees
-- 查询员工表中的平均工资
select avg(salary) from employees
注意:这四个组函数在计算时,会忽略null值(null处理为0)
(3) 组函数:count(列名)
a. 作用:对查询结果中指定字段/列不为空数据进行统计(数据结果不为null)
b. 案例:
-- 查询员工表中的员工的人数
select count(employee_id) from employees
-- 查询 员工表中 有提成的员工的人数
select count(commission_pct) from employees
c. 统计数据产生条数:count(*)
select count(*) from 表名
注意:以上组函数可以应用在 having过滤中,但是不能使用在 where过滤条件中
二、分组 group by
1. 语法:
select 字段名1,字段名2 from 表名 where 过滤条件 group by 分组的依据 order by 排序规则
--> select ... from ... group by 分组的依据
2、案例
![1fd5ba71a1cb453bbea63971ce13defa.png](https://i-blog.csdnimg.cn/blog_migrate/1048f4a91fd4a6f052800ea7e741bbb1.png)
3、having:
(1) 语法:
select... from... where 对分组之前数据过滤
group by ... having 对分组之后的数据过滤 order by...
(2) 作用:having对分组之后的数据进行过滤,作用在 group by的后面
(3) 注意:在having 中可以使用组函数
(4) 案例:
![1491e64cd68c41ceb0cd307632ff887f.png](https://i-blog.csdnimg.cn/blog_migrate/f775dafe7797c9de7c0de20d2246ea75.png)
(5) where和having的区别
a. where 对分组之前的数据进行过滤 having对分组之后的数据进行过滤
b. having中可以使用组函数 where中不能使用组函数
c. 如果 进行过滤时,where和having过滤都可以时,建议使用where过滤,提高效率
d. 只有对分组之后的结果进行过滤时,才使用having
(6)目前语法
select...from..where.. group by..having..order by
执行顺序:
from:确定数据的来源
where:对原始数据进行过滤,符合条件的留下
group by:根据需求进行分组
having:对分组之后的结果进行过滤
select:确定查询内容
order by:根据指定的字段及规则进行排序
三、子查询
1. 子查询:在一个查询语句执行过程中,使用了另一个查询语句的结果
(1) 子查询:简单理解为在一个select语句中嵌套另一个select语句
(2) 定义在外面的 select称为主查询 ,定义在里面的 select称为子查询
2. 第一种情况:子查询的结果为单个值(一行一列)
(1) 如果子查询的结果为单个数值,可以直接将子查询的结果作为主查询的过滤条件
(2) 案例:
![0bee755acae74d389bb54ca9447a5bf7.png](https://i-blog.csdnimg.cn/blog_migrate/e3da30661ee3bc66285b5ae9012865a1.png)
3. 第二种情况:子查询的结果为 N行1列
(1) 如果子查询结果为多行1列时,可以将结果直接参与主查询的 in运算(枚举运算)
(2) 案例:
![b39e393a810a458e83e3d838e2ea6804.png](https://i-blog.csdnimg.cn/blog_migrate/8e8b324aec3ef61d48f0349601f28960.png)
四、分页查询
1. 应用场景:将数据库中查询的结果按照 每页显示的条数进行查询(起始条数)
2. 语法:
select...from 表名 where...group by..having..order by... limit m,n
参数说明:
m:代表查询的起始条数,默认为查询的结果进行编号,编号从0开始
n:代表 查询的条数
3.案例:
![6457148508de4d4cba157c36c485aaa2.png](https://i-blog.csdnimg.cn/blog_migrate/8a7bab1c9e617b438f370c17c677311a.png)