集合运算
UNION/UNIONALL 并集 :
UNION运算符返回两个集合去掉重复元素后的所有记录。
UNION ALL 返回两个集合的所有记录,包括重复的
INTERSECT交集
INTERSECT 运算符返回同时属于两个集合的记录
例:显示薪水同时位于级别1(700~1300)和级别2(1201~1400)的员工信息。(取交集)
select ename,sal from emp where sal between 700 and1300
INTERSECT
select ename,sal from emp where sal between 1201 and1400;
MINUS 差集
MINUS返回属于第一个集合,但不属于第二个集合的记录。
例:显示薪水同时位于级别1(700~1300),但不属于级别2(1201~1400)的员工信息
select ename,sal from emp where sal between 700 and1300
MINUS
select ename,sal from emp where sal between 1201 and1400;
注意的问题
1. 参与运算的各个集合必须列数相同 且类型一致
例:selectdeptno,job,sum(sal) from emp group by deptno,job
union
select deptno,to_char(null),sum(sal)from emp group by deptno
union
selectto_number(null),to_char(null),sum(sal) from emp;
红色为补的空字符串与数字,为了保证列数相同
相当于selectdeptno,job,sum(sal) from emp group by rollup(deptno,job);
sql优化中采用rollup方式更快一些。
测试方式:settiming on(开启sql执行时间)
2. 采用第一个集合的表头作为最后的表头(如果要起别名在第一个语句中起)
3. 必须在每个集合后 使用相同的order by
4. 括号
处理数据
sql语言的类型
1. DML语句(DataManipulation Language 数据操作语言): insert update delete select
2. DDL语句(DataDifinition Language 数据定义语言): create table
create view/index/sequence/synonym
truncate table
3. DCL语句(DataControl Language 数据控制语句): commit rollback;
插入操作 insert
例:insertinto emp values(1001,'Tom','Engineer',7839, sysdate,5000,100,10);
隐式插入空值
inser into emp(empno,ename,sal,deptno)values(1002,'Mary',6000,20);(没写出来的列默认插入null)
显式插入空值
inser into emp(empno,ename,sal,deptno)values(1002,'Mary',6000,null);(直接写出插入null)
地址符 &
相当于preparestatment对象,用于预编译sql
例:SQL> insert intoemp(empno,ename,sal,deptno) values(&empno,&ename,&sal,&deptno);
输入 empno 的值: 1003
输入 ename 的值: 'Mike'
输入 sal 的值: 4000
输入 deptno 的值: 20
原值 1: insert intoemp(empno,ename,sal,deptno) values(&empno,&ename,&sal,&deptno)
新值 1: insert intoemp(empno,ename,sal,deptno) values(1003,'Mike',4000,20)
查询中使用
SQL> selectename,sal,&t
2 fromemp;
输入 t 的值: job
原值 1:select ename,sal,&t
新值 1:select ename,sal,job
批量插入
例:一次性将emp中所有10号部门的员工插入到emp10
insert into emp10select * from emp where deptno=10;
delete和truncate 的区别
1.delete逐条删除 truncate 先摧毁表再重建
2.delete 是DML,truncate 是DDL
DML可以闪回 DDL不可以闪回(flashback)
3.delete会产生碎片;truncate不会
4.delete不会释放空间 truncate会
5.delete 可以回滚 truncate 不可以
Oracle中的事务
1. 事务起始标志: DML语句
2. 事务结束标志: 提交: 显式 commit
隐式 DDL 正常退出(exit)
回滚: 显式rollback
隐式 掉电 宕机 非正常退出
设置保存点
可以指定保存点后,不全部回滚
设置方式: savepointa (设置保存点a)
注:set feedback on(加上操作后的反馈)
使用保存点:rollbackto savepoint a;