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

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

前言:

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

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

Students 学生表:

image.png

Class 班级表:

image.png

Join(where联立查询):

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

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

image.png

Inner Join(内连接查询):

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

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

image.png

Left Join(左连接查询):

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

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

image.png

Right Join(右连接查询):

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

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

image.png

Full Join(全连接查询):

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

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

image.png

On、Where的异同:

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

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

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

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

image.png

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

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

image.png

对于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='男' 

image.png

image.png

Where的用法就不描述了因为这个咱们用的都比较多,下面说明一下两者的概念问题:

1、on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录(以左连接为例)。

2、where条件是在临时表生成好后,再对临时表产生的数据进行过滤条件筛选。

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

总结:

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

 

相关文章
|
6月前
|
SQL
SQL JOIN
【11月更文挑战第06天】
84 4
|
7月前
|
SQL 关系型数据库 MySQL
图解 SQL 里的各种 JOIN
用文氏图表示 SQL 里的各种 JOIN,一下子就理解了。
135 2
|
8月前
|
关系型数据库 MySQL 网络安全
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
5-10Can't connect to MySQL server on 'sh-cynosl-grp-fcs50xoa.sql.tencentcdb.com' (110)")
|
10月前
|
SQL 存储 监控
SQL Server的并行实施如何优化?
【7月更文挑战第23天】SQL Server的并行实施如何优化?
286 13
|
10月前
|
SQL
解锁 SQL Server 2022的时间序列数据功能
【7月更文挑战第14天】要解锁SQL Server 2022的时间序列数据功能,可使用`generate_series`函数生成整数序列,例如:`SELECT value FROM generate_series(1, 10)。此外,`date_bucket`函数能按指定间隔(如周)对日期时间值分组,这些工具结合窗口函数和其他时间日期函数,能高效处理和分析时间序列数据。更多信息请参考官方文档和技术资料。
175 9
|
10月前
|
SQL 存储 网络安全
关系数据库SQLserver 安装 SQL Server
【7月更文挑战第26天】
122 6
|
10月前
|
存储 SQL C++
对比 SQL Server中的VARCHAR(max) 与VARCHAR(n) 数据类型
【7月更文挑战7天】SQL Server 中的 VARCHAR(max) vs VARCHAR(n): - VARCHAR(n) 存储最多 n 个字符(1-8000),适合短文本。 - VARCHAR(max) 可存储约 21 亿个字符,适合大量文本。 - VARCHAR(n) 在处理小数据时性能更好,空间固定。 - VARCHAR(max) 对于大文本更合适,但可能影响性能。 - 选择取决于数据长度预期和业务需求。
788 1
|
10月前
|
SQL Oracle 关系型数据库
MySQL、SQL Server和Oracle数据库安装部署教程
数据库的安装部署教程因不同的数据库管理系统(DBMS)而异,以下将以MySQL、SQL Server和Oracle为例,分别概述其安装部署的基本步骤。请注意,由于软件版本和操作系统的不同,具体步骤可能会有所变化。
817 3
|
10月前
|
SQL 存储 安全
数据库数据恢复—SQL Server数据库出现逻辑错误的数据恢复案例
SQL Server数据库数据恢复环境: 某品牌服务器存储中有两组raid5磁盘阵列。操作系统层面跑着SQL Server数据库,SQL Server数据库存放在D盘分区中。 SQL Server数据库故障: 存放SQL Server数据库的D盘分区容量不足,管理员在E盘中生成了一个.ndf的文件并且将数据库路径指向E盘继续使用。数据库继续运行一段时间后出现故障并报错,连接失效,SqlServer数据库无法附加查询。管理员多次尝试恢复数据库数据但是没有成功。
|
9月前
|
SQL 安全 Java
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接。错误:“The server selected protocol version TLS10 is not accepted by client
707 0

热门文章

最新文章