数据库(join) 内连接、外连接、笛卡尔积

时间:2020-04-14 19:29:33   收藏:0   阅读:91

今天,重刷了刷leetcode数据库的题目,对数据库连接查询做一个记录。

数据库(join) 内连接、外连接、笛卡尔积

内连接(自身连接)

内连接有隐式内连接和显示内连接两种:

差异:隐式生成的是全部笛卡尔积,连接时生成的中间临时表更大。on条件是生成中间临时表的过滤条件;where条件是在临时表生成好后,再对临时表进行过滤的条件。

外连接

外连接有左连接、右连接、全连接三种:

笛卡尔积(交叉连接)

定义:是指在数学中,两个集合 X 和 Y 的乘积 X * Y。

它不带WHERE子句,返回被连接的两个表所有数据行的乘积。a CROSS JOIN b , cross join可以省略。

select * from Person as A cross join Address as B
select * from Person as A, Address as B

例如,两个表如图:

技术分享图片

A表的每一行会和B表的每一行组合,笛卡尔积是:

技术分享图片

总结

子查询执行时系统要先把子查询转化成连接查询来实现,因此连接查询执行时效率更高。

子查询是把问题细分成子问题,然后解决,更符合人们的解决问题习惯。但是因为效率的原因,遇到一个问题尽量用连接查询实现,如果连接查询实现时很复杂或者实现不了,则可以考虑使用子查询实现。

原文:https://www.cnblogs.com/ldy-miss/p/12699904.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!