标签:
oracle部分整理
一、子查询
查询的注意地方
1. 括号
2. 合理的书写风格
3. 可以在主查询的where select having from后面都可以放置子查询
4. 不可以在group by放置子查询
5. 强调from后面的子查询
6. 主查询和子查询可以不是同一张表;只要子查询返回的结果主查询可以使用 即可
7. 一般不在子查询中排序;但在top-n分析问题中,必须对子查询排序
8. 一般先执行子查询,再执行主查询;但相关子查询例外
9. 单行子查询只能使用单行操作符;多行子查询只能使用多行操作符
10. 子查询中null(参考http://www.cnblogs.com/lulu638/p/4498098.html)
SQL> --6. 主查询和子查询可以不是同一张表;只要子查询返回的结果主查询可以使用 即可 SQL> --查询部门名称是SALES的员工 SQL> select * 2 from emp 3 where deptno=(select deptno 4 from dept 5 where dname=‘SALES‘); SQL> --SQL优化原则: 理论上,尽量使用多表查询 SQL> host cls
SQL> --in 在集合中 SQL> --查询部门名称是SALES和ACCOUNTING的员工 SQL> select * 2 from emp 3 where deptno in (select deptno from dept where dname=‘SALES‘ or dname=‘ACCOUNTING‘);
SQL> --any:和集合中的任意一个值比较 SQL> --查询工资比30号部门任意一个员工高的员工信息 SQL> select * 2 from emp 3 where sal > any (select sal from emp where deptno=30);
SQL> --all: 和集合中的所有值比较 SQL> --查询工资比30号部门所有员工高的员工信息 SQL> select * 2 from emp 3 where sal > all (select sal from emp where deptno=30);
分页的例子:
--第5-8条记录 select * from (select rownum r,e1.* from (select * from emp order by sal) e1 where rownum <=8 ) where r >=5;
相关子查询:
需求:员工表中薪水大于本部门平均薪水的员工
SQL> --相关子查询: 将主查询中的值作为参数传递给子查询 SQL> select empno,ename,sal,(select avg(sal) from emp where deptno=e.deptno) avgsal 2 from emp e 3 where sal > (select avg(sal) from emp where deptno=e.deptno);
sql类型
SQL的类型:
1. DML(Data Manipulation Language 数据操作语言): select insert updete delete
2. DDL(Data Definition Language 数据定义语言): create table,drop table,truncate table
create/drop view,sequence,index,synonym(同义词)
3. DCL(Data Control Language 数据控制语言): grant(授权) revoke(撤销权限)
海量拷贝数据(移动数据)
1. 数据泵(导出 导入 拷贝): PLSQL程序
2. SQL*Loader SQL>
3. 外部表(external table)
delete和truncate的区别:
1. delete逐条删除;truncate先摧毁表,再重建
2.(根本)delete是DML(可以回滚) truncate是DDL(不可以回滚)
3. delete不会释放空间 truncate会 (原因:undo表空间 undo数据)
4. delete会产生碎片 truncate不会
5. delete可以闪回(flashback) truncate不可以
Oracle中事务的标志
1. 起始标志: 事务中第一条DML语句
2. 结束标志: 提交: 显式 commit
隐式 正常退出exit
回滚 显式 rollback
隐式 非正常退出,掉电,宕机
数据库对象
标签:
原文地址:http://www.cnblogs.com/lulu638/p/4498374.html