C/C++教程

1.7 Oracle数据库学习教程-集合运算&数据处理

本文主要是介绍1.7 Oracle数据库学习教程-集合运算&数据处理,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Oracle数据库学习教程

集合运算&数据处理

集合运算

问题:查询部门号10和20的员工的信息:

  1. select * from emp where deptno in(10,20);
  2. select * from emp where deptno = 10 or deptno = 20;
  3. 集合运算

集合运算的对象是两个集合
常用的有: \(A \bigcap B\),\(A \bigcup B\),\(A-B\)等

  • 并集:union/union all
  • 交集:intersect
  • 差集:minus

上面的问题改写为集合运算版本:

    select * from emp where deptno = 10
    union
    select * from emp where deptno = 20;

20211007140614

注意事项:

  1. 参与运算的各个集合必须列数相同,类型一致
  2. 表头采用第一个集合的
  3. 会先执行带()的语句

数据处理

0. SQL语言类型

  1. DML语句(数据操作语言): insert,update,delete,select
  2. DDL语句(数据定义语言): create table,create view(视图),create index(索引),create sequence(序列)
  3. DCL语句(数据控制语言):grant(赋权),revoke(回收权限)

1. 插入数据insert

insert into table[列1..] values (值1...);
如:

insert into emp values (1001,'TOM','Engineer',7839, sysdate,5000,200,10);

insert into emp(empno, ename, sal, deptno) values(1002, 'Marry', 6000, 20);

1. &地址符:
SQL> insert into emp(empno, ename, sal, deptno) values(&empno, &ename, &sal, &deptno);
加上&符号,下次输入/号就可以继续赋值了,&后面的可以任意写,一般和前面相同

2. 批处理:

先创一张相同结构的表,不要有数据(where 假):
create table emp10 as select * from emp where 1=2;

然后插入一批数据:
insert into emp10 select * from emp where deptno=10 ;

20211007143103

2. 更新数据

更新操作一般会使用where来改一部分数据

update emp10 set sal=4000, comm=300 where ename = 'CLARK'; ( 或 where empno=7782; )
20211007143310

删除数据delete

delete from emp10 where empno=7782;(或ename= 'KING');

注意:“from”关键字在Oracle中可以省略不写,但MySQL中不可以。

delete和truncate的区别:

  1. delete是删除一条数据,而truncate是先摧毁表再重建.
  2. delete性能更优.
  3. delete不会释放空间,truncate会释放空间
  4. delete可以回滚,truncate不能回滚.
  5. delete会产生碎片,truncate不会.

事务

数据库事务,是由有限的数据库操作序列组成的逻辑执行单元,这一系列操作要么全部执行,要么全部放弃执行。
要么都成功,要么都失败.

比如银行转帐,A转1000给B:1.A-1000,2.B+1000.这两步要捆绑一起.
成功了就commit提交,失败了就rollback回滚

事务的特性:
事务4大特性(ACID) :原子性、一致性、隔离性、持久性。

事务的起始标志:Oracle中自动开启事务,以DML语句为开启标志。
执行一个增删改查语句,只要没有提交commit和回滚rollback,操作都在一个事务中。

事务的结束标志:提交、回滚都是事务的结束标志。
提交:

  • 显示提交:commit
  • 隐式提交:
    • 有DDL语句,如:create table除了创建表之外还会隐式提交Create之前所有没有提交的DML语句。
    • 正常退出(exit / quit)

回滚:

  • 显示回滚:rollback
  • 隐式回滚:掉电、宕机、非正常退出。

还可以增加保存点(savepoint),相当于存档.可以使用rollback回滚到指定的保存点.

20211007154558

隔离级别:

对于同时运行的多个事务, 当这些事务访问数据库中相同的数据时, 如果没有采取必要的隔离机制, 就会导致各种并发问题:

  • 脏读: 对于两个事物 T1, T2, T1 读取了已经被 T2 更新但还没有被提交的字段. 之后, 若 T2 回滚, T1读取的内容就是临时且无效的.
  • 不可重复读: 对于两个事物 T1, T2, T1 读取了一个字段, 然后 T2 更新了该字段. 之后, T1再次读取同一个字段, 值就不同了.
  • 幻读: 对于两个事物 T1, T2, T1 从一个表中读取了一个字段, 然后 T2 在该表中插入了一些新的行. 之后, 如果 T1 再次读取同一个表, 就会多出几行.

20211007153714

Oracle支持的隔离级别: Read Commited(默认)和 Serializable,以及Oracle自定义的Read Only三种。
Read Only:由于大多数情况下,在事务操作的过程中,不希望别人也来操作,但是如果将别人的隔离级别设置为Serializable(串行),但是单线程会导致数据库的性能太差。是应该允许别人来进行read操作的。

mysql支持以上四种, Oracle默认读已提交数据,mysql默认可重复读。

这篇关于1.7 Oracle数据库学习教程-集合运算&数据处理的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!