表连接类型

栏目: ASP.NET · 发布时间: 7年前

内容简介:对于关系型数据库来说,对于复杂的查询表连接是必不可少的,下面妹子就来介绍下表连接的方式表a有63条数据,表b有10条数据,两表都有键值per_id,用INNER JOIN取交集为51条

前言

对于关系型数据库来说,对于复杂的查询表连接是必不可少的,下面妹子就来介绍下表连接的方式

内连接(Inner Join)

Inner 指的是 intersect 相交,顾名思义就是取两表的 交集

SELECT COUNT(a.per_id) FROM `b_borrow_list` AS a;/*63条*/
SELECT COUNT(b.per_id) FROM `b_borrow_deductions` AS b;/*10条*/
/*inner-join*/
SELECT COUNT(a.`per_id`) FROM `b_borrow_list` AS a 
INNER JOIN `b_borrow_deductions` AS b 
ON a.per_id=b.per_id;/*51条*/

表a有63条数据,表b有10条数据,两表都有键值per_id,用INNER JOIN取交集为51条

外连接(Outer Join)

Outer 指的是 union 集合,就是取两表的 并集 。 其中外连接分为3种:

Full outer join

full outer join 得到两表的乘集,也可叫做笛卡尔乘积。如果a表中的行在b表中没有对应的部分,b的部分将是 null, 反之亦然。

SELECT COUNT(a.per_id) FROM `b_borrow_list` AS a;/*63条*/
SELECT COUNT(b.per_id) FROM `b_borrow_deductions` AS b;/*10条*/
/*full-outer-join*/
SELECT COUNT(a.`per_id`) FROM `b_borrow_list` AS a 
JOIN `b_borrow_deductions` AS b /*630条*/

取两表的乘集,则a表的行数乘以b表的行数,63*10=630(条)

Left join

左连接,取表a的所有行,和b表中匹配的值,没有匹配的则以null值取代。

SELECT COUNT(a.per_id) FROM `b_borrow_list` AS a;/*63条*/
SELECT COUNT(b.per_id) FROM `b_borrow_deductions` AS b;/*10条*/
/*left-join*/
SELECT COUNT(a.`per_id`) FROM `b_borrow_list` AS a 
LEFT JOIN `b_borrow_deductions` AS b 
ON a.per_id=b.per_id;/*63条*/

a表有63行,b表中键值per_id在a表中都有。

Right join

右连接,取表b的所有行,和a表中匹配的值,没有匹配的则以null值取代。

SELECT COUNT(a.per_id) FROM `b_borrow_list` AS a;/*63条*/
SELECT COUNT(b.per_id) FROM `b_borrow_deductions` AS b;/*10条*/
/*right-join*/
SELECT COUNT(a.`per_id`) FROM `b_borrow_list` AS a 
RIGHT JOIN `b_borrow_deductions` AS b 
ON a.per_id=b.per_id;/*51条*/

b表有10行,a表中有重复键值per_id,所以有51条

反连接(Anti Join)

Anti 指的是 英语词根 反对 的意思,与 inner join 正好相反。 多用于!= not in 等查询;如果找到满足条件(!= not in)的不返回,不满足条件(!= not in)的返回。

SELECT COUNT(a.per_id) FROM `b_borrow_list` AS a;/*63条*/
SELECT COUNT(b.per_id) FROM `b_borrow_deductions` AS b;/*10条*/
/*anti-join*/
SELECT COUNT(a.`per_id`) FROM `b_borrow_list` AS a ,`b_borrow_deductions` AS b 
WHERE a.per_id!=b.per_id;/*579条*/

相当于a表与b表的乘级减去a表与b表的交集,即(63*10)-51=579条

半连接(Semi Join)

半连接多在子查询exists中使用,找到存在的键值之后就不再查找内部其他的键值了。

SELECT COUNT(a.per_id) FROM `b_borrow_list` AS a;/*63条*/
SELECT COUNT(b.per_id) FROM `b_borrow_deductions` AS b;/*10条*/
/*semi-join */
SELECT COUNT(a.`per_id`) FROM `b_borrow_list` AS a 
WHERE EXISTS( 
SELECT NULL FROM `b_borrow_deductions` AS b  WHERE a.per_id=b.per_id)/*51条*/

星型连接(Star Join)

是指一张大的事实表和多个小表关联得出所需的数据,往四周发散,所以称为星型链接。 要使用星型转换,必须要求初始化参数 star_transforation_enabled 设为TRUE。

SELECT ...
FROM   really_big_fact f    -- 50 million rows
,      dim1 d1              -- 50 rows
,      dim2 d2              -- 100 rows
,      dim3 d3              -- 10 rows
,      dim4 d4              -- 15 rows
WHERE  f.key1 = d1.key1
AND    f.key2 = d2.key2
AND    f.key3 = d3.key3
AND    f.key4 = d4.key4

现在只有 Oracle 才有

表链接的方式

表链接的方式有:排序合并连接(Sort Merge join)、嵌套循环连接(Nested Logo join)、哈希连接(Mash join)、笛卡尔链接(Cross join)

参考资料

Happy coding .. :)


以上所述就是小编给大家介绍的《表连接类型》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Scratch少儿趣味编程

Scratch少儿趣味编程

[ 日] 阿部和广 / 陶 旭 / 人民邮电出版社 / 2014-11 / 59.00元

Scratch 是麻省理工学院设计开发的一款编程工具,是适合少儿学习编程和交流的工具和平台,有中文版且完全免费。本书结合孩子们学习的语文、数学、科学、社会、音乐、体育等科目,手把手地教大家如何用Scratch 设计程序(如设计一个自动写作文的程序),配合各式卡通形象,通俗易懂,寓教于乐。麻省理工学院教授米切尔•瑞斯尼克作序推荐。 本书图文并茂,生动风趣,适合中小学生等初学者自学或在家长的帮助......一起来看看 《Scratch少儿趣味编程》 这本书的介绍吧!

JSON 在线解析
JSON 在线解析

在线 JSON 格式化工具

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

在线进制转换器
在线进制转换器

各进制数互转换器