定义
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语句和子查询、表连接的联合使用