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学习笔记

联结

创建联结的方式非常简单,指定要联结的表和它们的联结方式即可(Table1.PRIMARY_KEY=Table2.FOREIGN_KEY ,即表1.主键=表2.外键

在创建联结时,实际上是将第一个表的每一行与第二个表的每一行配对(形成一个 笛卡儿积1),而不管他们逻辑上是否能够匹配。因此,为了获得想要的唯一结果,需要指定联结的键

内联结(等值联结)

等值联结(equijion)

使用 Where 子句进行联结

Select Table1.Columns_, Table1.Columns_ 
From Table1, Table2
Where Table1.ColumnX = Table2.ColunmY

内联结(inner join)

以上语法基于两个表之间的相等测试实现,也称为 内联结。我们可以使用不同的语法实现,明确指定其联结类型:

Select Table1.Column_, Table2.Column_ 
From Table1 Inner Join Table2
On Table1.ColumnX= Table2.ColumnY

自联结(self-join)

顾名思义,自联结就是数据表自身的联结。
使用自联结时,首先应学会使用 表别名,使用方法不做赘述。

为了更好的理解 自联结,我们首先假设有以下表 Table_

NmaeCityYears
ChengDu25
WuHan27
ChongQing24
WuHan28

戊 | WuHan | 19
己 | Chengdu | 24
庚 | BeiJing | 24

要求筛选出和 “乙” 在同一个城市(WuHan)的人的信息,代码如下:

Select t1.* 
From Table_ As t1, Table_ As t2
Where t1.City = t2.City
	  And t2.Nmae = '乙'

首先两个表会联结成为一个 笛卡儿积1表,其次通过 t1.City = t2.City 先过滤成为如下表:

t1.Nmaet1.Cityt1.Yearst2.Nmaet2.Cityt2.Years
ChengDu25ChengDu25
WuHan27WuHan27
WuHan27WuHan28
ChongQing24ChongQing24
WuHan28WuHan27
WuHan28WuHan28

然后, t2.Name = '乙' 过滤出姓名符合要求的人的表:

t1.Nmaet1.Cityt1.Yearst2.Nmaet2.Cityt2.Years
WuHan27WuHan27
WuHan28WuHan27

最终结合 Select 语句筛选出目标内容。

如例,Table_ 表在 From 语句中出现了两次,这是合法的。但是在 SelectWhere 语句中对列的引用时,存在歧义性。故此,为了避免歧义,必须对表命别名,并对列进行完全引用。

自然联结(natural join)

标准的联结(前文的 内联结)返回所有数据(这里主要指数据列),相同的列可能出现一次或者多次(被联结的列),而自然联结排除多次出现,使每个列只出现一次。
但是标准的SQL语句不能完成这一工作,需要我们手动完成,通常情况下是我们在 Select 语句中,对其中一个表使用通配符 Table1.*,对其它表使用完整的列名 Table2.Column1Table2.Column2

外联结(outer join)

联结 (没有过滤条件时)实质上是两个表的行的排列组合,形成一个笛卡儿积1
内联结又称等值联结,在联结的基础上过滤出在定义列中能够关联(值相等)的数据行
外连接 则在 内联结2 的基础上,还返回部分不能关联的数据行,外连接是分方向的,有 Left Outer JoinRight Outer Join,部分数据库还支持 全外连接(Full Outer Join

左外连接(Left Outer Jion)

Select t1.*, t2.*
From Table1 as t1 Left Outer Join Table2 as t2
On t1.ColumnX = t2.ColumnY

Left 指的是返回 Outer Jion 左侧表(t1)的所有行,右侧表(t2)有关联值时,返回关联行;右侧表(t2)没有相应的关联值时,返回 Null

如果你 Excel 还可以,懂得 VLookup 函数的话,可以用来对比理解:
在这里, t1.ColumnX 相当于 要查找的值,t2 相当于被查找的数据表,t2.ColumnY 相当于被查找的列。当 t1.ColumnX 存在时(即在 t2.ColumnY 中可以匹配到时),VLookup 函数返回的是对应的值,SQL返回对应的数据行;当不存在时,VLookup 函数返回的是错误,而 SQL里面返回的是 Null。

右外连接(Right Outer Jion)

Select t1.*, t2.*
From Table1 as t1 Right Outer Join Table2 as t2
On t1.ColumnX = t2.ColumnY

同左外连接同理,返回的是 Outer Jion 右侧表的所有行,左侧表匹配到关联之的,返回数据行;左侧表没有匹配到值的部分返回 Null

全外连接(Full Outer Jion)

Select t1.*, t2.*
From Table1 as t1 Full Outer Join Table2 as t2
On t1.ColumnX = t2.ColumnY

全外连接则是兼顾以上两者,左右两侧表的所有行,能够关联的进行关联,不能够关联的部分全部填充 Null


  1. 由没有联结条件的多个表联结,返回的结果为笛卡儿积。检索出的表行数目时几个表行数的乘积,实际上相当于两个表中所有行的排列组合。 ?? ?? ??

  2. 注意,这里不是笔误。确实是“内联结”,而非“联结”。“联结”是排列组合,而外连接更接近“匹配” ??

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-02-06 13:53:32  更:2022-02-06 13:54:47 
 
开发: 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/24 13:34:02-

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