SQL Server中JOIN的使用方法总结

JOIN 分为:内连接(INNER JOIN)、外连接(OUTER JOIN)。
其中,外连接分为:左外连接(LEFT OUTER JOIN)、右外连接(RIGHT OUTER JOIN)、全外连接(FULL OUTER JOIN),其中外连接的“OUTER”关键字可以省略不写

1.内连接(显示左右两表能完全匹配的数据):

1 select P.ProvinceId,P.ProvinceName,C.CityName,C.ProvinceId,C.CityId
2 from [dbo].[City] C inner JOIN [dbo].[Province] P ON P.ProvinceId = C.CityId where C.ProvinceId= 6

在这里插入图片描述
2.左外连接(显示左表所有数据,右表匹配不上的显示为NULL):

1 select P.ProvinceId,P.ProvinceName,C.CityName,C.ProvinceId,C.CityId
2 from [dbo].[City] C LEFT JOIN [dbo].[Province] P ON P.ProvinceId = C.CityId where C.ProvinceId= 6

在这里插入图片描述
3.右外连接(显示右表所有数据,左表匹配不上的显示为NULL):

1 select P.ProvinceId,P.ProvinceName,C.CityName,C.ProvinceId,C.CityId
2 from [dbo].[Province] P RIGHT JOIN [dbo].[City] C ON P.ProvinceId = C.CityId where C.ProvinceId= 16

在这里插入图片描述
4.全外连接(显示左右两量表所有数据,两表匹配不上的显示为NULL):

1 select P.ProvinceId,P.ProvinceName,C.CityName,C.ProvinceId,C.CityId
2 from [dbo].[Province] P FULL OUTER JOIN [dbo].[City] C ON P.ProvinceId = C.CityId where C.ProvinceId= 6

在这里插入图片描述
参考:https://www.cnblogs.com/jackson-yqj/p/7819634.html

SQL Server 中,`UPDATE` 语句是**可以使用 JOIN** 的。这种写法常用于根据另一个表的数据来更新当前表的某些字段。 以下是一个标准的带有 `JOIN` 的 `UPDATE` 语句示例: --- ### ✅ 示例:使用 JOIN 更新数据 假设我们有两个表: - `Employees` 表(员工信息): - `EmployeeID` - `Name` - `Salary` - `SalaryAdjustments` 表(薪资调整记录): - `EmployeeID` - `NewSalary` 我们要根据 `SalaryAdjustments` 表中的新工资值来更新 `Employees` 表中的工资。 ```sql UPDATE e SET e.Salary = sa.NewSalary FROM Employees e JOIN SalaryAdjustments sa ON e.EmployeeID = sa.EmployeeID; ``` --- ### 🔍 解释: - `UPDATE e`: 指定要更新的是 `Employees` 表的别名 `e` - `SET e.Salary = sa.NewSalary`: 将 `Employees` 表的 `Salary` 字段设置为 `SalaryAdjustments` 表中的 `NewSalary` - `FROM Employees e JOIN SalaryAdjustments sa ON ...`: 使用 `JOIN` 来关联两个表,通过 `EmployeeID` 匹配需要更新的记录 --- ### 📌 注意事项: 1. **只更新匹配项**:只有那些能在 `JOIN` 条件中匹配到的记录才会被更新。 2. **避免多对一更新导致错误更新**:如果 `JOIN` 后出现一对多的情况,SQL Server 会取其中一个值进行更新,这可能导致逻辑错误,应确保连接是一对一或用子查询控制。 3. **性能优化**:在大表上执行带 `JOIN` 的 `UPDATE` 时,建议在连接字段上有索引以提高效率。 --- ### ✅ 另一种写法(使用 CTE): 你也可以使用 `CTE`(Common Table Expression)来进行更新,逻辑更清晰: ```sql WITH UpdateData AS ( SELECT e.EmployeeID, sa.NewSalary FROM Employees e JOIN SalaryAdjustments sa ON e.EmployeeID = sa.EmployeeID ) UPDATE Employees SET Salary = ud.NewSalary FROM UpdateData ud WHERE Employees.EmployeeID = ud.EmployeeID; ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值