mysql几种常见的连接方式

薄洪涛6年前数据库1253
内连接(inner join)

从两张表中取出所有记录做笛卡尔积;利用匹配条件进行匹配;如果内连接没有条件,那么其实就是交叉连接,这是我们应该避免的

clipboard.png

775005-20180917164533997-1623997790.gif

交叉连接

从两张表中取出所有记录做笛卡尔积,所有的结果都会进行保留;记录数 = 第一张表记录数 * 第二张表记录数;字段数 = 第一张表字段数 +  第二张表字段数(笛卡尔积),这里我们看到查询出来的记录数为16条

clipboard.png


外连接
按照某一张表作为主表(表中所有记录在最后都会保留),根据条件去连接另外一张表,从而得到目标数据
外连接分为两种:左外连接left outer join|left join),右外连接right outer join|left join),写sql时可省略outer,直接写left join,right join
左外连接(left join)
确定主表,这里的order就是主表,左外连接就是拿主表的每一条记录,按照条件去匹配从表的每一条记录,如果满足匹配条件则保留;如果主表记录在从表中一条都没有匹配成功,那么也要保留该主表记录:从表对应的字段值都为NULL,可以看到主表userid为8的订单记录,找不到user表中的对应,所以对应的从表记录字段设置为NULL

clipboard.png

775005-20180917164714732-2096479565.gif

右外连接(right join)
和右外连接类似,这里的user就是主表,右外连接就是拿主表的每一条记录,按照条件去匹配从表的每一条记录,如果满足匹配条件则保留;如果主表记录在从表中一条都没有匹配成功,那么也要保留该主表记录:从表对应的字段值都未NULL,可以看到,user_name为bob和kitty的用户均没有对应的order记录,所以返回NULL

clipboard.png

775005-20180917164753527-12009198.gif

总结
左连接:主表 left join 从表 on 连接条件
右连接:从表 right join 主表 on连接条件
关于左连接和右连接总结性的一句话:
左连接where只影向右表,右连接where只影响左表
全连接

mysql不支持全连接,但是我们可以通过其他关键词组合起来完成全连接查询(其实全连接的数据就是左外连接和右外连接的集合),这里的意思就是获取所有的人,所有的订单,及关联数据

clipboard.png

775005-20180917164847755-1188439905.gif


相关文章

Mysql实现主从复制

Mysql实现主从复制

在开始教程之前,必须要先说说为什么要搞主从复制线上环境,我们必须要对正式数据库的数据进行备份,保持备份数据库和正式库的数据实时一致业务层面:业务量越来越大,对数据库的查询越来越高,数据库服务器的压力越...

记录一次从日志中恢复mysql数据库数据

记录一次从日志中恢复mysql数据库数据

前因:有个大佬在update的时候,忘记加where条件,造成线上数据库中的某个状态值全部被修改,需要马上处理首先面对这种情况,我马上想到的就是从二进制日志文件中恢复,马上查看是否开启了日志,确定开启...

pg库中数组形式字段浅显使用

pg库中数组形式字段浅显使用

我们在最近的项目中,数据表中某些字段类型是数组,举个例子但是问题来了,比如我想要搜索数组中的数据,比如搜索所有flags含有popforum_recommend_topics 的行,需要怎么写sql呢...

CREATE TABLE 表名 AS SELECT 语句用法详解

新表不存在,创建新表1.创建新表并且携带数据create table new_table    as select *&...

PostgreSQL不常用很有用的数据类型

PostgreSQL不常用很有用的数据类型

最近新项目开始,需要设计数据库,技术大佬用了很多我之前没见过的数据库数据类型,这里做个总结1.货币类型money类型存储固定小数精度的货币数字,表中展示的范围假设有两个小数位。可接受的输入格式很多,包...

mysql报错:1118 - Row size too large

mysql报错:1118 - Row size too large

前几天在建表的时候,有这么一个现象,因为我的表字段比较多(一个患者的体检表项目繁多,不要问我为什么不分表了),字段类型为varchar类型,结果保存的时候报了如下的错误原因:MySQL在建表的时候有个...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。