`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` 子句,可以根据需要从多个表或子查询中选择和更新数据。

目录
相关文章
|
SQL 关系型数据库 MySQL
解决sql插入字符串中包含‘单引号问题
解决sql插入字符串中包含‘单引号问题
1752 2
解决sql插入字符串中包含‘单引号问题
|
JavaScript 前端开发
uniapp如何定义全局变量?
uniapp如何定义全局变量?
864 0
|
3月前
|
机器学习/深度学习 文字识别 算法
报关单OCR识别-进出口海关报关单识别接口返回参数-文字识别
报关单识别接口基于OCR与深度学习技术,精准提取进出口报关单关键信息,输出结构化数据。支持API调用与私有化部署,适用于智能通关、跨境物流等场景,提升申报效率与准确性。
sign check fail:check Sign and Data Fail报错攻略
错误码: com.alipay.api.AlipayApiException: sign check fail: check Sign and ​Fail            报错原因:验签失败 ,未使用正确的支付宝公钥     在新版接口的调用过程中,常常出现此报错。
5657 12
|
监控 应用服务中间件 BI
nginx日志统计分析自动报表工具goaccess(推荐)
## 功能描述 - nginx日志统计分析自动报表工具goaccess(推荐) - 网站总访问量统计,按天统计访问量,按页面(不同URL)统计访问量(不包括JS、css),按静态页面统计访问量(包括JS、css),不存在的页面统计访问量 - 按不同的IP统计访问量,按不同的操作系统统计访问量,...
8547 0
|
8月前
|
SQL 关系型数据库 MySQL
SQL如何对不同表的数据进行更新
本文介绍了如何将表A的Col1数据更新到表B的Col1中,分别提供了Microsoft SQL和MySQL的实现方法,并探讨了多表合并后更新的优化方式,如使用MERGE语句提升效率。适用于数据库数据同步与批量更新场景。
springboot字段注入@value细节
springboot字段注入@value细节
267 1
Sql Server 增加字段、修改字段、修改类型、修改默认值
Sql Server 增加字段、修改字段、修改类型、修改默认值
1406 0
|
SQL 存储 关系型数据库
COALESCE 函数:SQL中的空值处理利器
【8月更文挑战第31天】
8208 0
|
SQL 数据库
【SQL】已解决:SQL错误(208):对象名‘STRING_SPLIT‘无效
【SQL】已解决:SQL错误(208):对象名‘STRING_SPLIT‘无效
1929 0

热门文章

最新文章