深入分析内连接、外连接、左连接、右连接、等值连接、自然连接和自连接之间的区别,看这篇就够了!
多表查询经常用到连接,各种连接之间的区别应该注意总结。
首先大概认识各种连接的关系和由来:
表之间的连接常有以下两种:
一、:在SELECT语句的WHERE子句中使用比较运算符给出连接条件,对表进行连接,将这种表示形式称为连接谓词表示形式。连接谓词中的比较符可以是<、<=、=、>、>=、!=、<>、!< 和 !>,当比较符为“=”时,就是等值连接,等值连接的结果中有重复列,在目标列中去除相同的字段名就是自然连接。
二、.以JOIN关键字指定的连接,T-SQL扩展了以JOIN关键字指定连接的表示方式,使表的连接运算能力有所增强,以JOIN关键字指定的连接有三种类型:内连接、外连接、交叉连接(笛卡尔积)。
下面详细分析各种连接方式的特点:
1.等值连接(相等连接):
USE PXSCJ
GO
SELECT XSB.* , CJB.*FROM XSB , CJBWHERE XSB.学号 = CJB.学号
使用”=”关系将表连接起来的查询,其查询结果中列出被连接表中的所有列,包括其中的重复列。
2.自然连接:
数据库应用中最常用的是“自然连接”,它在目标列中去除相同的字段名。
SELECT XSB.* , CJB.课程号, CJB.成绩FROM XSB , CJBWHERE XSB.学号= CJB.学号
进行自然连接运算要求两个表有共同属性(列),自然连接运算的结果表是在参与操作的两个表的共同属性上进行等值连接后,再去除重复的属性后所得的新表。
等值连接和自然连接的区别:
1)等值连接中不要求相等属性值的属性名相同,而自然连接要求相等属性值的属性名必须相同,即两关系只有在同名属性才能进行自然连接。
2)等值连接不将重复属性去掉,而自然连接去掉重复属性,也可以说,自然连接是去掉重复列的等值连接。
3.内连接
指定了INNER关键字的连接是内连接,内连接按照ON所指定的连接条件合并两个表,返回满足条件的行。内连接是系统默认的,可以省略INNER关键字。使用内连接后仍可使用WHERE子句指定条件。
例1 SELECT *FROM XSB INNER JOIN CJB ON XSB.学号 =CJB.学号
例2 SELECT 姓名, 成绩FROM XSB JOIN CJB ON XSB.学号 = CJB.学号 WHERE 课程号 = '206' AND 成绩>=80
4.自连接
自连接作为一种特例,可以将一个表与它自身进行连接,称为自连接。若要在一个表中查找具有相同列值的行,则可以使用自连接。使用自连接时需为表指定两个别名,且对所有列的引用均要用别名限定。
SELECT a.学号, a.课程号, b.课程号, a.成绩FROM CJB a JOIN CJB b ON a.成绩=b.成绩 AND a.学号=b.学号 AND a.课程号!=b.课程号
5.外连接(左外连接,右外连接、全外连接)
指定了OUTER关键字的为外连接,外连接的结果表不但包含满足连接条件的行,还包括相应表中的所有行。外连接包括以下三种:
左外连接(LEFT OUTER JOIN):结果表中除了包括满足连接条件的行外,还包括左表的所有行。
【例】 查找所有学生情况,以及他们选修的课程号,若学生未选修任何课,也要包括其情况
SELECT XSB.* , 课程号FROM XSB LEFT OUTER JOIN CJB ON XSB.学号 = CJB.学号
本例执行时,若有学生未选任何课程,则结果表中相应行的课程号字段值为NULL。
右外连接(RIGHT OUTER JOIN):结果表中除了包括满足连接条件的行外,还包括右表的所有行。
完全外连接(FULL OUTER JOIN):结果表中除了包括满足连接条件的行外,还包括两个表的所有行。
其中的OUTER关键字均可省略**
6.交叉连接(又名笛卡尔积)
首先,先简单解释一下笛卡尔积。
有两个集合A和B,A = {0,1} B = {2,3,4}
集合 A×B 和 B×A的结果集就可以分别表示为以下这种形式:
A×B = {(0,2),(1,2),(0,3),(1,3),(0,4),(1,4)};
B×A = {(2,0),(2,1),(3,0),(3,1),(4,0),(4,1)};
以上A×B和B×A的结果就可以叫做两个集合相乘的‘笛卡尔积’。
从以上的数据分析我们可以得出以下两点结论:
1,两个集合相乘,不满足交换率,既 A×B ≠ B×A;
2,A集合和B集合相乘,包含了集合A中元素和集合B中元素相结合的所有的可能性,即两个集合相乘得到的新集合的元素个数是 A集合的元素个数 × B集合的元素个数。
交叉连接: SELECT * from 表1 JOIN 表2;
交叉连接实际上是将两个表进行笛卡尔积运算,结果表是由第一个表的每一行与第二个表的每一行拼接后形成的表,称为‘笛卡尔积表’,结果表的行数等于两个表的行数之积。
如果两张表的数据量都比较大的话,那样就会占用很大的内存空间这显然是不合理的。所以,我们在进行表连接查询的时候一般都会使用JOIN xxx ON xxx的语法,ON语句的执行是在JOIN语句之前的,也就是说两张表数据行之间进行匹配的时候,会先判断数据行是否符合ON语句后面的条件,再决定是否JOIN。
因此,有一个显而易见的SQL优化的方案是,当两张表的数据量比较大,又需要连接查询时,应该使用 FROM table1 JOIN table2 ON xxx的语法,避免使用 FROM table1,table2 WHERE xxx 的语法,因为后者会在内存中先生成一张数据量比较大的笛卡尔积表,增加了内存的开销。
技术交流微信:intboy520
深入分析内连接、外连接、左连接、右连接、等值连接、自然连接和自连接之间的区别,看这篇就够了!相关推荐
- 数据库内、外、左、右连接详解
写在前面: 数据库连接操作非常重要,明确连接操作有助于更好地掌握SQL语句查询操作. 数据库连表方式: 内连接 :inner join 外连接 :outer join 左外连接 :left outer ...
- 99%的人都不知道内网、外网、宽带、带宽、流量、网速之间的区别与联系
大纲结构 一.带宽与宽带的区别是什么? 带宽是量词,指的是网速的大小,比如1Mbps的意思是一兆比特每秒,这个数值就是指带宽. 宽带是名词,说明网络的传输速率很高 .宽带的标准各不相同,最初认为128 ...
- 内网、外网、宽带、带宽、流量、网速之间的区别与联系
目录 一.带宽与宽带的区别是什么? 二.带宽.网速和流量之间的关系 三.上行带宽和下行带宽是什么意思?各有什么作用? 四.服务器的上行和下行带宽理解 五.内网ip和外网ip区别 一.带宽与宽带的区别是 ...
- SQL连接的理解和使用(内连接:自然连接等值连接,外连接:左连接右连接全外连接)
目录 一.连接的介绍 连接是什么? 连接分几种? 条件连接 等值连接 自然连接 二.连接的使用 内连接 INNER JOIN 内连接与等值连接区别 内连接与自然连接区别 外连接 OUTER JOIN ...
- 图解SQL的连接:左连接、右连接、全连接、内连接、自然连接
SQL的连接分为三类: 外连接(包括左连接left join.右连接right join.全连接full join) 内连接 inner join 自然连接 natural join 我们来看一个超级 ...
- Oracle 表连接方式(内连接/外连接/自连接) 详解
Oracle 表之间的连接分为三种: 1. 内连接(自然连接) 2. 外连接 (1)左外连接 (左边的表不加限制) (2)右外连接(右边的表不加限制) (3)全外连接(左 ...
- Oracle 内、外连接
一.Oracle连接类型 ☆说明:按照自己的理解划分的类型,并不是官方定义. 1.内连接 ①等值连接 ②非等值连接 ③自然连接 2.外连接 ①左外连接 ②右外连接 ③全外连接 二.表数据准备 ...
- 左连接,右连接与自然连接语法以及注意点
我们今天来学习一下sql语句中的左连接右连接以及自然连接,先说结论: 左连接:以左表为主,显示左表所有的数据,右表中没有的显示null值. 右连接:以右表为主,显示右表所有的数据,左表中没有的显示nu ...
- mysql存在外键的连接_MySQL(外连接、自然连接、新增-追加-删除外键、外键条件-约束)...
外连接(outer join) left join:左外连接(左连接),以左表为主表 right join:右外连接(右连接),以右表为主表 基本语法:左表 left/right join 右表 on ...
最新文章
- 德国科学院院士:传统企业寻求变革,向智能制造靠近
- 关于更改MYECLIPSE JS 代码背景颜色
- monty python life of brian-50大最搞笑喜剧片,无厘头成必杀技!
- Gitblit用户没有push权限,但是已经在team里面配置了
- 如何获取不同网站的favicon默认图标
- 数据的设计命名的十个要点
- 开卡教程_流量卡开卡教程(必看)
- Android面试,View绘制流程以及invalidate()等相关方法分析
- 切削为什么没有切屑_数控机床如何选择最佳切削刀具?都有哪些小技巧?
- 倾斜摄影测量知识基础
- html的中性标签,HTML的figcaption标签
- docker(4): 持久化
- 浅谈四轴PID调试心得
- HCNR200和HCNR201在电机驱动和电流回路中的应用
- 计算机上的波特率标准,电子信号术语-波特率9600计算单位是波特/每秒(B/s)
- flink生成Watermark之WatermarkStrategy
- JAVA 开发命名规范——阿里巴巴Java开发手册
- 「MoreThanJava」计算机发展史—从织布机到IBM
- 职教云python题和答案_智慧职教云课堂Python程序设计试题及答案
- 关于软件需求开发和项目的范围管理
热门文章
- python输出箭头代码_Python向datafram显示HTML箭头
- 十大Web网站漏洞扫描工具
- 幸福生活事务管理 app -Dislike 支持全平台(iOS、Android、Windows、macOS)
- 爬虫笔记1——服务器渲染和客户端渲染
- php yaf 2.3.5,Yaf 3.2.0发布
- GZY.Quartz.MUI开发
- 计算两个经纬度的距离
- 爱情36技之一劳永逸
- 快来围观,腾讯云商标图样查询工具上线啦!
- 2016.08.14【初中部 NOIP提高组 】模拟赛C