SQL server 内连接 左连接 右连接 全连接 语句

在SQL Server中,连接(JOIN)操作用于从两个或多个表中检索相关数据。内连接、左连接、右连接和全连接是最常用的几种连接类型。下面详细介绍每种连接的用法和区别:

1. 内连接 (INNER JOIN)

内连接只返回两个表中满足连接条件的匹配行。如果某一行在其中一个表中没有匹配项,则该行不会出现在结果集中。

复制代码

sqlCopy Code

SELECT A.列名, B.列名 FROM 表A A INNER JOIN 表B B ON A.共同列 = B.共同列;

2. 左连接 (LEFT JOIN 或 LEFT OUTER JOIN)

左连接会返回左表中的所有行以及右表中满足连接条件的匹配行。即使右表中没有匹配项,左表的行也会包括在结果集中,未匹配的右表列会显示为NULL。

复制代码

sqlCopy Code

SELECT A.列名, B.列名 FROM 表A A LEFT JOIN 表B B ON A.共同列 = B.共同列;

3. 右连接 (RIGHT JOIN 或 RIGHT OUTER JOIN)

右连接返回右表中的所有行以及左表中满足连接条件的匹配行。即使左表中没有匹配项,右表的行也会包括在结果集中,未匹配的左表列会显示为NULL。

复制代码

sqlCopy Code

SELECT A.列名, B.列名 FROM 表A A RIGHT JOIN 表B B ON A.共同列 = B.共同列;

4. 全连接 (FULL JOIN 或 FULL OUTER JOIN)

全连接返回两个表中的所有行。不论在另一表中是否有匹配项,两表的所有行都会包含在结果集中。未匹配的列会显示为NULL。

复制代码

sqlCopy Code

SELECT A.列名, B.列名 FROM 表A A FULL JOIN 表B B ON A.共同列 = B.共同列;

示例说明

假设有两个表:EmployeesDepartments

Employees:

EmployeeID EmployeeName DepartmentID
1 Alice 10
2 Bob 20
3 Charlie 30

Departments:

DepartmentID DepartmentName
10 HR
20 IT
40 Admin
内连接示例:
复制代码

sqlCopy Code

SELECT Employees.EmployeeName, Departments.DepartmentName FROM Employees INNER JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;

结果:

EmployeeName DepartmentName
Alice HR
Bob IT
左连接示例:
复制代码

sqlCopy Code

SELECT Employees.EmployeeName, Departments.DepartmentName FROM Employees LEFT JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;

结果:

EmployeeName DepartmentName
Alice HR
Bob IT
Charlie NULL
右连接示例:
复制代码

sqlCopy Code

SELECT Employees.EmployeeName, Departments.DepartmentName FROM Employees RIGHT JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;

结果:

EmployeeName DepartmentName
Alice HR
Bob IT
NULL Admin
全连接示例:
复制代码

sqlCopy Code

SELECT Employees.EmployeeName, Departments.DepartmentName FROM Employees FULL JOIN Departments ON Employees.DepartmentID = Departments.DepartmentID;

结果:

EmployeeName DepartmentName
Alice HR
Bob IT
Charlie NULL
NULL Admin

这些示例展示了不同类型连接的行为和返回结果。根据具体需求选择合适的连接类型,可以有效地从数据库中获取所需的信息。

相关推荐
l1t22 分钟前
DeepSeek辅助总结的测试PostgreSQL数据库插入性能方法
数据库·postgresql
赫萝的红苹果28 分钟前
实验探究并验证MySQL innoDB中的各种锁机制及作用范围
android·数据库·mysql
APIshop41 分钟前
Java获取item_get-获得某书商品详情接口
java·开发语言·python
霖霖总总1 小时前
[小技巧45]MySQL Undo Log解析:Undo Log分类与存储机制
数据库·mysql
Henry Zhu1231 小时前
Qt Model/View架构详解(四):高级特性
开发语言·qt·架构
txinyu的博客1 小时前
std::function
服务器·开发语言·c++
曾经的三心草1 小时前
Redis-1-基础操作
数据库·redis·缓存
多多*1 小时前
图解Redis的分布式锁的历程 从单机到集群
java·开发语言·javascript·vue.js·spring·tomcat·maven
电商API&Tina2 小时前
Python请求淘宝商品评论API接口全指南||taobao评论API
java·开发语言·数据库·python·json·php
学嵌入式的小杨同学2 小时前
【嵌入式 C 语言实战】交互式栈管理系统:从功能实现到用户交互全解析
c语言·开发语言·arm开发·数据结构·c++·算法·链表