星期二, 十月 17, 2006

plsql读书笔记6----合并查询,复杂查询

合并查询

1, UNION,UNION ALL,INTERSECT,MINUS
2,对LOB,VARRAY和嵌套表来说,集合操作符是无效的。
对LONG列来说,UNION,INTERSECT,MINUS操作符是无效的。
如果选择列表包含了表达式,必须为其指定列别名。
3,UNION取得并集,去掉重复行,按第一列排序
UNION ALL 取得并集,不去掉重复行,不排序
INTERSECT取得交集,按第一列排序
MINUS取得差集(存在于第一个表,但是不存在于第二个表),按第一列排序

复杂查询

1,层次查询
START WITH:指定根行
CONNECT BY:父子行之间关系,条件表达式中,使用FRIOR引用父行
col emane format a15
col job format a15
SELECT LPAD('',3*(LEVEL-1))||ename ename,
LPAD('',3*(LEVEL-1))||job job FROM emp
WHERE job<>'CLERK' START WITH mgr IS NULL
CONNECT BY mgr = PRIOR empno;

2,CASE 表达式
CASE
WHEN case1 THEN option1
WHEN case2 THEN option2
ELSE case3
END

3,倒叙查询(Flashback Query)
SELECT * FROM emp AS OF TIMESTAMP to_timestame(
'2003-01-01 19:19:22','YYYY-MM-DD HH24:MI:SS')
WHERE ename = 'tom'

4,WITH子句
WITH summary AS (
SELECT dname,SUM(sal) AS dept_total FROM emp,dept
WHERE emp.deptno = deept.deptno GROUP BY dname)

SELECT dname,dept_total FROM summary WHERE dept_totle>
(SELECT SUM(dept_total)*1/3 FROM summary);

没有评论: