-
now() | sysdate()
获取系统当前时间- select now()
select SYSDATE()
select now() from dual
- select now()
2、多行函数(组函数)
- 以组为单位获取结果,一组得到一个结果
- 如果未手动进行分组,则默认整张表为一组
- sum(列名)
- 求某一列的总和
- avg(列名)
- 求某一列的平均值
- max(列名)
- 求某一列的最大值
- min(列名)
- 求某一列的最小值
- count(列名)
- 求某一列值的个数(非空)
示例:
-- 组函数操作salary
select
SUM(salary) 总和,AVG(salary) 平均值,MAX(salary) 最大值,min(salary) 最小值,COUNT(salary) 非空值的数量
from employees
-- 计算表中绩效列不为空的员工数量
select COUNT(commission_pct) from employees
-- 求表中的行数
select COUNT(\*) from employees
select COUNT(employee_id) from employees
二、MySQL的分组
- 在MySQL中一个组就是一个操作单位
- 简单分组
select 列名 from 表名 group by 列名
- 以部门为单位求每个部门的平均薪资
select department_id,AVG(salary) 平均薪资 from employees group by department_id
- 以部门为单位求每个部门的平均薪资
- where + 分组
-- 查询部门id为10、20、30的部门的平均薪资、
select department_id,AVG(salary) 平均薪资
from employees
where department_id in(10,20,30) -- 先筛选
GROUP BY department_id -- 后分组查询
- having + 分组
select department_id,AVG(salary) 平均薪资
from employees
group by department_id -- 先分组
having department_id in(10,20,30) -- 后筛选
- 分组中 where 和 having 的区别
- where是在分组前执行,having是在分组后执行
- where不能在分组时使用组函数,但是having可以
- 当两者都可使用时,优先使用
where
,效率更高
三、分页以及查询关键字的执行顺序
-
limit:用来限制显示的查询结果条数,通常用于分页查询
select 列名 from 表名 limit 显示的起始下标,显示条数
- 查询所有员工数据的前十条
select * from employees limit 0,10
select * from employees limit 10
下标为0时可以省略
- 查询所有员工数据的前十条
-
当limit和其他查询关键字联用时,limit一定最后执行
查询的执行顺序:
语法顺序 执行顺序
select 5
from 1
where 2
group by 3
having 4
order by 6
limit 7
四、子查询
- 当一个SQL需要借助于另一个SQL的执行结果,在当前SQL中嵌套另一个SQL,该写法称为子查询
1、where子查询
1.1、单值子查询
- 嵌套的子SQL只会返回一行一列的结果
-- 查询员工id为100的员工的部门id
select department_id from employees where employee_id=100
-- 子查询::查询员工id为100的员工所在的部门信息
select \* from departments
where department_id=(select department_id from employees where employee_id=100)
- 优先执行内层SQL,再执行外层SQL
- 子SQL需写入小括号
1.2、多值子查询
- 嵌套的子SQL会返回多个结果
--查询firstname中包含s的员工所在的部门信息
select \* from departments
where department_id in(select department_id from employees where first_name like '%s%')
2、from子查询
- 将子SQL的查询结果临时看做一张表进行后续操作
-- 获取薪资最高的前十个员工的平均薪资
-- 先获取薪资最高的前十名员工的薪资
select salary from employees ORDER BY salary desc LIMIT 10
-- 子查询:再根据子SQL的查询结果临时通过别名构建一张数据表进行查询
select avg(salary) from (select salary from employees ORDER BY salary desc LIMIT 10) as e
五、表连接
- 当查询结果需要从多张表中获取时,则需要将多张表连接起来进行查新操作
表连接的前提:
- 多张表之间必须存在关联关系(外键)
- 外键通常连接的是另一张表的主键
- 在进行表连接时作为连接条件使用
1、内连接
语法:
select 表1.列名,表2.列名,...
from 表1 inner join 表2
on 连接条件
- 特点:对两张表同时进行约束,只有当所有表都符合连接条件,才会显示信息
- 使用:
inner
可省
2、(左)外连接
语法:
select 表1.列名,表2.列名,...
from 表1(左表) left outer join 表2(右表)
on 连接条件
- 特点:只对右表做约束,左表中的数据都会显示,右表中只有符合连接条件的才会显示
- 使用:
outer
可省 - 左外连接和右外连接就是
left
和right
的不同,位置不同,通常用左外连接 - 使用:
-- 查询所有的员工信息及符合连接条件的部门信息
select e.\*,d.\*
from employees e LEFT JOIN departments d
ON e.department_id=d.department_id
全外连接:
- 将两个查询结果进行合并显示
笔者福利
以下是小编自己针对马上即将到来的金九银十准备的一套“面试宝典”,不管是技术还是HR的问题都有针对性的回答。
有了这个,面试踩雷?不存在的!
回馈粉丝,诚意满满!!!
金九银十准备的一套“面试宝典”,不管是技术还是HR的问题都有针对性的回答。
有了这个,面试踩雷?不存在的!
回馈粉丝,诚意满满!!!
[外链图片转存中…(img-EmCWFpw1-1714427032110)]
[外链图片转存中…(img-bLHytZuA-1714427032111)]
[外链图片转存中…(img-mo8JXiDy-1714427032111)]
[外链图片转存中…(img-LtiqpwtZ-1714427032111)]