Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >SQL中关于Join、Inner Join、Left Join、Right Join、Full Join、On、 Where区别

SQL中关于Join、Inner Join、Left Join、Right Join、Full Join、On、 Where区别

作者头像
追逐时光者
发布于 2019-08-28 04:18:27
发布于 2019-08-28 04:18:27
12.9K140
代码可运行
举报
文章被收录于专栏:编程进阶实战编程进阶实战
运行总次数:40
代码可运行

前言:

  今天主要的内容是要讲解SQL中关于Join、Inner Join、Left Join、Right Join、Full Join、On、 Where区别和用法,不用我说其实前面的这些基本SQL语法各位攻城狮基本上都用过。但是往往我们可能用的比较多的也就是左右连接和内连接了,而且对于许多初学者而言不知道什么时候该用哪种语法进行查询,并且对于左右,或者内连接查询的时候关于ON 和Where 的作用也是模糊不清的,说不出其中的一个大概的差别,因此接下来请容我把它们好好描述一遍。

数据库(MS Sql Server)表结构和对应数据:

Students 学生表:

Class 班级表:

Join(where联立查询):

概念:用于两表或多表之间数据联立查询

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from Students s,Class c where s.ClassId=c.ClassId

Inner Join(内连接查询):

概念:与Join相同,两表或多表之间联立查询数据,因此我们在使用多表join查询的时候既可以使用where关联,也可以是inner join关联查询

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from Students s inner join  Class c  on s.ClassId=c.ClassId

Left Join(左连接查询):

概念:以左表中的数据为主,即使与右表中的数据不匹配也会把左表中的所有数据返回

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from Students s left join  Class c  on s.ClassId=c.ClassId

Right Join(右连接查询):

概念:与Left Join的用法相反,是以右表中的数据为主,即使左表中不存在匹配数据也会把右表中所有数据返回

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from Students s right join  Class c  on s.ClassId=c.ClassId

Full Join(全连接查询):

概念:返回表中所有的数据数据,无论匹配与否

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from Students s Full JOIN  Class c  on s.ClassId=c.ClassId

On、Where的异同:

这两个概念中也是绝大多数人无法区分到底它们两者之间有何区别,我什么时候使用On,什么时候使用Where,下面将分别展示两者的异同。

ON的使用无论是左右内全都使用到了On来进行关联:

对于Inner Join 的作用就是起到了与where相同的作用条件筛选:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from Students s inner JOIN  Class c  on s.ClassId=c.ClassId and s.Sex='男'
对于左右连接而言,无论查询条件是否满足都会返回对应所指向的那边的所有数据:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
select * from Students s left join  Class c  on s.ClassId=c.ClassId and s.Sex='男'  
对于Full Join 而言无论,只有同时满足的时候才会返回全部关联的数据,假如有一方不满足返回以左边的表数据为基准返回:
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
--全连接
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的用法就不描述了因为这个咱们用的都比较多,下面说明一下两者的概念问题:

1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录(以左连接为例)。 2、where条件是在临时表生成好后,再对临时表产生的数据进行过滤条件筛选。

结论:on用作于生成临时表时的条件筛选,where用作于对临时表中的记录进行过滤。

总结:

  最后我想说的是,有时候我们总认为概念性的东西很简单而忽视了实践。其实往往一些基础性的东西才是我们为往后构造的万丈高楼的前提,坚持实践,坚持动手,你会发现许多你没有想到过的问题哟!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-04-29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
1 条评论
热度
最新
where 条件并非是对临时表,而是对相关的表整体查询之前就筛选了,优先级最高
where 条件并非是对临时表,而是对相关的表整体查询之前就筛选了,优先级最高
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
工作面试必备:SQL 中的各种连接 JOIN 的区别总结!
尽管大多数开发者在日常工作中经常用到Join操作,如Inner Join、Left Join、Right Join等,但在面对特定查询需求时,选择哪种Join类型以及如何使用On和Where子句往往成为一大挑战。特别是对于初学者而言,这些概念可能显得抽象且难以区分。在实际应用中,错误地使用Join类型或混淆On与Where子句的功能,都可能导致数据查询结果的不准确或遗漏关键信息。
追逐时光者
2025/03/20
2110
工作面试必备:SQL 中的各种连接 JOIN 的区别总结!
sql连接查询(inner join、full join、left join、 right join)
需求:查询哪个顾客(customer_name)在哪一天(create_time)消费了多少钱(money)
用户2409797
2018/08/30
7.9K0
sql连接查询(inner join、full join、left join、 right join)
inner join、outer join、right join、left join 之间的区别
一、sql的left join 、right join 、inner join之间的区别   left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录    right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录   inner join(等值连接) 只返回两个表中联结字段相等的行        outer join(外连接) 可分为左外连接left outer join和右外连接right outer join
静谧的小码农
2019/07/04
5.1K0
面试官:left join后用on还是where?区别真的很大!
“写 SQL 查询时,你是否也曾纠结过,条件到底该放在 JOIN 上还是 WHERE 上?每次写到这里,脑海中都会浮现出这两个选项的优劣对比,就像是在选择两个看似相似却又略有不同的武器,打击目标的效率可能会因此大相径庭。那么,这两者到底有何不同?今天,我们就来一探究竟。”
一只牛博
2025/05/31
710
面试官:left join后用on还是where?区别真的很大!
SQL语句中 left join 后用 on 还是 where,区别大了!
前天写SQL时本想通过 A left B join on and 后面的条件来使查出的两条记录变成一条,奈何发现还是有两条。
捡田螺的小男孩
2021/06/15
1.3K0
SQL语句中 left join 后用 on 还是 where,区别大了!
SQLserver数据库之基本增删改查操作(2)
1.新增操作 --插入单行数据 insert into 表名(列名) values (列值) insert into Department(DepName) values(''); --直接拿现有表数据创建一个新表并填充 select 新建表列名 into 新建表名 from 原表名 select EmpId,EmpName into student from Employee; --将现有表数据添加到一个已有表 insert into 已有的新表(列名) select 原表列名 from 原
闻语博客
2021/01/21
1.1K0
MySQL多表联合查询
例 2:查询 tb_course 表中的 id 字段和 tb_students_info 表中的 course_id 字段相等的内容
Alone-林
2022/08/20
10.9K0
详解SQL Server连接(内连接、外连接、交叉连接)
在查询多个表时,我们经常会用“连接查询”。连接是关系数据库模型的主要特点,也是它区别于其它类型数据库管理系统的一个标志。
程序猿小亮
2021/01/28
4.6K0
京东面试官问:LEFT JOIN 关联表中用 ON 还是 WHERE 跟条件有什么区别?
之前有码友去京东面试,被问到 LEFT JOIN 关联表中用 ON 还是 WHERE 跟条件有什么区别,很快就答出来了,可是追问什么原因造成这一情况的,一时没回答上来。
JAVA葵花宝典
2021/05/11
4500
京东面试官问:LEFT JOIN 关联表中用 ON 还是 WHERE 跟条件有什么区别?
SQL中 inner join、left join、right join、full join 到底怎么选?详解来了
作为一名CURD工程师,联表查询应该就算是一项相对复杂的工作了吧,如果表结构复杂一点,左一连,右一连,内一连再加上外一连,很可能就被绕晕的,最终得到的数据集就不是自己理想中的结果;
一行Java
2022/04/07
1.1K0
SQL中 inner join、left join、right join、full join 到底怎么选?详解来了
工作总结之因为笛卡尔积问题写SQL搞了半天[害](附笛卡尔积总结)
文章目录 背景 需求 解决过程 结果 多表连接简介 背景 管控组同事反馈:宿舍总数异常,加起来的间数比深圳市人口都多,无疑数据是异常的 需求 使宿舍数据恢复正常。 解决过程 尝试过左连接,右连
Maynor
2022/06/12
1.8K0
工作总结之因为笛卡尔积问题写SQL搞了半天[害](附笛卡尔积总结)
Join,left join,right join(1)--连接原理(三十九)
前面说了mysql优化器访问数据库的方法有const,ref,ref_or_null,range,index,all。然后又分为条件全部是索引回表查询,和条件有非索引查询,则需要回表之后,在过滤。又有intersection合并索引和union并集索引,当两个单独二级索引查询,不是联合索引查询,可能会触发这两个索引查询,用and是intersection,用or是union查询,触发有两个注重点:
keying
2022/07/26
5050
【MySQL】多表联合查询、连接查询、子查询「建议收藏」
内连接:[inner] join:从左表中取出每一条记录,去右表中与所有的记录进行匹配: 匹配必须是某个条件在左表中与右表中相同最终才会保留结果,否则不保留.
全栈程序员站长
2022/08/02
5.6K0
【MySQL】多表联合查询、连接查询、子查询「建议收藏」
关于MySQL多表联合查询,你真的会用吗?
上节课给大家介绍了MySQL子查询的基本内容,具体可回顾MySQL子查询的基本使用方法(四),本节课我们准备给大家介绍MySQL的多表联合查询。大家都知道,MySQL多表联合查询包括内连接、外连接、笛卡尔积连接查询三种。今天我们先重点介绍常用的外连接与内连接查询,即left join /right join/inner join的基本用法。
用户7569543
2021/11/02
9.8K0
图解 SQL 里的各种 JOIN
从业以来主要在做客户端,用到的数据库都是表结构比较简单的 SQLite,以我那还给老师一大半的 SQL 水平倒也能对付。现在偶尔需要到后台的 SQL Server 里追查一些数据问题,就显得有点捉襟见肘了,特别是各种 JOIN,有时候傻傻分不清楚,于是索性弄明白并做个记录。
芋道源码
2019/10/29
8860
MySQL数据库基础(十一):多表查询
连接查询可以实现多个表的查询,当查询的字段数据来自不同的表就可以使用连接查询来完成。
Lansonli
2024/03/19
2220
MySQL数据库基础(十一):多表查询
10 分钟,带你彻底掌握 SQL 多表查询(建议收藏)
多表查询,也称为多表连接查询;作为关系型数据库最主要的查询方式,在日常工作中被广泛使用
AirPython
2021/02/05
1.2K0
10 分钟,带你彻底掌握 SQL 多表查询(建议收藏)
如何在 SQL 中使用 LEFT、RIGHT、INNER、OUTER、FULL 和 SELF JOIN?
在进行复杂的分析处理和数据发现时,一个表的数据通常不足以提供重要的见解,因此需要合并多个表。 SQL,作为与关系数据库通信的一种方法,允许您在表之间创建关系.
从大数据到人工智能
2022/03/22
2.4K0
如何在 SQL 中使用 LEFT、RIGHT、INNER、OUTER、FULL 和 SELF JOIN?
高级SQL查询-(聚合查询,分组查询,联合查询)[通俗易懂]
当遇到常见的统计总数、计算平局值等操作,可以使⽤聚合函数来实现,常见的聚合函数有:
全栈程序员站长
2022/09/05
5.2K0
面试官:left join 后用 on 和 where 有什么区别?
哈喽,我是狗哥。前天写 SQL 时本想通过 A left B join on and 后面的条件来使查出的两条记录变成一条,奈何发现还是有两条。
JavaFish
2022/01/17
6500
面试官:left join 后用 on 和 where 有什么区别?
推荐阅读
相关推荐
工作面试必备:SQL 中的各种连接 JOIN 的区别总结!
更多 >
交个朋友
加入腾讯云官网粉丝站
蹲全网底价单品 享第一手活动信息
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验