关于mysql子查询学习总结

目录

前言

一、嵌套子查询

1.标量子查询:查询结果是单个的值(一行一列)

2.行子查询:返回一条记录(一行多列)

3.表子查询:返回一个临时表(多行多列)

二、in,all,any运算符

三,派生表/临时表(from子句中的子查询)

例1:查询每个部门的员工人数

四.关联子查询

例1:查询每个部门的人数

例2:查询每个部门员工的入职时间

例3:查询各部门高于平均薪资的的员工信息

 五,横向子查询

总结


前言

子查询还是比较重要的一个知识点,但是我原先只知道子查询是先基于原表查出一个表,再基于查出的表格继续查询,但很多时候这样套娃没法一次性找出想要的数据。其实还有横向字查询,关联子查询不同的用法,应该会让子查询变得更加灵活一点。

参考b站MySQL编程思想视频


提示:以下是本篇文章正文内容,下面案例可供参考

一、嵌套子查询

出现在某查询语句中的查询语句。

1.标量子查询:查询结果是单个的值(一行一列)

select *
from employee.e
where salary>(select avg(salary)
              from employee)

2.行子查询:返回一条记录(一行多列)

select *
from employee.e
where (dept_id,job_id)=(select dept_id,job_id
                        from employee
                        ....)  
#以上用法不是很常用,但是正确     

3.表子查询:返回一个临时表(多行多列)

二、in,all,any运算符

select *
from employee.e
where job_id=(select job_id
             from employee
             where dept_id=2)
#这里的子查询返回的是一列数据,但是=后面一般跟一个标量,所以以上代码错误
select *
from employee.e
where job_id in (select job_id
                from employee
                where dept_id=2)
#换做in就ok
select *
from employee.e
where salary >all (select salary
                  from employee
                  where dept_id=2)
#一对多的情况下,用比较运算符加上all也成立,表示比子查询里的的salary都大,相当于以下代码
select *
from employee.e
where salary > (select max(salary)
                from employee
                where dept_id=2)
select *
from employee.e
where salary >any (select sala
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值