DML语句


DQL 数据查询语句 SELECT
DML 数据操纵语句 INSERT UPDATE DELETE
DDL 数据定义语句 CREATE ALTER DROP TRUNCATE …
DCL 数据控制语句 GRANT REVOKE
TCL 事务控制语句 COMMIT ROLLBACK SAVEPOINT


一.定义

是DATA MANIPULATION LANGUAGE 的缩写,意思是数据操纵语言,
是指在SQL语言中对数据库对象运行数据访问的工作的指令集,以insert ,update,delete 三种指令为核心,
分别代表插入,更新和删除

数据库对象:表 视图

二.FOR UPDATE

1.概述
FOR UPDATE用于SELECT 语句后,执行后手动更改SELETC 语句查询后的结果

2.语法
SELECT * FROM TABLE_NAME FOR UPDATE --全局修改
SELECT * FROM TABLE_NAME WHERE CONDITION FOR UPDATE -------------部分修改

示例:
1).将员工表中的20号部门的工资列修改为5000
SELECT * FROM EMP FOR UPDATE;
SELECT * FROM EMP;
如图所示:
小锁:表示该表为锁定还是非锁定状态
加号:表示在表中增加一条数据
减号:表示在表中减少一条数据
对号:表示修改完成,保存

修改过程:先解锁,解锁后可直接在查询结果中进行修改,修改结束后点击绿色对勾表示修改完成,
再点击小锁使表回到锁定状态,最后点击【提交】按钮使修改生效或点击【回滚】按钮取消刚才的修改

3.优缺点

优点:
1.操作简单;
2.可以同时满足增、删、改三方面的需求。

缺点:
1同时对大量数据操作时会有崩溃的危险;
2.必须依赖特定的数据库操作工具。

三.自动修改

1.插入数据
-----INSERT
定义:将数据插入到数据库对象中的指令 可以出入数据的数据库对象有数据表以及可更新查看表两种
语法:1.INSERT INTO TABLE_NAME (COLUMN1,…) VALUES(VALUE1,…);
2.INSERT INTO TABLE_NAME(COLUMN1…) SELECT 语句;

分析:
1.INSERT INTO->指明更新操作为插入指令
2.TABLE_NAME->指明要插入数据的表
3.TABLE_NAME后列->指明要插入的数据的字段
4.VALUES->指明要插入的数据
5.VALUES后的数据要和表名后的字段一一对应(数据类型 个数),字段省略不写默认对表中全部字段插入数据
6. 加SELECT 语句将SLEECT 语句的查询结果插入到对应的表字段中

示例:
语法一:
1.在emp3表中插入一条数据
SELECT * FROM EMP3;
INSERT INTO EMP3 VALUES(1001,‘ROSE’,‘MANAGER’,NULL,‘2021/01/12’,1500,200,20);
INSERT INTO EMP3 VALUES(1001,‘ROSE’,NULL,‘2021/01/12’,1500,200,20);–报错 没有足够的值

   INSERT INTO EMP3(EMPNO,ENAME,SAL) VALUES(1001,'ROSE',1500);--执行成功
   INSERT INTO EMP3(JOB) VALUES('CLERK');--执行成功
  
语法二: 
2. 将emp表中部门编号为20的员工信息插入到EMP3中
   SELECT * FROM EMP3;
   INSERT INTO EMP3 SELECT * FROM EMP WHERE DEPTNO=20;--全部插入
   
   INSERT INTO EMP3(EMPNO,ENAME) SELECT EMPNO,ENAME FROM EMP WHERE DEPTNO=20;--部分列插入
   INSERT INTO EMP3(EMPNO,ENAME) SELECT EMPNO,ENAME,SAL FROM EMP WHERE DEPTNO=20;--报错 值过多
   
3.若有张表:部门编号,部门名称,部门员工人数,部门平均薪资,部门薪资在1等级的员工人数
  --插入对应的数据  DEPT EMP  SALGRADE

注意:
1).插入语句执行后,可以回滚、提交
2).未提交状态下,只在当前窗口有效
3).未提交状态下,右键表名删除时,报错 资源正忙
4).同时承受的数据插入会更多,但会有崩溃的危险。
若数据量较多建议改到命令窗口执行且中间多穿插’【COMMIT; 】命令。
5).插入数据在表中数据的最后一行添加一行新的数据,未给定数据的字段,表中结果为空

2.修改数据

定义:dml语句,用来修改表中的数据
语法:UPDATE TABLE_NAME SET COLUMN=VALUE [WHERE CONDITION];

分析:UPDATE: 更新 SET 设置

-----更新table_name表中的信息,将column(符合where条件的数据)中的值设置为value

示例:
1).将emp表中的COMM列修改为1000
SELECT * FROM EMP;
UPDATE EMP SET COMM=1000;

2).将emp表中20号部门的COMM列修改为1000
UPDATE EMP SET COMM=1000 WHERE DEPTNO=20;

3). 将emp表中20号部门的COMM列修改为1000

  UPDATE EMP SET 1000=COMM WHERE DEPTNO=20;--报错

4).SET后字段名和值的关系

 --数据类型
   UPDATE EMP SET COMM='ADSD' WHERE DEPTNO=20;--报错
   UPDATE EMP SET COMM='500' WHERE DEPTNO=20;--报错
   
 -- 列的个数
   SELECT * FROM EMP;
   UPDATE EMP SET COMM='500',SAL=2000 WHERE DEPTNO=20;
   
 --将30号部门的comm该为5000,将20号部门的工资改为2000  
   UPDATE EMP SET SAL=2000 WHERE DEPTNO=20;
   UPDATE EMP SET COMM='5000' WHERE DEPTNO=30;

5).SET 后赋值的分类

  UPDATE EMP SET COMM=值 WHERE DEPTNO=20;
  
  --函数
   UPDATE EMP SET COMM=ROUND(SAL,2) WHERE DEPTNO=20; --可以
   UPDATE EMP SET COMM=AVG(SAL) WHERE DEPTNO=20;
   
  --运算
   SELECT * FROM EMP;
   UPDATE EMP SET COMM=SAL*10 WHERE DEPTNO=20; 
   
  --子查询  
    SELECT * FROM EMP;
    UPDATE EMP SET COMM=(SELECT 200 FROM DUAL) WHERE DEPTNO=20;
    UPDATE EMP SET COMM=(SELECT 200,1000 FROM DUAL) WHERE DEPTNO=20;--值过多
    UPDATE EMP SET COMM=(SELECT SAL FROM EMP) WHERE DEPTNO=20;--报错
    
    SELECT * FROM EMP;
    UPDATE EMP E SET COMM=(SELECT SAL FROM EMP WHERE E.EMPNO=EMPNO) WHERE DEPTNO=20;
    UPDATE EMP SET (SAL,COMM)=(SELECT 200,1000 FROM DUAL) WHERE DEPTNO=20;--多列修改

6).将emp表中工资小于各部门平均薪资的员工的奖金更改 为该部门总工资的10% –

注意:
1).不加where条件的修改,是表中整个列全部修改 ,添加WHERE 条件后修改的为表中符合条件的列
2).SET后字段名=值,顺序不能颠倒
3).SET后的字段和值数据类型一致
4).多列同一条件下修改时,直接写在SET后,中间用逗号间隔即可
5).SET后的数值可以是函数(返回对应字段的数据)不能为分组函数,运算,子查询(单行单列,单行多列,相关子查询)
6).加条件修改表中的数据,WHERE的使用和SELECT 语句中的使用一致

3.删除表中数据

定义:删除表中的数据

语法:DELETE FROM TABLE_NAME; ------删除表中全部数据
DELETE FROM TABLE_NAME WHERE CONDITION; -----删除表中符合条件的数据

示例:
1).删除EMP3表中的数据

  SELECT * FROM EMP3;
  DELETE FROM EMP3;
  
2).删除EMP3表中JOB列为空的数据  
   
  SELECT * FROM EMP3;
  DELETE FROM EMP3 WHERE JOB IS NULL;
  
3).删除emp表中工资小于该员工的领导所在部门的平均薪资的记录,没有领导的员工不删除

注意:
1.删除表中数据时一定要注意删除语句的书写,确保数据删除正确,然后在提交,
一旦提交结果,以后操作不可撤销
2.加where条件的删除数据,和之前讲的条件查询中where的用法一致
只把表中符合条件的数据删除
3.删除数据时是以整条数据为基础删除的,即要么不删 要么整条数据全部删除

四.复制表

1.语法
CREATE TABLE TABLE_NAME AS SELECT 语句;
–创建一张名为TABLE_NAME的表,表的结构和select语句查询的结果集的结构一致,并将select语句的查询结果插入到表中

示例:
1).备份emp表中的数据
CREATE TABLE EMP3 AS SELECT * FROM EMP;
SELECT * FROM EMP3;

2)备份表
SELECT * FROM EMP3;
CREATE TABLE EMP3 AS SELECT E.DEPTNO,DNAME,ENAME FROM EMP E,DEPT D WHERE E.DEPTNO=D.DEPTNO;

注意:
1).复制表时只会将SELECT语句的结 构和数据以及该表的非空约束复制过来,其他均不会复制
2).复制的表中的结构和数据以select语句为准

五.MERGE语法

1.概述
可以实现在一个语句中同时完成增加,删除,修改的功能

2.语法

MERGE INTO TABLE_NAME A ----要更新的表
USING TABLE_NAME B -----更新表要用到的数据
ON CONDITION -----匹配条件
WHEN MATCHED THEN -----如果ON后的条件能匹配上
UPDATE SET COL=VAL1… ------对A表中的数据用B表的数据更新
WHERE CONDITION----条件
DELETE WHERE CONDITION -----对A表中的数据进行删除操作
WHEN NOT MATCHED THEN -----如果WHERE后的条件未匹配上
INSERT () VALUES() ----对A表插入B表的数据

示例:
1).假设银行账户:
甲:今天存款5000 第二天又存款5000
乙:今天存款3000 第二天又存款4000
丙: 第二天又存款3000

用表CUSTOMOR_DEPOSIT_FORM(客户存款表)保存账户信息
用表CUSTOMOR_DEPOSIT_FORM_BAK保存每天的账户信息

SELECT * FROM CUSTOMOR_DEPOSIT_FORM FOR UPDATE;
SELECT * FROM CUSTOMOR_DEPOSIT_FORM_BAK FOR UPDATE;

MERGE INTO CUSTOMOR_DEPOSIT_FORM C1
USING CUSTOMOR_DEPOSIT_FORM_BAK C2
ON (C1.CID=C2.CID)
WHEN MATCHED THEN
UPDATE SET C1.MONEY=C1.MONEY+C2.MONEY
WHEN NOT MATCHED THEN
INSERT VALUES(C2.CID,C2.CNAME,C2.MONEY);

注意:
1.ON关联条件必须用括号引起
2.ON后可以为多个条件,用AND/OR连接
3.ON后的条件需不含有重复的数据
4.UPDATE后不需要表名,INSERT后不需要INTO关键字,DELETE后不需要FROM,不能单独删除,必须跟在UPDAET后
5.不能去更细ON条件中引用的列
6.插入语句可以在INSERT后跟字段指定要插入的列的数据
7.MERGE不能加子查询语句
8.两个when条件可以只有一个

MERGE语法的优势:

1.可以同时满足增、删、改的要求,而不必分开书写多个SQL
2.可以依据目标表原有数据的情况作出改动

劣势:
无法单独满足删除的要求

六.小结
1.掌握DML语句的定义
2.熟练使用INSERT UPDATE DELETE 语句
3.会用MERGE INTO语句
4.熟练使用DML语句和子查询、表连接的联合使用

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值