日期:2014-05-16  浏览次数:20404 次

oracle笔记(六)子查询

子查询

1、一般用户登录报错shared memory realm does not exist解决问题办法,以系统管理员登录,键入startup open。

2、子查询:

? ? ? 1)解决的问题:不能一步求解的时候,就可以考虑用子查询。

? ? ? ?2)注意的问题:

? ? ? ? ? ? a.将子查询放在括号中;

? ? ? ? ? ? b.采用合理的书写习惯;

? ? ? ? ? ? c.可以在主查询的where、select、from、having放子查询,但是不可以放在group by后面放子查询;

? ? ? ? ? ? d.当子查询放在from后面时,把子查询结果看成一张表。

? ? ? ? ? ? e.主查询与子查询可以不是同一张表,只要子查询返回的结果,主查询可以使用。

? ? ? ? ? ? f.一般不在子查询中使用order by,但在Top-n问题分析中,必须使用order by。

? ? ? ? ? ? g.一般情况,先执行子查询,再执行主查询,但是相关子查询除外。

? ? ? ? ? ? h.子查询分为单行子查询和多行子查询,单行子查询只能使用单行操作符,多行子查询只能使用多行操作符。

? ? ? ? ? ? i.子查询中的null值问题。

? ? ? ? ? ? j.select后面的子查询必须是单行子查询。单行子查询:子查询只返回一条记录。

? ? ? ? ? ? k.子查询可以嵌套使用。

3、如果子查询和多表查询都可以解决问题,理论上应该尽量使用多表查询。

4、多行子查询中的null值问题。子查询中含有null,不能使用not in操作符。

5、集合运算操作符union/union all、intersect、minus

? ? ? ? 1)注意问题:a.参与运算的集合必须列数相同且类型一致。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?b.采用第一个集合的表头作为最后的表头。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?c.如果要排序,必须在每个集合后使用相同的order by。

? ? ? ? ? ? ? ? ? ? ? ? ? ? ?d.可以使用括号改变运算顺序。

6、打开SQL语句执行时间命令set timing on。

7、rownum(伪列)行号永远安装默认的顺序生成,行号只能使用<,<=这样的,不能使用>,>= ?

8、相关子查询: select empno,ename,sal,(select avg(sal) from emp where deptno=e.deptno) avgsal from emp e where sal>(select avg(sal) from emp where deptno=d.deptno);找到员工表中薪水大于本部门平均薪水的员工。把主查询中的某个参数传递给了子查询。

9、wm_concat()行转列函数。