Oracle-PL/SQL学习~~~从增删改查学起~~~增删改DML语句

本文详细介绍了如何使用SQL的DML操作,包括INSERT插入新行与子查询,UPDATE更新数据及其子查询应用,DELETE行与多种删除条件,以及MERGE合并表的高效操作。涵盖了基本语法和实战示例,是数据库管理与SQL进阶者的必备指南。

当需要向数据库中添加,更新或删除数据时,需要执行数据操纵语言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;

 

 

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值