Oracle学习_3 sql子查询,自连接,单行select总结
2011-02-23 09:29
776 查看
单条Select语句要点总结:
子查询:即是在一个查询语句嵌套另一个查询语句。
例:查询emp表中工资最高的人的姓名
这个查询将报错,因为max(sal)只有一个输出而相对应的ename可能有多个,所以这个查询应该这样写:
例:查询各个部门薪水最高的人的姓名,薪水,部门号
这种写法是错误的,因为单行子查询中返回多个行,所以可能会做出如下修改:
这个查询语句没问题,但是它的查询结果是有问题的,原因很简单,它会将每个部门薪水是子查询的3个值的人都选出来,这与我们的要求不相符。正确写法:
理解子查询的关键可以将子查询看做一张表,然后做连接查询就好
自连接
只需要为同一张表起一个别名就可以了,即是将一张表当成两张表来用
例如:查询每一个员工的经理人
注:文中所用表为oracle的示例数据库
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的示例数据库
相关文章推荐
- Oracle学习_3 sql子查询,自连接,单行select总结
- Oracle一些name的连接 学习总结
- 【Oracle学习】之 表的连接查询
- Oracle SQL:select各类查询语句总结
- oracle学习总结-----------多表查询
- oracle简单学习总结(二)——查询
- 06-Oracle学习_练习-子查询 和 连接查询
- Mysql学习总结(25)——MySQL外连接查询
- SQL 学习笔记<三> SELECT之连接查询
- Oracle学习笔记 -- day05 多表查询、连接查询、子查询、分页、行转列、集合运算
- Oracle学习总结(3)——Navicat客户端连接Oracle数据库常见问题汇总
- Oracle学习之路-SQL篇-连接查询
- 05-Oracle学习_子查询 和 连接查询
- Mysql学习总结(8)——MySql基本查询、连接查询、子查询、正则表达查询讲解
- Oracle SQL:select各类查询语句总结
- oracle学习查询总结
- Mysql学习总结(24)——MySQL多表查询合并结果和内连接查询
- Mariadb学习总结(九):多表连接查询
- Mysql学习总结(8)——MySql基本查询、连接查询、子查询、正则表达查询讲解