IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> SQL:sql连接那些事儿 -> 正文阅读

[大数据]SQL:sql连接那些事儿


前言

本篇针对sql中的连接相关概念进行一番整理

一、Join是什么

在Sql中,join(连接)存在的意义,就是将来自两个或多个表的行结合起来,返回多个表的查询结果,下面先用一张图直观地说明连接对搜索返回结果的影响
在这里插入图片描述

二、Join用法

1.内连接

内连接包括自然连接和相等连接
运算符:=、<> 之类的比较运算符
返回结果:使用比较运算符根据每个表共有的列的值匹配两个表中的行

为了方便查看,这里用table1和table2表示原始数据

table1
在这里插入图片描述
table2
在这里插入图片描述

自然连接

自然连接是一种特殊的等值连接,他要求两个关系表中进行连接的必须是 相同的属性列(名字相同),无须添加连接条件,并且在结果中消除重复的属性列

 Select * from table1 natural join table2

返回结果如下
在这里插入图片描述

相等连接

相等连接,相比较自然连接的不同之处在于,不同之处在于自然连接的是同名属性列的连接,而内连接则不要求两属性列同名,可以用using或on来指定某两列字段相同的连接条件,且不会消除同名属性列。

代码如下:

 Select * from table1 inner join table2 on table1.A=table2.E

最终返回结果如下
在这里插入图片描述
但是内连接时,某些属性值不同的元组会被抛弃,要解决这样的问题,则需要引入外连接

2.外连接

内连接是要显示两张表的内存,而外连接不要求如此,外连接可以依据连接表保留左表,右表或全部表的行为而分为左外连接右外连接和全连接。

LEFT JOIN(LEFT OUTER JOIN)

左外连接是在两表进行自然连接,只把左表要舍弃的保留在结果集中,右表对应的列上填null。

在这里插入图片描述

RIGHT JOIN (RIGHT OUTER JOIN)

右外连接是在两表进行自然连接,只把右表要舍弃的保留在结果集中,左表对应的列上填null。

 Select * from table1 right outer join table2 on table1.C=table2.C

在这里插入图片描述

FULL JOIN(FULL OUTER JOIN)

全连接在Mysql中并不直接支持,可以通过union的方式让左连接和右连接合并起来最终得到全连接

 Select * from table1 left outer join table2 on table1.C=table2.C
 UNION 
 Select * from table1 right outer join table2 on table1.C=table2.C

最终结果
在这里插入图片描述

关于Join和WHERE的区别

  • on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
  • where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉。

简单来说就是on不管条件是不是真的都会进行返回,但是where的话只会返回条件为真的结果

这里拿别人的相关例子简单进行举例记录

SELECT * FROM tbl_emp  a INNER JOIN tbl_dept b ON a.deptId = b.id; 

返回结果
在这里插入图片描述

SELECT * FROM tbl_emp  a LEFT JOIN tbl_dept b ON a.deptId = b.id WHERE b.id IS NULL; 

在这里插入图片描述

动手实践及参考博客

一文让你彻底理解SQL中的join

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-09-21 00:35:41  更:2022-09-21 00:40:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:29:27-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码