SQL子查询

1.什么是子查询

        当select语句中嵌套一个select语句时,被嵌套的select语句就是子查询,它可以出现在不同的位置:

select

        ...(select ...)...

from

        ...(select ...)...

where

        ...(select ...)...

        为了实例说明,创建三个表:dept、emp和salgrade,分别存储部门信息、员工信息和薪资等级。

2.where语句中嵌套select语句

        情景一:我们希望查询员工中高于平均薪资水平的员工信息。

        为此,一种很常见的思路是:

        但是这种写法是错误的,其原因在于avg函数本应该在where语句之后执行,但我们把avg放在where语句中了,因此会报错。

        解决办法是在where语句中嵌套一个select语句,先找到平均薪水,即让avg这个函数先执行,再执行where语句。此时,就可以正常输出员工中高于平均薪资水平的员工信息了。

   

3.from语句中嵌套select语句

        情景二:我们希望找到每个部门平均薪资的薪资等级。

        为此,我们首先需要找到每个部门的平均工资(即按照部门编号将平均薪资分别展示出来):SELECT deptno,avg(sal) AS avgsal FROM emp GROUP BY deptno;然后,我们可以将上面得到的结果作为一张新的表t,和薪资等级表s进行连接查询,即:SELECT t.deptno, t.avgsal, s.grade FROM t JOIN s ON t.avgsal BETWEEN s.losal AND s.hisal.综上,我们将两步骤合二为一,即得代码如下:

4.select语句中嵌套select语句

        情景三:我们希望找到每个员工所在的部门名,要求显示员工名和部门名。

        为此,我们可以首先先找到部门名:SELECT deptno, dname FROM dept;然后再嵌套查询,将部门名和员工名放一起:

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值