SQL 中的各种连接 JOIN 的区别总结!
墨韵书香 /
03-18 /
3点赞 /
0评论 /
839阅读
## 前言
尽管大多数开发者在日常工作中经常用到Join操作,如Inner Join、Left Join、Right Join等,但在面对特定查询需求时,选择哪种Join类型以及如何使用On和Where子句往往成为一大挑战。特别是对于初学者而言,这些概念可能显得抽象且难以区分。在实际应用中,错误地使用Join类型或混淆On与Where子句的功能,都可能导致数据查询结果的不准确或遗漏关键信息。
**今天大姚给大家讲解一下SQL中关于Join、Inner Join、Left Join、Right Join、Full Join、On、Where区别和用法。**
- 全面的C#/.NET/.NET Core面试宝典(永久免费)
- 互联网寒冬下,如何写好一份.NET求职简历?附带简洁简历模板和简历优化服务来了!!!
## SQL连接JOIN图解

## 数据库表结构和对应数据
> 本文咱们用的是MS Sql Server作为数据操作示例。
### Students 学生表:

### Class 班级表:

## Join(where联立查询)
概念:用于两表或多表之间数据联立查询。
```csharp
select * from Students s,Class c where s.ClassId=c.ClassId
```

## Inner Join(内连接查询)
概念:与Join相同,两表或多表之间联立查询数据,因此我们在使用多表join查询的时候既可以使用where关联,也可以是inner join关联查询。
```csharp
select * from Students s inner join Class c on s.ClassId=c.ClassId
```

## Left Join(左连接查询)
概念:以左表中的数据为主,即使与右表中的数据不匹配也会把左表中的所有数据返回。
```csharp
select * from Students s left join Class c on s.ClassId=c.ClassId
```

## Right Join(右连接查询)
概念:与Left Join的用法相反,是以右表中的数据为主,即使左表中不存在匹配数据也会把右表中所有数据返回。
```csharp
select * from Students s right join Class c on s.ClassId=c.ClassId
```

## Full Join(全连接查询)
概念:返回表中所有的数据数据,无论匹配与否。
```csharp
select * from Students s Full JOIN Class c on s.ClassId=c.ClassId
```

## On、Where的异同
这两个概念中也是绝大多数人无法区分到底它们两者之间有何区别,我什么时候使用On,什么时候使用Where,下面将分别展示两者的异同。
### On条件的作用:
> ON的使用无论是左右内全都使用到了On来进行关联!
**对于inner join 的作用就是起到了与where相同的作用条件筛选:**
```csharp
select * from Students s inner join Class c on s.ClassId=c.ClassId and s.Sex='男'
```

**对于左右连接而言,无论查询条件是否满足都会返回对应所指向的那边的所有数据:**
```csharp
select * from Students s left join Class c on s.ClassId=c.ClassId and s.Sex='男'
```

**对于Full Join 而言无论,只有同时满足的时候才会返回全部关联的数据,假如有一方不满足返回以左边的表数据为基准返回:**
```csharp
--全连接select * from Students s full join Class c on s.ClassId=c.ClassId --全连接加on查询select * from Students s full join Class c on s.ClassId=c.ClassId and s.Sex='男'
```


### WHERE条件的作用:
WHERE条件在临时表生成后的过滤阶段应用,对最终结果进行筛选。此时LEFT JOIN的“保留左表所有记录”特性已失效,WHERE 会过滤掉不符合条件的行(包括左表记录),如下所示:
> 仅返回右表 `ClassId=1` 的匹配记录,左表中无匹配的记录会被过滤掉。
```csharp
select * from Students s left join Class c on s.ClassId=c.ClassId WHERE c.ClassId=1
```
### 区别总结:
> 一句话概括:ON用作于生成临时表时的条件筛选,WHERE用作于对临时表中的记录进行过滤。
- ON条件是在生成临时表时使用的条件,它不管ON中的条件是否为真,都会返回左边表中的记录(以左连接为例)。
- WHERE条件是在临时表生成好后,再对临时表产生的数据进行过滤条件筛选。
本文来自投稿,不代表本站立场,如若转载,请注明出处:http//www.knowhub.vip/share/2/864
- 热门的技术博文分享
- 1 . ESP实现Web服务器
- 2 . 从零到一:打造高效的金仓社区 API 集成到 MCP 服务方案
- 3 . 使用C#构建一个同时问多个LLM并总结的小工具
- 4 . .NET 原生驾驭 AI 新基建实战系列Milvus ── 大规模 AI 应用的向量数据库首选
- 5 . 在Avalonia/C#中使用依赖注入过程记录
- 6 . [设计模式/Java] 设计模式之工厂方法模式
- 7 . 5. RabbitMQ 消息队列中 Exchanges(交换机) 的详细说明
- 8 . SQL 中的各种连接 JOIN 的区别总结!
- 9 . JavaScript 中防抖和节流的多种实现方式及应用场景
- 10 . SaltStack 远程命令执行中文乱码问题
- 11 . 推荐10个 DeepSeek 神级提示词,建议搜藏起来使用
- 12 . C#基础:枚举、数组、类型、函数等解析
- 13 . VMware平台的Ubuntu部署完全分布式Hadoop环境
- 14 . C# 多项目打包时如何将项目引用转为包依赖
- 15 . Chrome 135 版本开发者工具(DevTools)更新内容
- 16 . 从零创建npm依赖,只需执行一条命令
- 17 . 关于 Newtonsoft.Json 和 System.Text.Json 混用导致的的序列化不识别的问题
- 18 . 大模型微调实战之训练数据集准备的艺术与科学
- 19 . Windows快速安装MongoDB之Mongo实战
- 20 . 探索 C# 14 新功能:实用特性为编程带来便利