当需要向数据库中添加,更新或删除数据时,需要执行数据操纵语言DML。DML是SQL的核心部分,它包含如下几种常见的操作语句。
INSERT:向表中添加行。
UPDATE:更新存储在表中的数据。
DELETE:删除现有的行。
MERGE:插入所有的行到另一个具有现存记录的表,如果要插入到行的键匹配已经存在,则更新已经存在的行而不是插入一个新行。
插入数据:
语法格式:
INSERT INTO table [(column [, cloumn...])]
VALUES (value [, value...]) ;
使用子查询插入多行数据:
语法格式:
INSERT INTO table [ column (, column) ] subquery;
INSERT INTO emp_copy
SELECT *
FROM emp
WHERE deptno = 20;
使用insert插入多表数据:
语法如下:
INSERT {FIRST|ALL}
[WHEN condition THEN ] INTO table [VALUES(...)]
[WHEN condition THEN ] INTO table [VALUES(...)]
...
ELSE INTO table [VALUES(...)]
subquery;
语句关键字含义如下:
FIRST:如果第一个WHEN子句的值为true,Oracle服务器对于给定的行执行相应的INTO子句,并且跳过后面的WHEN子句。
ALL:Oracle服务器通过相应的WHEN条件过滤每一个插入子句,确定是否执行这个插入子句。
ELSE:如果条件都不满足,则执行ELSE中的插入子句。
subquery:要进行多表插入的子查询。
INSERT FIRST
WHEN deptno = 10
THEN
INTO emp_dept_10
WHEN deptno = 20
THEN
INTO emp_dept_20
WHEN deptno = 30
THEN
INTO emp_dept_30
ELSE
INTO emp_copy
SELECT *
FROM emp;
更新数据:
语法:
UPDATE table
SET colum = value [, column = value, ...]
[where condition];
UPDATE emp SET sal = 3000 WHERE empno = 7369;
使用子查询更新数据
--相关子查询
UPDATE emp x
SET x.sal = (SELECT AVG(y.sal)
FROM emp y
WHERE y.deptno = x.deptno)
WHERE x.empno = 7369;
--非相关子查询
UPDATE emp
SET sal = (SELECT y.sal
FROM emp
WHERE deptno = 7782)
WHERE x.empno = 7369;
--使用子查询更新多个列
UPDATE emp x
SET (x.sal, x.com) = (SELECT AVG(y.sal), MAX(y.comm)
FROM emp y
WHERE y.deptno = x.deptno)
WHERE x.empno = 7369;
--使用多表关联进行更新
UPDATE (SELECT x.sal sal, y.sal sal_his, x.comm comm, y.comm comm_his
FROM emp x, emp_his y
WHERE x.empno = y.empno AND x.empno = 7369)
SET sal_his = sql,
comm_his = comm;
使用 MERGE 合并表行
MERGE语句组合了INSERT和UPDATE命令,语法如下
MERGE INTO table_name table_alias
USING (table|view|sub_query) alias
ON (join condition)
WHEN MATCHED THEN
UPDATE SET
co11 = col_val1,
co12 = col2_val
WHEN NOT MATCHED THEN
INSERT (column_list)
VALUES (column_values);
MERGE INTO emp_copy c
USING emp e
ON (c.empno = e.empno)
WHEN MATCHED THEN
UPDATE
SET c.ename = e.ename, c.job = e.job, c.magr = e.mgr
WHEN NOT MATCHED THEN
INSERT
VALUE(e.empno, e.ename, e.job, e.mgr);
删除数据
DELETE语法:
DELETE [FROM] table [WHERE condition];
使用子查询删除记录
DELETE FROM emp
WHERE deptno = (SELECT deptno
FROM dept
WHERE dname = '销售');
DELETE FROM emp X
WHERE deptno EXISTS (SELECT 1
FROM emp_copy
WHERE empno= x.empno);
DELETE FROM emp X
WHERE deptno IN (SELECT empno
FROM emp_copy
WHERE empno= x.empno);
使用 TRUNCATE 清除表数据
TRUNCATE TABLE dept;
本文详细介绍了如何使用SQL的DML操作,包括INSERT插入新行与子查询,UPDATE更新数据及其子查询应用,DELETE行与多种删除条件,以及MERGE合并表的高效操作。涵盖了基本语法和实战示例,是数据库管理与SQL进阶者的必备指南。
7845

被折叠的 条评论
为什么被折叠?



