数据库 -- 内连接、外连接和自然连接
自然连接
自然连接作用于两个关系(也可理解为两个表),并产生一个关系作为结果。
相比于笛卡尔积,它会将第一个关系和第二个关系的所有出现的元组(即数据表的行)都进行连接。而自然连接只考虑哪些在两个关系模式中都出现的且取值相同的元组对。
另外需要注意的是,自然连接不会重复列出在两个关系都出现的属性。而且结果的顺序也是有规定的:先是两个关系模式中的共同属性,然后是只出现在第一个关系的属性,最后是只出现在第二个关系模式的属性。
Sql 格式如下:
select A1, A2, ... An
from r1 natural join r2 natural join ... natural join rm
where P;
举个栗子:
select name, title
from instrucor natural join teaches, course
where teaches.course_id = coures.course_id
解释:先计算 instructor 和 teches 的自然连接得到结果1,然后计算结果1与course的笛卡尔积,最后where子句在结果中提取这样的元组。
外连接
实际上外连接有三种形式:
- 左外连接(left outer join) : 只保留出现在左外连接运算之前(左边)的关系中的元组。
- 右外连接(right outer join) : 只保留出现在右外连接运算之后(右边)的关系中的元组。
- 全外连接(full outer join) : 保留出现在两个关系的元组。
简单来讲,左外连接就是在进行两个表的匹配时,对于左边表出现的每一个元组:
如果右边的表存在对应的匹配项,则直接匹配列出对应的结果;
如果右边的表不存在对应的匹配项,则需要在右边表的列全都补上空值,再列出结果。
举个栗子:
select ID
from t_student natural left outer join t_takes
这样,t_student 表中的所有元组都列出在结果中,如果在 t_takes 表中存在匹配项,则分别取对应的匹配值,没有则取空。
右外连接则相反,对于右边表出现的每一个元组:
如果左边的表存在对应的匹配项,则直接匹配列出对应的结果;
如果左边的表不存在对应的匹配项,则需要在右边表的列全都补上空值,再列出结果。
全外连接可以理解为左外连接和右外连接的组合。即左右两侧的关系中所有元组都添加到结果中,不匹配的添上空值。
内连接
不保留未匹配元组的连接运算都称为内连接运算(inner join),sql查询中,当join子句没有使用outer前缀,默认情况下都为内连接。
总结
连接类型 | 连接条件 |
---|---|
inner join | natural |
left outer join | on |
right outer join | using (A1, A2, … An ) |
full outer join |
在上表中,任意的连接形式(内连接、左外连接、右外连接或全外连接)可以和任意的连接条件(自然连接、using条件连接或on条件连接)进行组合。
数据库 -- 内连接、外连接和自然连接相关推荐
- 数据库:笛卡儿积、连接、等值连接、自然连接、外连接、嵌套循环连接、排序合并连接、索引连接和哈希连接
写在前面 连接是数据库算法的一个重要内容,但数据库的知识有些忘了,最近刚好需要,就又看着笔记重新整理了一遍. 一.笛卡儿积 先来从笛卡儿积开始说起.笛卡儿积是集合的一种基本运算.假设有两个表 R R ...
- MySQL 学习笔记(15)— 连接查询(内连接、左外连接、右外连接、全外连接、交叉连接、自然连接等)
本文参考:https://gitbook.cn/gitchat/column/undefined/topic/5db92b68a9c3a53bc3800eff SQL 支持的连接查询包括内连接.外连接 ...
- Mysql表连接:内连接、外连接、交叉连接、自然连接真的都不一样吗
文章目录 前言 测试环境 创建测试数据 对比测试 内连接 交叉连接 外连接 左外连接 右外连接 自然连接 一般自然连接 自然左外连接 自然右外连接 STRAIGHT_JOIN 逗号分隔连接表 各种连接 ...
- 深入分析内连接、外连接、左连接、右连接、等值连接、自然连接和自连接之间的区别,看这篇就够了!
多表查询经常用到连接,各种连接之间的区别应该注意总结. 首先大概认识各种连接的关系和由来: 表之间的连接常有以下两种: 一.:在SELECT语句的WHERE子句中使用比较运算符给出连接条件,对表进行连 ...
- 内连接、外链接、自然连接、全连接
oracle sql的连接类型有: 内连接(inner join也叫join) 外链接:分为 左连接left join . 右连接right join 自然连接:natrue join.特点:连接后的 ...
- 如何画关系代数的连接图?(数据库关系代数中笛卡儿积、θ连接、等值连接、自然连接、外连接)
摘要:微信搜索[三桥君] 前言:关系代数中的连接是一个重要而且容易混乱的知识点,我通过查阅很多资料总结了与连接有关的知识点,并发现了他们之间的关系.本文通过理论知识先了解连接相关的重要名词意思,然后通 ...
- oracle自连接和自然连接,一个θ连接,equijoin和自然连接之间的区别
尽pipe解释确切差异的答案没有问题,但我想说明关系代数是如何转化为SQL的,以及这三个概念的实际价值是什么. 你的问题的关键概念是join的想法. 为了理解一个连接,你需要理解一个笛卡尔乘积(这个例 ...
- 数据库--关系代数扩展操作(交、thetaθ连接、等值连接、自然连接)
- jxse2.6连接外网rdv一直连接不上,而相同的代码用jxse2.7却能连上
一直以为2.6中的bug会少一些,所以用2.6做开发:之前测试一直是在同一台 机器上,所以没啥问题:最近在外网设置了一个rdv,却一直连不上,困扰了n久,尝试各种方式都不起作用.最后想起以前开发的代码 ...
- 数据库:区分笛卡儿积、自然连接、内连接、等值连接、外连接
假设存在两张表 c 和 p,这里使用的是MySQL数据库. 数据表 c: course_id title dept_name credits BIO-301 Genetics Biology 4 CS ...
最新文章
- AI与基因科学的对话:从“人工智能”到“动物智能”
- 使用git提交到github,每次都要输入用户名和密码的解决方法
- opengl加载显示3D模型SIB类型文件
- .NET(C#):使用SmtpClient发送带有图片和附件的电子邮件
- 2022年中国美妆护肤品行业投资研究报告
- (matlab)自定义图像(matlab)
- 计算机课程教改论文,计算机公共课教学改革论文
- idea 新建java类 乱码,Intellij IDEA 2019 最新乱码问题及解决必杀技(必看篇)
- LNMP架构数据迁移到NFS存储
- 怎么写c++ documentation_球鞋鞋标怎么看真假、有几种 耐克鞋标鉴定方法推荐
- 偶极子阵列天线(带反射板)+单层天线罩
- githut iOS 开源项目
- visio设置图片默认大小_学习PS第6课(图片大小设置)
- 解决图片无法打开的问题: “Windows 照片查看器无法显示此图片,因为计算机上的可用内存可能不足”
- Oriented R-CNN for Object Detection 论文解读
- ABBYY OCR SDK免费试用了!
- Node.js开发入门—使用jade模板引擎
- 【计算机毕业设计】23.网上商城购物系统+vue
- 产品经理圈:现今Axure RP主流安装使用版本是什么?
- 内核模式代码签名走查(一)