关于子查询

1、什么是子查询:

                select语句中嵌套select语句,被嵌套的select语句称为子查询。

2、子查询都可以出现在什么地方:

            select

                      ..(select)        #子查询可以出在select后面

            from

                     ..(select)        #子查询可以出在from后面

            where

                      ..(select)        #子查询可以出在where后面

            group by

                      ...

            having

                      ..(select)          #子查询可以出在having后面

            order by

                     ...

            limit

                      …

3、where子句中的子查询:(子查询可以出现在where后面)

         案例:

                需求:找出比平均薪资高的员工姓名及工资

                分析:select ename,sal from emp where agv(sal);  #这种写法是错误的,因为分组函数不能出现在where后面

                上面的写法不行,我们尝试分步完成任务

                第一步:查询平均薪资

                select avg(sal) from emp;

                         

                第二步:根据上一步的查询结果进行条件过滤

                select ename,sal from emp where sal > 2073.214286;

                                 

                思考:能不能把上面两步合并呢?(答:能 。合并后就是我们所说的子查询

                select ename,sal from emp where sal > (select avg(sal) from emp);

                         

4、from子句中的子查询:(子查询可以出现在from子句中)

        案例:找出每个部门平均薪水的等级。

                第一步:查出每个部门的平均薪资

                select deptno,avg(sal) avgsal from emp group by deptno;

                         

                第二步:以上一步的查询结果作为临时表t与表salgrade as s进行连接查询,就可以得到想要的结果。

                select

                        t.deptno,t.avgsal,s.grade

                from

                        (select deptno,avg(sal) avgsal from emp group by deptno) t

                join

                        salgrade s

                on

                        t.avgsal between losal and hisal;

                        

5、select 后面出现的子查询(了解内容,我们知道这里允许出现子查询就可以了,这样的方式使用不多)

6、having子句中的子查询(子查询可以出现在having子句中)

        案例:查询部门平均工资高于公司平均工资的部门

                select

                        deptno,avg(sal)

                from

                        emp

                group by

                        deptno

                having

                        avg(sal) > (select avg(sal) from emp);

                                

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值