SQL 当相关行存在时更新记录

SQL 当相关行存在时更新记录,你想更新一个表的部分行,而更新条件取决于另一个表中是否有与之相关的行。例如,如果一个员工出现在 EMP_BONUS 表中,你希望把他的工资(在 EMP 表中)上涨 20%。下面的结果集显示了 EMP_BONUS 表当前的数据。

SQL 当相关行存在时更新记录 问题描述

你想更新一个表的部分行,而更新条件取决于另一个表中是否有与之相关的行。例如,如果一个员工出现在 EMP_BONUS 表中,你希望把他的工资(在 EMP 表中)上涨 20%。下面的结果集显示了 EMP_BONUS 表当前的数据。

select empno, ename
  from emp_bonus
 
     EMPNO ENAME
---------- ----------
      7369 SMITH
      7900 JAMES
      7934 MILLER

SQL 当相关行存在时更新记录 解决方案

UPDATE 语句的 WHERE 子句里使用一个子查询来检索同时存在于 EMP 表和 EMP_BONUS 表的员工。这样 UPDATE 语句就能只检索那些员工的记录,并为其增加 20% 的工资。

1 update emp
2    set sal=sal*1.20
3  where empno in ( select empno from emp_bonus )

SQL 当相关行存在时更新记录 扩展知识

上述子查询的结果集代表了 EMP 表中将要被更新的行。IN 谓词用于评估 EMP 表中的 EMPNO 列是否存在于上述子查询返回的 EMPNO 列表里。如果是的话,相应的 SAL 值就会被更新。
除了 IN 谓词,也可以使用 EXISTS

update emp
   set sal = sal*1.20
 where exists ( select null
                  from emp_bonus
                 where emp.empno=emp_bonus.empno )

你可能会惊讶于 EXISTS 子查询的 SELECT 列表只有一个 Null。不必担心,那个 Null 对更新操作没有负面影响。我认为这样做反而提高了查询语句的可读性,因为它强调了这样一个事实:真正决定更新操作的(例如,哪些行会被更新)是子查询里的 WHERE 子句,而不是 SELECT 列表。这与本解决方案里使用的 IN 谓词和子查询不同。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程