4.5.5 其他数据操纵语句

在Oracle 11g中除了上面所讲述的INSERT、UPDATE、DELETE、SELECT语句之外,还有MERGE、TRUNCATE、LOCK TABLE等语句。在本小节中再讲述一下比较常用的TRUNCATE语句和MERGE语句的使用。

(1)TRUNCATE语句

TRUNCATE语句和DELETE语句一样都是用来完成删除数据表中数据的,但是二者是有区别的。使用TRUNCATE语句删除表中的记录都是要把表中的记录全部删除,但是TRUNCATE语句删除表中数据的速度要比使用DELETE语句删除表中的数据更快一点。具体语法如下:


TRUNCATE TABLE table_name;


这里,只要指定要删除的表名就可以删除表中的全部记录,它是无条件的删除。下面就使用该语句删除表LOGIN中的记录。具体操作如图4.33所示。

4.5.5 其他数据操纵语句 - 图1

图 4.33 删除表中记录

(2)MERGE语句

MERGE语句与UPDATE语句的功能类似,都是修改数据表中数据的,但是MERGE语句与UPDATE语句也是有区别的。使用MERGE语句可以对数据表同时进行增加和修改的操作。具体语法如下:


MERGE[INTO]table_name1

USING table_name2

ON(condition)

WHEN MATCHED THEN merge_update_clause

WHEN NOT MATCHED THEN merge_insert_clause;


【语法说明】

❑table_name1:要修改或添加的表。

❑table_name2:参照的更新的表。

❑condition:table_name1和table_name2之间的关系,或其他的一些条件。

❑merge_update_clause:如果和参照表table_name2中的条件匹配,就执行更新操作的SQL语句。

❑merge_insert_clause:如果条件不匹配,就执行增加操作的SQL语句。

注意 这里merge_update_clause和merge_insert_clause都是可以省略的,但是在操作时只能省略一个,如果两个语句都省略,那么MERGE语句就失去意义了。

下面就使用MERGE语句完成对LOGIN表的操作。

(1)省略增加的语句

首先分别查询LOGIN与MANAGERINFO表中的全部数据,然后使用MERGE语句进行更新操作。更新的条件是两个表的编号列相同,当满足条件时把LOGIN表中满足条件记录的LOGINNAME列改写成MANAGERINFO表中的LOGINNAME列。具体操作如图4.34所示。

4.5.5 其他数据操纵语句 - 图2

图 4.34 更新LOGIN表

这样,更新操作完成后就可以把LOGIN_ID是1的记录中的LOGINNAME更新为表MANAGERINFO中的LOGINNAME的值"XIAOMING"。

(2)省略修改的语句

首先分别查询LOGIN与MANAGERINFO表中的全部数据,然后使用MERGE语句进行增加操作。增加的条件是两个表的编号列不相同,当满足条件时向LOGIN表中增加一条在MANAGERINFO中存在的数据。具体操作如图4.35所示。

4.5.5 其他数据操纵语句 - 图3

图 4.35 增加数据

这样,就可以看出LOGIN表中已经增加了两条记录,这两条记录编号是原来在LOGIN_ID中不存在的。在实际操作中,可以使用这种方法把数据表中不存在的记录添加到当前的数据表中。

(3)增加和修改同时进行

增加和修改同时进行是指当on后面的条件满足时执行修改的操作,不满足时执行增加的操作。首先也是分别查询LOGIN与MANAGERINFO表中的全部数据,然后使用MERGE语句进行增加和修改的操作。具体操作如图4.36所示。

4.5.5 其他数据操纵语句 - 图4

图 4.36 增加和修改数据

由于在LOGIN中存在的编号是1、2、3;在MANAGERINFO中存在的编号是1、4、5,所以在经过了MERGE操作后,LOGIN中一共存在了5条记录,并且把编号是1的记录的LOGINNAME更改成了MANAGERINFO中的"XIAOMING"。