
UPDATE table_name SET column1 = expr1[, column2 = expr2...] [WHERE conditions]
UPDATE 语句中的 WHERE 部分是可选的,它用以圈定语句执行变更的行范围:表中只有满足 WHERE 指示条件的行,才会受到语句的影响。如果省略 WHERE 部分,则表示在表中所有的行上执行更新
例1:
UPDATE emp e
SET 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 e
SET 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 20
10 20
10 20
SQL> -- 表更新结果不会在列之间传递
SQL> UPDATE demo_update SET col1 = col2, col2 = col1;
3 rows updated
SQL> SELECT col1, col2 FROM demo_update;
COL1 COL2
---------- ----------
20 10
20 10
20 10
SQL> -- 表更新结果不会在行之间传递
SQL> UPDATE demo_update
2 SET col1 =
3 (SELECT MAX(col1) + 10 FROM demo_update);
3 rows updated
SQL> SELECT col1, col2 FROM demo_update;
COL1 COL2
---------- ----------
30 10
30 10
30 10

DELETE FROM table_name [WHERE conditions];
例如:
DELETE FROM emp e WHERE e.empno = '6666';
DELETE FROM emp e
WHERE 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 20
7499 ALLEN SALESMAN 7698 1981/2/20 1600.00 300.00 30
7521 WARD SALESMAN 7698 1981/2/22 1250.00 500.00 30
7566 JONES MANAGER 7839 1981/4/2 2975.00 20
7654 MARTIN SALESMAN 7698 1981/9/28 1250.00 1400.00 30
7698 BLAKE MANAGER 7839 1981/5/1 2850.00 30
7782 CLARK MANAGER 7839 1981/6/9 2450.00 10
7788 SCOTT ANALYST 7566 1982/12/9 3000.00 20
7839 KING PRESIDENT 1981/11/17 5000.00 10
7844 TURNER SALESMAN 7698 1981/9/8 1500.00 0.00 30
7876 ADAMS CLERK 7788 1983/1/12 1100.00 20
7900 JAMES CLERK 7698 1981/12/3 950.00 30
7902 FORD ANALYST 7566 1981/12/3 3000.00 20
7934 MILLER CLERK 7782 1982/1/23 1300.00 10
请注意,如果不声明 WHERE 条件的话,DELETE 语句将删除表中所有的行

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