ORACLE数据库(九)-----DML语句

数据操纵语句,针对数据,包括增删改

一、不基于原表

1 INSERT(插入)
  • 单条数据的插入:插入确定的内容

    INSERT INTO 表名 [(列名)] VALUES ()
    
  • 多条数据的插入:插入查询结果

    INSERT INTO 表名 SELECT ....               
    

    EG

    INSERT INTO DEPT_EMP    --目标表
    SELECT D.DEPTNO,D.DNAME,COUNT(EMPNO),NVL(SUM(SAL),0)
      FROM DEPT D   -- 来源表
      LEFT JOIN EMP E   -- 来源表
        ON E.DEPTNO = D.DEPTNO
     GROUP BY D.DEPTNO,D.DNAME;
    
    
2 DELETE(删除)

DELETE FROM 表名 删除全部数据,但是不删除表

DELETE FROM 表名 WHERE 条件 删除符合条件的数据

3 UPDATE(更新)
UPDATE 表名 SET 列名=WHERE 条件
总结

1 更新后的结果可以是某个固定内容,或是函数处理后的结果,或是运算,或是子查询(单行单列);

2 更新时等号左边是待更新的字段,右边是更新后的结果。

3 若是将两个字段对调,写一个SQL语句同时更新

UPDATE EMP SET ENAME = JOB,JOB=ENAME;-- 回滚日志   此时ENAME是回滚日志的值

4 不能根据不同的条件更新为不同的结果

UPDATE EMP SET ENAME = JOB;
UPDATE EMP SET JOB = ENAME; -- 不能引用另一条 SQL日志

5 使用UPDATE将所有列都更新为空值,不等同于删除该行数据,存在该行,有ROWID

二、基于原表

MERGE

 MEGER INTO 目标表 A
 USING 数据源 B       -- 可以是表、视图、子查询 
    ON (条件)       -- 关联条件
  WHEN MATCHED THEN  -- 如果能匹配的上
UPDATE               -- 对目标表中的旧数据进行删除
   SET A.COL1 = B.COL1,.....
 WHERE 条件           -- 更新条件 以关联条件成立为前提
DELETE                
 WHERE 条件       -- 删除条件 以更新条成立为前提  也就是说 必须有更新条件
  WHEN NOT MATCHED THEN
INSERT (A.COL1,A.COL2,....)
VALUES (B.COL1,B.COL2,....)
 WHERE 条件;

EG

同时进行了更新和插入的操作(最常用)
已有商品更新价格,新商品上架
 MERGE INTO GOODS_CURRENT A
 USING GOODS_CHANGE B
    ON (A.GOODS_ID=B.GOODS_ID)
  WHEN MATCHED THEN
UPDATE
   SET A.PRICE = B.PRICE
  WHEN NOT MATCHED THEN
INSERT (A.GOODS_ID,A.GOODS_NAME,A.PRICE,A.COST,A.GOODS_TYPE)
VALUES (B.GOODS_ID,B.GOODS_NAME,B.PRICE,B.COST,B.GOODS_TYPE);

MERGE语法的优势:

1.可以同时满足增、删、改的要求,而不必分开书写多个SQL

2.可以依据目标表原有数据的情况作出改动

劣势:

1.要求的合并以及需要顾及原表内容,会导致运行负担的增加

2.暂时无法单独满足删除的要求

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dmy20210205

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值