oracle 字段表 对象表,oracle数据库对象-表(2)

对表插入、更新、删除数据

一、insert

insert into 表名 (字段1, 字段2, ... ,字段n) values (值1, 值2, ... ,值n);

1、写字段列表,可以只写部分字段(主键和非空),其它字段默认为空(null)。

insert into emp (empno, ename) values (99, 'APPLE');

也可以把所有字段都写出来。

insert into emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) values (98, 'JACK', NULL, NULL, NULL, NULL, NULL, NULL);

2、不写字段列表,值必须按照表中字段的默认顺序排列,并且必须为每个列提供一个值。

insert into emp values (100, 'TOM', 'SALESMAN', 7698, to_date('19860101000000', 'yyyymmddhh24miss'), 3000, 100, 30);

字符和日期值应放在单引号中;

数字值不应放在单引号中,因为对于指定为number数据类型的字段,如果使用了单引号,可能会发生数字值的隐式转换。

3、insert语句插入date类型数值

insert into tabname(datecol) value(sysdate) ; -- 用date值

insert into tabname(datecol) value(sysdate+1) ; -- 用date值

insert into tabname(datecol) value(to_date('2014-02-14','yyyy-mm-dd')) ; -- 用to_date

insert into tabname(datecol) value(to_date('2014-02-14 20:47:00','yyyy-mm-dd hh24:mi:ss')) ; -- 用to_date

insert into tabname(datecol) value(to_date('20140214','yyyymmdd')) ; -- 用to_date

insert into tabname(datecol) value(to_date('20140214204700','yyyymmddhh24miss')) ; -- 用to_date

二、update

update 表名 set 列1 = 值1, 列2 = 值2, 列n = 值n where 筛选条件;

update emp set deptno = 20 where ename = 'TOM';

update多个列的值,用逗号分隔。

三、delete

delete from 表名 where 筛选条件;

delete from emp where ename = 'TOM';

如果不写where条件,会把整个表的记录都删除

delete from emp;

四、merge

merge命令根据一张表或子查询的连接条件对另外一张表进行查询,连接条件匹配上的进行update,无法匹配的执行insert。这个语法仅需要一次全表扫描就完成了全部工作,执行效率要高于insert+update。

MERGE INTO table_name table_alias

USING (table|view|sub_query) alias

ON (join condition)

WHEN MATCHED THEN

UPDATE SET

col1 = col_val1,

col2 = col2_val

WHEN NOT MATCHED THEN

INSERT (column_list)

VALUES (column_values);

简单理解:

MERGE INTO 表1 table_alias

USING (表2) alias

ON (连接条件)

WHEN MATCHED THEN

UPDATE SET

col1 = col_val1,

col2 = col2_val

WHEN NOT MATCHED THEN

INSERT (column_list)

VALUES (column_values);

表1:目标数据

表2:源数据

先从表1、表2中找符合连接条件的记录,如果记录存在,则执行update,一般是把源数据字段赋值目标数据字段。如果记录不存在,则执行insert,一般是把源数据表记录insert到目标数据表记录。update和insert的动作是一起做的。

merge语句执行有一个方向性,表2 -> 表1。update和insert改动的对象必须是表1的字段。实际上是把两个表的数据合并到其中一个表里面。应该属于集合范畴操作吧。

a35e2aef70153da13461bcb3057a70e5.png

表2和表1,表结构相同可以理解使用过程,但是表结构不同,该如何使用呢?

using后面可以跟多个表吗?然而并不能。

下面做个小实验:

把emp表复制一份为emp2表,在emp表插入两条数据,在emp2表插入一条数据,empno都要不同,使用merge into语句测试。

merge into emp t1

using emp2 t2

on (t1.empno = t2.empno)

when matched then

update set t1.comm = t2.comm + 1

when not matched then

insert (empno, ename, job) values (t2.empno, t2.ename, t2.job);

这里update的表是t1表,insert插入的表也是t1表。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值