数据操纵语句,针对数据,包括增删改
一、不基于原表
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.暂时无法单独满足删除的要求