



UPDATE table_name SET column1 = expr1[, column2 = expr2...] [WHERE conditions]
UPDATE 语句中的 WHERE 部分是可选的,它用以圈定语句执行变更的行范围:表中只有满足 WHERE 指示条件的行,才会受到语句的影响。如果省略 WHERE 部分,则表示在表中所有的行上执行更新
例1:UPDATE emp eSET e.mgr = '7698', e.sal = e.sal * 1.5, e.hiredate = to_date('2021-07-01', 'yyyy-mm-dd')WHERE e.empno = '6666';结果:EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO----- ---------- --------- ----- ----------- --------- --------- ------6666 YUSUF ANALYST 7698 2021/7/1 4500.00 10
上例表示更新 EMP 表中 EMPNO 值为 6666 的行,更新细则为将 MGR 列更新作 7698,将 SAL 更新作原来的 1.5 倍,HIREDATE 列更新作 TO_DATE 函数返回的日期数据

例2:UPDATE emp eSET e.mgr = '7698',(e.sal, e.hiredate) =(SELECT t.sal, t.hiredate FROM emp_temp t WHERE t.empno = e.empno)WHERE e.empno = '6666';结果:EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO----- ---------- --------- ----- ----------- --------- --------- ------6666 YUSUF ANALYST 7698 10
上例表示更新 EMP 表中 EMPNO 值为 6666 的行,更新细则为将 MGR 列更新作 7698,SAL 和 HIREDATE 列分别更新作子查询返回的值

例3:SQL> SELECT col1, col2 FROM demo_update;COL1 COL2---------- ----------10 2010 2010 20SQL> -- 表更新结果不会在列之间传递SQL> UPDATE demo_update SET col1 = col2, col2 = col1;3 rows updatedSQL> SELECT col1, col2 FROM demo_update;COL1 COL2---------- ----------20 1020 1020 10SQL> -- 表更新结果不会在行之间传递SQL> UPDATE demo_update2 SET col1 =3 (SELECT MAX(col1) + 10 FROM demo_update);3 rows updatedSQL> SELECT col1, col2 FROM demo_update;COL1 COL2---------- ----------30 1030 1030 10

DELETE FROM table_name [WHERE conditions];例如:DELETE FROM emp e WHERE e.empno = '6666';DELETE FROM emp eWHERE EXISTS (SELECT 1 FROM emp_temp t WHERE t.empno = e.empno);结果:EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO----- ---------- --------- ----- ----------- --------- --------- ------7369 SMITH CLERK 7902 1980/12/17 800.00 207499 ALLEN SALESMAN 7698 1981/2/20 1600.00 300.00 307521 WARD SALESMAN 7698 1981/2/22 1250.00 500.00 307566 JONES MANAGER 7839 1981/4/2 2975.00 207654 MARTIN SALESMAN 7698 1981/9/28 1250.00 1400.00 307698 BLAKE MANAGER 7839 1981/5/1 2850.00 307782 CLARK MANAGER 7839 1981/6/9 2450.00 107788 SCOTT ANALYST 7566 1982/12/9 3000.00 207839 KING PRESIDENT 1981/11/17 5000.00 107844 TURNER SALESMAN 7698 1981/9/8 1500.00 0.00 307876 ADAMS CLERK 7788 1983/1/12 1100.00 207900 JAMES CLERK 7698 1981/12/3 950.00 307902 FORD ANALYST 7566 1981/12/3 3000.00 207934 MILLER CLERK 7782 1982/1/23 1300.00 10
请注意,如果不声明 WHERE 条件的话,DELETE 语句将删除表中所有的行


文章转载自SQL干货分享,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




