外连接分为外左连接(left outer join)和外右连接(right outer join)
注释:left outer join 与 left join 等价, 一般写成left join right outer join 与 right join等价,一般写成right join
左连接,取左边的表的全部,右边的表按条件,符合的显示,不符合则显示null
举例:select <select list> from A left join B on A.id=B.id
右连接:取右边的表的全部,左边的表按条件,符合的显示,不符合则显示null
举例:select <select list> from A right join B on A.id=B.id
内连接:也称为等值连接,返回两张表都满足条件的部分
注释:inner join 就等于 join
需要C/C++ Linux服务器架构师学习资料私信“资料”(资料包括C/C++,Linux,golang技术,Nginx,ZeroMQ,MySQL,Redis,fastdfs,MongoDB,ZK,流媒体,CDN,P2P,K8S,Docker,TCP/IP,协程,DPDK,ffmpeg等),免费分享
交叉连接:返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉联接也称作笛卡尔积
首先,先简单解释一下笛卡尔积:笛卡尔乘积是指在数学中,两个集合X和Y的笛卡尓积(Cartesian product),又称直积,表示为X × Y,第一个对象是X的成员而第二个对象是Y的所有可能有序对的其中一个成员
举例:
现在,我们有两个集合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集合的元素个数;
交叉连接有两种,显式的和隐式的,不带ON子句,返回的是两表的乘积,也叫笛卡尔积。例如:下面的语句1和语句2的结果是相同的。
语句1:隐式的交叉连接,没有CROSS JOIN。SELECT O.ID, O.ORDER_NUMBER, C.ID, C.NAMEFROM ORDERS O , CUSTOMERS CWHERE O.ID=1;
语句2:显式的交叉连接,使用CROSS JOIN。SELECT O.ID,O.ORDER_NUMBER,C.ID,C.NAMEFROM ORDERS O CROSS JOIN CUSTOMERS CWHERE O.ID=1;
数据库表连接数据行匹配时所遵循的算法就是以上提到的笛卡尔积,表与表之间的连接可以看成是在做乘法运算。
比如现在数据库中有两张表,student表和 student_subject表,如下所示:
我们执行以下的sql语句,只是纯粹的进行表连接。
SELECT * from student JOIN student_subject;
SELECT * from student_subject JOIN student;
看一下执行结果:
从执行结果上来看,结果符合我们以上提出的两点结论(红线标注部分);
以第一条sql语句为例我们来看一下他的执行流程,
1,from语句把student表 和 student_subject表从数据库文件加载到内存中。
2,join语句相当于对两张表做了乘法运算,把student表中的每一行记录按照顺序和student_subject表中记录依次匹配。
3,匹配完成后,我们得到了一张有 (student中记录数 × student_subject表中记录数)条的临时表。 在内存中形成的临时表如表1.0所示。我们又把内存中表1.0所示的表称为‘笛卡尔积表’。
再看一下sql中主要关键字的执行顺序:
from on join where group by having select distinct union order by
我们看到on是在join和where前面的
如果两张表的数据量都比较大的话,那样就会占用很大的内存空间这显然是不合理的。所以,我们在进行表连接查询的时候一般都会使用JOIN xxx ON xxx的语法,ON语句的执行是在JOIN语句之前的,也就是说两张表数据行之间进行匹配的时候,会先判断数据行是否符合ON语句后面的条件,再决定是否JOIN。
因此,有一个显而易见的SQL优化的方案是,当两张表的数据量比较大,又需要连接查询时,应该使用 FROM table1 JOIN table2 ON xxx的语法,避免使用 FROM table1,table2 WHERE xxx 的语法,因为后者会在内存中先生成一张数据量比较大的笛卡尔积表,增加了内存的开销。
全外连接是在结果中除了显示满足连接的条件的行外,还显示了join两侧表中所有满足检索条件的行
上古之神有哪几个(神话世界里的十大上古正神) 在中国五千年的历史长河中,曾创造出无数的神话传说,诞生了许多的神话人物。神话是古代人们最纯粹、最原始的信仰,代表了人类内心对自然、对世界、对生命的各种期盼和需求。因此,每个古文明都有专属于自己的神话。我们的神话虽然博大精深源远流长,但可惜的是在几千年的岁月中,没有能够形成一套完整的体系。纵观神话演变
狸花猫是土猫吗(哪一个品种的猫好养又温顺?) 和养猫人聊起当初养猫经历,就会发现,几乎每个养猫人的的经历都不一样。有的人很谨慎,早早提前做足功课;有的人很洒脱,别人推荐什么就是什么;有的人大大咧咧,碰到什么就是什么。还有一类比较特别,之前没有想过养猫,就稀里糊涂地当上了“猫奴”。本人就属于最后这一类,我是被狸花猫咪咪三番五次光顾之后,在什么都没
绿萝可以放在卧室吗为什么(家里为什么不能养绿萝?) 绿萝是一种漂亮的绿植,叶片纹路清晰,碧绿油亮,尤其是打造出造型以后,比如养成绿萝柱,或者是养成绿萝瀑布,都会给人很舒适很清爽的感觉。而且大多数人家养绿萝,主要原因还是因为它吸收甲醛的能力,是很多人喜欢的健康花,能吸收室内的有害气体,然后转化成人吸收的氧气。可以说家里养绿萝优点多多,也就难怪绿萝成为家
反重力原理详解(反重力装置是什么?我们见过的反重力装置都有哪些?) 反重力原理说起来很简单,我们站在地球上,地球对我们施加了一个G的重力加速度,如果向我们反方向施加一个G的加速度,理论上我们就处于失重状态了。这种反重力方式我们也见过,比如在空间站上的航天员,他们就处于失重状态。他们的失重原因是因为空间站围绕地球飞行时,离心力和地心引力平衡并抵消了加速度。还有我们常见
来电显示未知怎么回事(来电显示归属地错乱是什么原因) iphone归属地错误原因是网络错误,重新设置一下即可。以iphone 12为例,可参考以下步骤,使苹果来电归属地显示正常:1、步骤概述:在iPhone12的主屏幕,点击这里的设置图标。2、步骤概述:在设置界面,点击这里通用选项。3、步骤概述:在通用设置界面,点击这里的还原选项。4、步骤概述:在还原