【Oracle】第8天 DML语句

定义

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

  • insert
  • update
  • delete

FOR UPDATE 手动修改

  • 概述:手动更改表中数据
  • 语法:
SELECT * FROM TABLE_NAME FOR UPDATE;--全局修改
  • FOR UPDATE 的优缺点
    – 方便快捷,但是假如数据量过多,可能会导致数据库崩溃,必须依赖特定的第三方数据库开发环境

自动修改

插入数据INSERT

定义:将数据插入到数据库对象中的指令。可以岀入数据的数据库对象有数据表以及可更新査看表两种

语法:

INSERT INTO [TABLE_NAME (COLUMN1,...)](不写则默认选择了全字段) VALUES (VALUE1,...)
INSERT INTO TABLE_NAME SELECT语句
  • INSERT INTO->指明更新操作为插入指令

  • VALUES后的数据要和表名后的字段一一对应(数据类型、个数),字段省略不写默认对表中全部字段插入数据

  • 注意:

  • 1.插入语句执行后,可以回滚或者提交

  • 2.如果没有提交,那么只在当前窗口有效

  • 3.如果没有提交,如果从右键菜单里试图删除时,会报错资源正忙

  • 4.如果一次性插入数据过多可能导致数据库崩溃,建议INSERT 语句和COMMIT语句穿插使用

  • 5.插入数据是在表中最后一行插入一条新的语句

应用:创建一个与指定表列相同的空表

CREATE TABLE BRAND_NEW AS SELECT * FROM EMP WHERE 1=0 ;

应用:插入指定表的指定行和指定列

CREATE TABLE BRAND_NEW(EMPNO,ENAME) AS (SELECT EMPNO,ENAME FROM EMP WHERE DEPTNO=10) ;

修改数据UPDATE

语法:

UPDATE TABLE_NAME SET COLUMN=VALUE[WHERE CONDITION]

应用:将emp表中的comm列赋值1000

UPDATE EMP SET COMM=1000 ;
  • 注意:
  • 1.不加WHERE 条件,则是对全行的修改,添加WHERE 条件,则是对部分行的修改
  • 2.SET 后面的字段和值的数据类型要一致(默认认同隐式转换)
  • 3.SET是赋值语句,不能颠倒顺序
  • 4.多列修改时,在SET语句之后用逗号隔开

SET语句后面都可以赋什么值?

1.可以是函数(不是分组函数)

UPDATE EMP SET COMM=ROUND(SAL,2) WHERE DEPTNO =20;

2.可以是子查询

删除数据DELETE

语法:

DELETE FROM TABLE_NAME [WHERE CONDITION];	

复制表

语法:

CREATE TABLE TABLE_NAME AS (SELECT语句)

习题:
1.若有张表:部门编号,部门名称,部门员工人数,部门平均薪资,部门薪资在1等级的员工人数 --插入对应的数据 DEPT EMP SALGRADE

INSERT INTO THERE_IS_A_TABLE
  (SELECT DEPT.DEPTNO, DEPT.DNAME,E_1.C1,E_1.A1,E_2.C2
     FROM DEPT
     LEFT JOIN (SELECT DEPTNO, COUNT(*) "C1", AVG(SAL) "A1"
                 FROM EMP
                GROUP BY DEPTNO) "E_1"
       ON DEPT.DEPTNO = E_1.DEPTNO
     LEFT JOIN (SELECT DEPTNO, COUNT(*) "C2"
                 FROM EMP
                WHERE SAL >=
                      (SELECT LOSAL FROM SALGRADE WHERE GRADE IN (1))
                  AND SAL <=
                      (SELECT HISAL FROM SALGRADE WHERE GRADE IN (1))
                GROUP BY DEPTNO) "E_2"
       ON E_2.DEPTNO = DEPT.DEPTNO
    GROUP BY DEPTNO, DNAME);

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

UPDATE EMP "E"
   SET COMM = 0.1 * (SELECT SUM(SAL)
                       FROM EMP
                      GROUP BY DEPTNO
                     HAVING DEPTNO = E.DEPTNO)
 WHERE SAL < (SELECT AVG(SAL)
                FROM EMP "E1"
               GROUP BY DEPTNO
              HAVING E.DEPTNO = DEPTNO);

3.删除emp表中工资小于该员工的领导所在部门的平均薪资的记录,没有领导的员工不删除

DELETE FROM EMP "E" WHERE E.SAL <(SELECT SAL FROM EMP "D" WHERE E.MGR= D.EMPNO) ;

MERGE INTO语句

定义:在MERGE语句中可以一次性的执行增删改的操作
语法:

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

练习:
1.有一个银行账户,
甲:今天存款5千元,明天又存款5千元
乙:今天存款3千 元,明天又存款4千元
丙:今天没有存款,明天存款了3千元
用表CUSTOMOR_DEPOSIT_FORM(客户存款表)保存账户信息
用表CUSTOMOR_DEPOSIT_FORM_BAK保存每天的账户信息

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

总结

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值