`UPDATE FROM` 的语法以及常见的更新操作方式

简介: `UPDATE FROM` 的语法以及常见的更新操作方式

在 SQL Server 中,更新(Update)操作可以结合使用 `FROM` 子句来从其他表或子查询中获取数据进行更新。这种方式通常用于复杂的更新逻辑,例如基于关联表的更新或者使用子查询筛选需要更新的行。下面我会详细介绍 `UPDATE FROM` 的语法以及常见的更新操作方式。

 

### UPDATE FROM 语法

 

基本的 `UPDATE FROM` 语法结构如下:

 

```sql
UPDATE target_table
SET target_table.column_name = source_table.expression
FROM target_table
JOIN source_table ON target_table.key_column = source_table.key_column
WHERE condition;
```

 

其中:

 

- `target_table` 是要更新的目标表。

- `source_table` 是包含要用于更新的数据的源表或者子查询结果。

- `target_table.column_name` 是目标表中要更新的列。

- `source_table.expression` 是从源表或子查询中选择的表达式或列。

- `JOIN` 条件定义了如何将目标表的行与源表的行关联。

- `WHERE` 子句用于筛选要更新的行。

 

### 示例和常见更新操作方式

 

#### 1. 基本更新

```sql

-- 将员工表中所有姓为 'Smith' 的员工的薪水提高 10%

UPDATE Employees
SET Salary = Salary * 1.1
WHERE LastName = 'Smith';
```

#### 2. 使用子查询进行更新

```sql

-- 根据另一个表的查询结果更新目标表

UPDATE Employees
SET Salary = Salary * 1.05
FROM Employees e
JOIN Sales s ON e.EmployeeID = s.EmployeeID
WHERE s.Amount > 10000;
```

 

上述示例中,`Sales` 表中的销售金额超过 10000 的员工,其薪水将会提高 5%。

 

#### 3. 使用多个表更新

 

```sql

-- 根据多个表的数据更新目标表

UPDATE Orders
SET Orders.Status = 'Completed'
FROM Orders o
JOIN OrderDetails od ON o.OrderID = od.OrderID
JOIN Products p ON od.ProductID = p.ProductID
WHERE p.Category = 'Electronics';
```

这个例子中,当产品类别为 'Electronics' 的订单通过关联表连接更新其状态为 'Completed'。

 

#### 4. 使用子查询进行条件更新

 

```sql

-- 使用子查询进行条件更新

UPDATE Employees
SET VacationHours = 0
FROM Employees e
WHERE e.EmployeeID IN (SELECT EmployeeID FROM Managers);
```

 

在这里,所有在 `Managers` 表中出现的员工的年假小时数被设置为 0。

 

### 注意事项

 

- **谨慎使用更新操作:** 更新操作可能会对数据库性能产生重大影响,特别是在大型表中,应该谨慎使用。

- **备份数据:** 在执行重要的更新操作之前,请确保已经备份了数据,以防止意外情况发生。

- **事务管理:** 对于复杂的更新操作,考虑使用事务来确保数据的一致性和完整性。

 

综上所述,`UPDATE FROM` 提供了一种强大的方式来在 SQL Server 中执行复杂的更新操作,通过结合 `JOIN` 和 `WHERE` 子句,可以根据需要从多个表或子查询中选择和更新数据。

目录
相关文章
|
JavaScript 前端开发
uniapp如何定义全局变量?
uniapp如何定义全局变量?
816 0
sign check fail:check Sign and Data Fail报错攻略
错误码: com.alipay.api.AlipayApiException: sign check fail: check Sign and ​Fail            报错原因:验签失败 ,未使用正确的支付宝公钥     在新版接口的调用过程中,常常出现此报错。
5576 12
|
7月前
|
Java 开发者
使用BigDecimal类进行精确的加、减、乘、除操作,并比较BigDecimal数组元素大小
总结起来,BigDecimal类是Java中一个强大的工具,用于精确控制浮点数运算,避免了传统浮点类型因精度问题可能造成的错误。在需要精确计算的场景中,如金融系统、科学计算等,BigDecimal是首选。通过以上介绍的方法,可以对BigDecimal进行高效稳定的算数操作及大小比较。
786 12
springboot字段注入@value细节
springboot字段注入@value细节
241 1
|
安全 数据挖掘 关系型数据库
开发一套医院LIS系统需要考虑哪些因素?
医院检验信息管理系统(LIS)通过将实验仪器与计算机联网,实现样品登录、数据存取、报告审核及打印、数据分析等流程的智能化、自动化和规范化管理,提升实验室管理水平,减少错误,提高检验质量。
539 2
开发一套医院LIS系统需要考虑哪些因素?
Sql Server 增加字段、修改字段、修改类型、修改默认值
Sql Server 增加字段、修改字段、修改类型、修改默认值
1331 0
|
SQL 存储 关系型数据库
COALESCE 函数:SQL中的空值处理利器
【8月更文挑战第31天】
7598 0
|
SQL 存储 关系型数据库
达梦数据库字段类型 varchar 转 text
本文介绍了在达梦数据库中将字段类型从 `varchar` 转换为 `text` 的两种方法:一是通过 DM数据迁移工具导出表结构和数据,修改后重新导入;二是通过添加临时字段、转移数据、删除原字段并重命名临时字段的方式实现转换。针对不同数据量的表,提供了灵活的解决方案。
|
SQL 存储 BI
如何在 SQL Server 中使用 `CONCAT`
【8月更文挑战第10天】
1442 3
如何在 SQL Server 中使用 `CONCAT`
|
SQL 自然语言处理 关系型数据库
在 PostgreSQL 中使用 `REPLACE` 函数
【8月更文挑战第8天】
2308 9
在 PostgreSQL 中使用 `REPLACE` 函数