Oracle学习_3 sql子查询,自连接,单行select总结

本文详细介绍了SQL查询语句的应用技巧,包括单条SELECT语句的使用方法、子查询及自连接的具体操作,并通过实例展示了如何找出部门内薪资最高者等复杂需求。

单条Select语句要点总结:

Select avg(sal) From emp Where sal > 1200 Group by deptno //按照部门编号分组 Having avg(sal) >1500 //having加限制条件 Order by avg(sal) desc //查询结果升序排列 

子查询:即是在一个查询语句嵌套另一个查询语句。

      例:查询emp表中工资最高的人的姓名

select ename,max(sal) From emp;  

这个查询将报错,因为max(sal)只有一个输出而相对应的ename可能有多个,所以这个查询应该这样写:

Select ename,sal From emp Where sal = (select max(sal) From emp);  

例:查询各个部门薪水最高的人的姓名,薪水,部门号

Select ename,sal,deptno From emp Where sal = (select max(sal) From emp Group by deptno);  

这种写法是错误的,因为单行子查询中返回多个行,所以可能会做出如下修改:

Select ename,sal,deptno From emp Where sal in (select max(sal) From emp Group by deptno);  

这个查询语句没问题,但是它的查询结果是有问题的,原因很简单,它会将每个部门薪水是子查询的3个值的人都选出来,这与我们的要求不相符。正确写法:

Select ename ,sal From emp Join (select max(sal) max_sal,deptno From emp Group by deptno) t //为子查询的查询结果取一个别名 On(emp.sal=t.max_sal and emp.deptno = t.deptno);  

理解子查询的关键可以将子查询看做一张表,然后做连接查询就好

自连接

    只需要为同一张表起一个别名就可以了,即是将一张表当成两张表来用

    例如:查询每一个员工的经理人

Select e1.ename,e2.ename From emp e1,emp e2 Where e1.mgr=e2.empno;  

注:文中所用表为oracle的示例数据库

 

 

 

转载于:https://www.cnblogs.com/springside6/archive/2011/02/23/2525465.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值