前言

尽管大多数开发者在日常工作中经常用到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区别和用法。

SQL连接JOIN图解

数据库表结构和对应数据

本文咱们用的是MS Sql Server作为数据操作示例。

Students 学生表:

Class 班级表:

Join(where联立查询)

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

select * from Students s,Class c where s.ClassId=c.ClassId

Inner Join(内连接查询)

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

select * from Students s inner join  Class c  on s.ClassId=c.ClassId

Left Join(左连接查询)

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

select * from Students s left join  Class c on s.ClassId=c.ClassId

Right Join(右连接查询)

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

select * from Students s right join  Class c  on s.ClassId=c.ClassId

Full Join(全连接查询)

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

select * from Students s Full JOIN  Class c  on s.ClassId=c.ClassId

On、Where的异同

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

On条件的作用:

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

对于inner join 的作用就是起到了与where相同的作用条件筛选:

select * from Students s inner join  Class c  on s.ClassId=c.ClassId and s.Sex='男'

对于左右连接而言,无论查询条件是否满足都会返回对应所指向的那边的所有数据:

select * from Students s left join  Class c  on s.ClassId=c.ClassId and s.Sex='男'

对于Full Join 而言无论,只有同时满足的时候才会返回全部关联的数据,假如有一方不满足返回以左边的表数据为基准返回:

--全连接
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 的匹配记录,左表中无匹配的记录会被过滤掉。

select * from Students s left join Class c on s.ClassId=c.ClassId WHERE c.ClassId=1

区别总结:

一句话概括:ON用作于生成临时表时的条件筛选,WHERE用作于对临时表中的记录进行过滤。

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

工作面试必备:SQL 中的各种连接 JOIN 的区别总结!的更多相关文章

  1. SQL中的左连接与右连接,内连接有什么不同

    SQL中的左连接与右连接,内连接有什么不同 我们来举个例子.天庭上面有一个管理系统:管理系统有个主表:主表记录着各个神仙的基本信息(我们把它当成表A).还有个表记录着他们这个神仙的详细信息(我们把它当 ...

  2. Sql中的内连接,左连接以及右连接区别

    转自:http://pangaoyuan.javaeye.com/blog/713177 有两个表A和表B. 表A结构如下: Aid:int:标识种子,主键,自增ID Aname:varchar 数据 ...

  3. 面试问题 - SQL 中存储过程与函数的区别

    SQL 中的存储过程与函数没有本质上的区别 函数 -> 只能返回一个变量. 函数可以嵌入到sql中使用, 可以在select 中调用, 而存储过程不行.  但函数也有着更多的限制,比如不能使用临 ...

  4. SQL中的内连接外连接和交叉连接是什么意思?

    内连接又分为等值连接.自然连接和不等连接三种. 外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN).右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接( ...

  5. Spark SQL中的几种join

    1.小表对大表(broadcast join) 将小表的数据分发到每个节点上,供大表使用.executor存储小表的全部数据,一定程度上牺牲了空间,换取shuffle操作大量的耗时,这在SparkSQ ...

  6. SQL中的left outer join,inner join,right outer join用法详解

    这两天,在研究SQL语法中的inner join多表查询语法的用法,通过学习,发现一个SQL命令,竟然涉及到很多线性代数方面的知识,现将这些知识系统地记录如下: 使用关系代数合并数据1 关系代数合并数 ...

  7. SSM框架的sql中参数注入(#和$的区别)

    <select id="findUsersByUserName2" resultType="java.util.Map" parameterType=&q ...

  8. Access与SQL中的IsNull(),IS NULL的区别

    Access也有IsNull函数,但意义和参数却和T-SQL中的不同. 在T-SQL(也就是SQL Server所支持的SQL语言)中,IsNull的作用是把空值替代成指定的值.然而在Access中, ...

  9. SQL中instr和like的使用区别

    1.instr函数 instr函数是一个字符串处理函数,它在Oracle/PLSQL中是返回子字符串在源字符串中的位置,如果在源串中没有找到子串,则返回0. instr函数定义如下: /* * 返回子 ...

  10. SQL中distinct 和 row_number() over() 的区别及用法

    1 前言 在咱们编写 SQL 语句操作数据库中的数据的时候,有可能会遇到一些不太爽的问题,例如对于同一字段拥有相同名称的记录,我们只需要显示一条,但实际上数据库中可能含有多条拥有相同名称的记录,从而在 ...

随机推荐

  1. Qt音视频开发3-vlc录像存储

    一.前言 录像功能是视频监控系统的常用功能,就是将打开的视频流或者视频文件重新保存成MP4文件,当然也可以保存成其他格式,一般默认用MP4比较好,比较标准一些,MP4格式的兼容性最好,基本上没有说那台 ...

  2. 昔日移动端IM明星 “米聊” 即将停止服务

    2021年1月19日,小米旗下米聊宣布,将于2021年2月19日12点停止米聊的服务. 1.以下消息来自米聊官网   2.关于米聊 米聊是小米科技出品的一款免费即时通讯工具,推出时间为:2010年12 ...

  3. JMeter HTTP Request 采样器全面解析与实战指南

    <JMeter HTTP Request 采样器全面解析与实战指南> 一.HTTP Request 采样器简介 宝子们,JMeter 里的 HTTP Request 采样器可厉害啦,它就像 ...

  4. c# WindowsCommunityToolkit--- Shade Animation

    WindowsCommunityToolkit: https://github.com/CommunityToolkit/WindowsCommunityToolkit You can also pr ...

  5. 史上最全JVM面试题和答案

    JVM概要介绍 JVM是Java Virtual Machine(Java虚拟机)的缩写. 虚拟机是一种抽象化的计算机,通过在实际的计算机上仿真模拟各种计算机功能来实现的. Java虚拟机有自己完善的 ...

  6. RFID基础——概念与分类

    RFID 的全称是射频识别技术(Radio Frequency Identification).是一项利用射频信号通过空间耦合(交变磁场或电磁场)实现无接触信息传递并通过所传递的信息达到识别目的的技术 ...

  7. DeepSeek V3 两周使用总结

    2024 年 12 月 26 日,杭州深度求索人工智能基础技术研究有限公司发布 DeepSeek-V3 大模型.官方宣称:(1)基于自研的 MoE 模型和 671B 参数,在 14.8T token ...

  8. 【忍者算法】从风扇叶片到数组轮转:探索轮转数组问题|LeetCode 189 轮转数组

    从风扇叶片到数组轮转:探索轮转数组问题 生活中的算法 想象你在看一个风扇缓缓转动,每次转动三个叶片的距离.原本在上方的叶片转到了右侧,原本在右侧的叶片转到了下方...这就是一个生动的轮转过程.再比如, ...

  9. 配置计算节点之间的SSH

    本文分享自天翼云开发者社区<配置计算节点之间的SSH>,作者:y****n 如果在管理程序之间调整或迁移实例,可能会遇到SSH(拒绝权限)错误.请确保每个节点都配置了SSH密钥验证,以便C ...

  10. 支持S3协议的S3cmd工具简单使用

    本文分享自天翼云开发者社区<支持S3协议的S3cmd工具简单使用>,作者:付****健 一:安装方法 #wget http://nchc.dl.sourceforge.net/projec ...