MySQL查询进阶——从函数到表连接的使用你还记得吗_mysql 熟悉吗 用过子函数表连接哪些吗 (3)

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
img
img

如果你需要这些资料,可以戳这里获取

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 特点:每行数据都会产生一个对应的结果
    • 表中有多少行,就会有多少行的结果
  • 位置:select之后,from之前 或作为筛选条件
  1. concat(…,列名,…,列名)
    用来拼接多列的值

    • 例如:以firstname+lastname的形式显示所有员工的姓名
      select concat(first_name,last_name) as 全名 from employees
  2. mod(值1,值2)
    求值1和值2的取余结果 ,相当于数学运算中的 %(值1%值2)

    • 标准SQL规范中不存在%取余的写法,所以取余操作应该使用mod()
    • 例如:select mod(10,3) from dual
      注: dual虚拟表,作用为使当前SQL符合语法规范,不写时会做自动填充
  3. length(列名|数据)
    获取长度

    • 查询所有firstname长度>6的员工信息
      select * from employees where length(first_name)>6
  4. now() | sysdate()
    获取系统当前时间

    • select now()
      select SYSDATE()
      select now() from dual

2、多行函数(组函数)

  • 以组为单位获取结果,一组得到一个结果
  • 如果未手动进行分组,则默认整张表为一组
  1. sum(列名)
    • 求某一列的总和
  2. avg(列名)
    • 求某一列的平均值
  3. max(列名)
    • 求某一列的最大值
  4. min(列名)
    • 求某一列的最小值
  5. 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中一个组就是一个操作单位
  1. 简单分组
    select 列名 from 表名 group by 列名
    • 以部门为单位求每个部门的平均薪资
      select department_id,AVG(salary) 平均薪资 from employees group by department_id
  2. where + 分组
-- 查询部门id为10、20、30的部门的平均薪资、
select department_id,AVG(salary) 平均薪资 
from employees
where department_id in(10,20,30) -- 先筛选
GROUP BY department_id -- 后分组查询

  1. having + 分组
select department_id,AVG(salary) 平均薪资 
from employees
group by department_id -- 先分组
having department_id in(10,20,30)  -- 后筛选

  1. 分组中 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. 多张表之间必须存在关联关系(外键)
  2. 外键通常连接的是另一张表的主键
  3. 在进行表连接时作为连接条件使用

1、内连接

语法:

select 表1.列名,表2.列名,... 
from 表1 inner join 表2
on 连接条件

  • 特点:对两张表同时进行约束,只有当所有表都符合连接条件,才会显示信息
  • 使用:inner可省

2、(左)外连接

语法:

收集整理了一份《2024年最新物联网嵌入式全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升的朋友。
img
img

如果你需要这些资料,可以戳这里获取

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

[外链图片转存中…(img-2g9gxGSE-1715891067473)]

如果你需要这些资料,可以戳这里获取

需要这些体系化资料的朋友,可以加我V获取:vip1024c (备注嵌入式)

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人

都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 21
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值