内连接、左外连接、右外连接、交叉连接区别

在之前,我对MSSQL中的内连接和外连接所得出的数据集不是很清楚。这几天重新温习了一下SQL的书本,现在的思路应该是很清楚了,现在把自己的理解发出来给大家温习下。希望和我一样对SQL的连接语句不太理解的朋友能够有所帮助。(发这么菜的教程,各位大大们别笑话偶了,呵:D ) 有两个表A和表B。表A结构如下: Aid:int;标识种子,主键,自增ID Aname:varchar 数据情况,即用select * from A出来的记录情况如下图1所示:
 



图1:A表数据
表B结构如下: Bid:int;标识种子,主键,自增ID Bnameid:int 数据情况,即用select * from B出来的记录情况如下图2所示:
 


图2:B表数据
为了把Bid和Aid加以区分,不让大家有误解,所以把Bid的起始种子设置为100。有SQL基本知识的人都知道,两个表要做连接,就必须有个连接字段,从上表中的数据可以看出,在A表中的Aid和B表中的Bnameid就是两个连接字段。下图3说明了连接的所有记录集之间的关系: 

图3:连接关系图 
现在我们对内连接和外连接一一讲解。 1.内连接:利用内连接可获取两表的公共部分的记录,即图3的记录集C 语句如下:Select * from A JOIN B ON A.Aid=B.Bnameid 运行结果如下图4所示:其实select * from A,B where A.Aid=B.Bnameid与Select * from A JOIN B ON A.Aid=B.Bnameid的运行结果是一样的。
 
 
图4:内连接数据

 2.外连接:外连接分为两种,一种是左连接(Left JOIN)和右连接(Right JOIN)
 (1)左连接(Left JOIN):即图3公共部分记录集C+表A记录集A1。
 语句如下:select * from A Left JOIN B ON A.Aid=B.Bnameid 
运行结果如下图5所示:
 


图5:左连接数据     

说明:在语句中,A在B的左边,并且是Left Join,所以其运算方式为:A左连接B的记录=图3公共部分记录集C+表A记录集A1
在图3中即记录集C中的存在的Aid为:2 3 6 7 8 
图1中即表A所有记录集A中存在的Aid为:1 2 3 4 5 6 7 8 9  
表A记录集A1中存在的Aid=(图1中即A表中所有Aid)-(图3中即记录集C中存在的Aid),最终得出为:1 4 5 9  
由此得出图5中A左连接B的记录=图3公共部分记录集C+表A记录集A1, 最终得出的结果图5中可以看出Bnameid及Bid非NULL的记录都为图3公共部分记录集C中的记录;Bnameid及Bid为NULL的Aid为1 4 5 9的四笔记录就是表A记录集A1中存在的Aid。
 
(2)右连接(Right JOIN):即图3公共部分记录集C+表B记录集B1。

语句如下:select * from A Right JOIN B ON A.Aid=B.Bnameid   运行结果如下图6所示:
 

 


图6:右连接数据 
说明: 在语句中,A在B的左边,并且是Right Join,所以其运算方式为:A右连接B的记录=图3公共部分记录集C+表B记录集B1 
在图3中即记录集C中的存在的Aid为:2 3 6 7 8  
图2中即表B所有记录集B中存在的Bnameid为:2 3 6 7 8 11  
表B记录集B1中存在的Bnameid=(图2中即B表中所有Bnameid)-(图3中即记录集C中存在的Aid),最终得出为:11  
由此得出图6中A右连接B的记录=图3公共部分记录集C+表B记录集B1, 最终得出的结果图6中可以看出Aid及Aname非NULL的记录都为图3公共部分记录集C中的记录;Aid及Aname为NULL的Aid为11的记录就是表B记录集B1中存在的Bnameid。    

交叉连接:两张表联合没有条件情况下,条数 = 图1 * 图2

交叉连接不带WHERE子句,它返回被连接的两个表所有数据行的笛卡尔积,返回结果集合中的数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。

转载于:https://www.cnblogs.com/zhangj391/p/6553371.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/572651.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

winform数据传递到html,C#下winform和JS的互相调用和传参(webbrowser)

不多说,直接上代码,winform下button1调用js函数,从html页面获取值,然后JS调用WINFORM的函数,传送获取到的值到winform并通过messagebox的方法show出来。一步到位, winform调用JS函数 和JS调用winform函数的…

xcode开发html5工具,5个Xcode开发调试技巧

1.Enable NSZombie Objects(开启僵尸对象)Enable NSZombie Objects可能是整个Xcode开发环境中最有用的调试技巧。这个技巧非常非常容易追踪到重复释放的问题。该技巧会以非常简洁的方式打印指出重复释放的类和该类的内存地址。怎么开启僵尸对象呢?首先打开“Edit Sc…

Unity 协程深入解析与原理

先来直接放一段代码 1 using System.Collections;2 using System.Collections.Generic;3 using UnityEngine;4 5 public class CoroutineTest : MonoBehaviour6 {7 8 void Start()9 { 10 Debug.Log("Start Begin"); 11 12 CustomCoroutine …

NAT协议详解

NAT(Network Address Translation,网络地址转换)是将IP数据报头中的IP地址转换为另一个IP地址的过程。在实际应用中,NAT主要用于实现私有网络访问公共网络的功能。这种通过使用少量的公网IP地址代表较多的私网IP地址的方式&#x…

计算机应用基础文字处理软件应用职高PPT,《计算机应用基础》职高2010修订版_教(学)案...

《计算机应用基础》职高2010修订版_教(学)案 (93页)本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!39.9 积分. .《计算机应用基础》职高2010修订版 教案第一章 计算机基础知识第二章 中文…

快速排序【记录一下代码】

本文仅用作学习记录,大神勿喷O(∩_∩)O~ 代码一、百度百科C语言版本代码,参考数据结构p274(清华大学出版社,严蔚敏) 1 void Qsort1(int a[], int low, int high)//百度百科C语言版本代码 2 {/*参考数据结构p274(清华大学出版社,严蔚敏)*/3 …

eclipse 修改java代码不重启服务器 生效配置

1.本文目的:用tomcat进行web开发时,修改Java代码往往要重启代码,当工程较大启动较慢时,严重影响效率,本文通过eclipse下tomcat开发和发布web程序时,对一些Java代码一般修改(不是增减方法、变量&…

Shell第二篇:正则表达式和文本处理工具

一 什么是正则 正则就是用一些具有特殊含义的符号组合到一起(称为正则表达式)来描述字符或者字符串的方法。或者说:正则就是用来描述一类事物的规则。 生活中处处都是正则: 比如我们描述:4条腿 你可能会想到的是四条腿…

计算机二级办公软件高级应用难不难,计算机二级office难吗 考试内容是什么

相信很多的在校大学生或者已经开始工作的小伙伴都会有考虑过要考国二MsOffice高级应用考试,那么,计算机二级office难吗?考试内容是什么?计算机二级office难吗许多考生基础差,考生缺乏备考计划,超过70%的考生…

sed 解释正则表达式

以/etc/passwd文件为模板 1,删除文件每行的第一个字符。 2,删除文件每行的第二个字符。 3,删除文件每行的最后一个字符。 4,删除文件每行的倒数第二个字符。 5,删除文件每行的第二个单词。 转载于:https://www.cnblogs…

在windows下codeblocks中配置pthread库

转自:http://blog.csdn.net/u013172314/article/details/50846198 如果添加方法不正确,可能会出现pthread_create’未定义的引用,所以下面我讲一下正确的配置方法。 首先介绍一下我的安装平台和需要下载的工具包: win7 64位&#…

[Android-Appium]: 安卓自动化测试: 环境准备

安卓自动化测试:环境的准备: 在做安卓自动化测试之前,需要在你的电脑上做如下环境的准备, 我用的是 Appium做的自动化测试。 安装Appium server, 安装路径:http://appium.io/ https://bitbucket.org/app…

计算机考研8,计算机考研每日一练:第八天

平衡二叉树实现原理平衡二叉树构建的基本思想就是在构建二叉排序树的过程中,每当插入一个结点时,先检查是否因插入而破坏了树的平衡性,若是,则找出最小不平衡子树。在保持二叉排序树特性的前提下,调整最小不平衡子树中…

Python全栈开发:web框架们

Python的WEB框架 Bottle Bottle是一个快速、简洁、轻量级的基于WSIG的微型Web框架,此框架只由一个 .py 文件,除了Python的标准库外,其不依赖任何其他模块。 1234pip install bottleeasy_install bottleapt-get install python-bottlewget htt…

软件测试实验二

1.百度搜索seleniumIDE,进入官网http://www.seleniumhq.org/download/下载区下载软件 2.使用seleniumIDE录制脚本,打开IDE,录制脚本,并测试脚本 3.导出脚本,完成实验 转载于:https://www.cnblogs.com/wyp-run/p/661974…

计算机在管理会计应用中的作用,信息化在管理会计中的作用

信息化在管理会计中的作用在管理会计的日常工作中,需要进行大量的数据收集整理工作,会出现漏算错算等情况,加强管理会计软件的创新和研发,从而推进企业会计电算化。摘要:较比以往,信息技术不断发展,在人们的…

基于鸢尾花数据集的逻辑回归分类实践

基于鸢尾花数据集的逻辑回归分类实践 重要知识点 逻辑回归 原理简介: Logistic回归虽然名字里带“回归”,但是它实际上是一种分类方法,主要用于两分类问题(即输出只有两种,分别代表两个类别)&#xff0c…

校办研修之计算机培训简报,“2018校本研修培训”第二期学习简报

原标题:“2018校本研修培训”第二期学习简报校训校风:博教风学风:学习提升,共约成长洛阳市第二十六中学2018年校本研修培训学习简报(第二期)素材收集:数学组、物理组、生物组制 作:郭志伟、张志刚时 间&…

Python之路 day1 基础1 变量 for while 用户输入

一、 Python介绍 python的创始人为吉多范罗苏姆(Guido van Rossum)。1989年的圣诞节期间,吉多范罗苏姆为了在阿姆斯特丹打发时间,决心开发一个新的脚本解释程序,作为ABC语言的一种继承。 最新的TIOBE排行榜&#xff…

20155302 2016-2017-2 《Java程序设计》第六周学习总结

20155302 2016-2017-2 《Java程序设计》第6周学习总结 教材学习内容总结 Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入和输出两种所以一共四个):InputStream,Ou…