集合运算与处理数据

集合运算

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;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值