同事问我MySQL子查询为什么失败,我告诉他子查询结果当成派生表千万记得加别名...

本文详细介绍了SQL中的子查询概念,包括子查询作为单值、多行单列和多行多列结果的应用。通过实例展示了如何利用子查询进行条件筛选、IN运算符的使用以及子查询作为派生表的联合查询。子查询在SQL查询中的重要作用在于提供嵌套查询的能力,以实现更复杂的查询逻辑。
摘要由CSDN通过智能技术生成

前文铺垫一些基础知识,老鸟直接拉到文末看原因!

什么是子查询

  1. 一个查询的结果做为另一个查询的条件
  2. 有查询的嵌套,内部的查询称为子查询
  3. 子查询要使用括号

子查询的结果是一个值的时候

示例:SELECT 查询字段 FROM 表 WHERE 字段=(子查询);

案例:查询工资最高的员工是谁?

-- 查询员工工资的最大值
select max(salary) from emp;

-- 查询领最多工资的员工信息
select * from emp where salary = (select max(salary) from emp);

这个案例中select max(salary) from emp; 就是子查询的语句,它查到的最高工资作为select * from emp where salary = (select max(salary) from emp);的查询条件。

子查询结果是多行单列的时候

  • 子查询结果是单例多行,结果集类似于一个数组,父查询使用 IN 运算符
  • 示例:SELECT 查询字段 FROM 表 WHERE 字段 IN (子查询)

案例:查询工资大于5000的员工,对应的部门名称

-- 查询大于5000的员工所在的部门id
select dept_id from emp where salary > 5000;

-- 根据部门id查询部门名字
select name from dept where dept_id in (select dept_id from emp where salary > 5000);

这个案例中select dept_id from emp where salary > 5000;是自查询语句,查询结果是多个值(多行单列),因此使用子查询时要用in关键字。查询结果作为select name from dept where dept_id in (select dept_id from emp where salary > 5000);的查询条件。

子查询的结果是多行多列

  • 子查询结果只要是多列,肯定在 FROM 后面作为表
  • SELECT 查询字段 FROM (子查询) 表别名 WHERE 条件
  • 子查询作为表需要取别名,否则这张表没有名称则无法访问表中的字段 (这个相当重要,不加的话sql是运行不了的)

案例:查询出2023年以后入职的员工信息,包括部门名称

-- 在员工表中查询2023-1-1以后入职的员工
select * from emp wherec join_date >= '2023-1-1';

-- 查询所有的部门信息,与上面的虚拟表中的信息组合,找出所有部门id等于的dept_id
select * from dept d, (select * from emp wherec join_date >= '2023-1-1') e where d.dept_id = e.dept_id;

上述例子中select * from emp wherec join_date >= ‘2023-1-1’;的查询结果被当作派生表,用到了select * from dept d, (select * from emp wherec join_date >= ‘2023-1-1’) e where d.dept_id = e.dept_id;这个语句中。此时可以看到我为select * from emp wherec join_date >= ‘2023-1-1’;取了一个别名为e,这个时候sql就不会报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jayden 

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值