DML(改变数据结构)
insert语句
表间数据拷贝:
insert into dept1(id,name) select(deptno,dname) from
dept;
update
语句:
将编号为7779用户的工作换成7566的雇员的工作和所属上级。
update
myemp set(job,mgr) = (select job,mgr from myemp where empno=7566)
where empno=7779
如果子查询中返回的是空,则目标字段也更新成null
merge语句:
merge语句是sql语句的一种。在sql
server、Oracle数据库中可用,mysql、PostgreSql中不可用。merger是oracle新增的语法,用来合并update和insert语句。通过merge语句,根据一张表(原数据表)或子查询的连接条件对另一张(目标表)表进行查询,连接条件匹配是上的进行update,无法匹配的执行insert。这个语法仅需一次全表扫描就完成了全部工作,执行效率高于insert+update。
具体来说,merge语句会检查原数据表记录和目标表记录。如果记录在原数据表和目标数据表中均存在,则目标表中的记录将被原数据表中的记录所更新(执行update操作);如果目标表中不存在的某些记录,在原数据表中存在,则原数据表的这些记录将被插入到目标表中(执行insert操作)。
Example
Select
trunc(sysdate,'d') From dual
Create Table test1(eid Number(10),Name Varchar2(20),birth
Date,salary Number(8,2));
-----------------------
Insert Into test1 Values(1001,'李四','16-4月-70',2300);
Insert Into test1 Values(1002,'张三','20-5月-73',6600);
Create Table test2(eid Number(10),Name Varchar2(20),birth
Date,salsry Number(8,2));
---------------------
Merge Into test2
Using test1
On(test1.eid=test2.eid)
When Matched Then
Update Set
Name=test1.name,birth=test1.birth,salsry=test1.salary
When Not Matched Then
Insert
(eid,Name,birth,salsry)Values(test1.eid,test1.name,test1.birth,test1.salary)