mysql数据库左右关联_数据库几种表关联的汇总

添加测试表和一些测试数据。

----------t1-----------

CREATE TABLE `t1` (

`id` int(20) NOT NULL default '0',

`field01` varchar(100) default NULL,

`field02` varchar(100) default NULL,

PRIMARY KEY  (`id`)

)

数据:

1b995ce285088bc8c7955e61b7eda942.png

----------t2-----------

CREATE TABLE `t2` (

`id` int(20) NOT NULL default '0',

`field01` varchar(100) default NULL,

`field03` varchar(100) default NULL,

`field04` varchar(100) default NULL,

PRIMARY KEY  (`id`)

)

数据:

96302344a3304238928bfb6e1dc6e75e.png

1:NATURAL JOIN(自然连接)

两张表通过NATURAL JOIN连接的时候,相当于有个隐含的WHERE子句,对两张表中同名的对应列相比较看是否相等。

测试:SELECT * FROM t1 NATURAL JOIN t2

相当于:select * from t1, t2 where t1.id = t2.id and t1.field01 = t2.field01

采用自然连接的相同列合并成一列

结果:

bbccafcadd248599b87434717b77c1ab.png

2:CROSS JOIN(创建笛卡尔积)

对两张表通过交叉联合产生第三张返回结果集的表。相当于普通的连接。如下返回6行=2*3

测试:select * from t1 cross join t2;

结果:

857d52b6edb7aa5cc18424ff6225186b.png

3:INNER JOIN(内连接)

内连接就相当于普通的CROSS JOIN,只是格式不一样,INNER JOIN在后面有一个ON子句(相当于WHERE)的搜索条件,用于过滤返回的行。

测试:select * from t1 inner join t2;

结果:与cross一样

测试:SELECT * FROM t1 INNER JOIN t2 WHERE t1.id = t2.id

等价于:SELECT * FROM t1 , t2 WHERE t1.id = t2.id

结果:

e5b93087b711f0d73c5eb9dd9ac0cc6f.png

4:OUTER JOIN (外连接)

select * from t1 outer join t2 on (t1.id=t2.id)

outer join告诉DBMS生成结果表,在此表中不仅带有相关(t1.id=t1.id)行对,而且还有来自两个源表中任一表的不匹配的行。

就是说没匹配到的也要显示出来,这里有left outer join、right outer join、full outer join(mysql要通过另外的方式实现)。

LEFT OUTER JOIN(左连接)

测试:select * from t1 left outer join t2 on (t1.id=t2.id)

结果:

4fa3e6d78b3e2b63ec981ce4ffa9d742.png

RIGHT OUTER JOIN(右连接)

测试:select * from t1 right outer join t2 on (t1.id=t2.id)

结果:

30aae340d7633f5549388c9afb4b34e7.png

FULL OUTER JOIN(全连接),Oracel测试,Mysql不支持;

FULL OUTER JOIN 返回组合了LEFT OUTER JOIN 和RIGHT OUTER JOIN结果的表

测试:select * from t1 full join t2 on (t1.id=t2.id);

结果:

90b0eecdc1de177004457a144c335248.png

特别注意:

左连接与左外连接是一样的,其他类似,只是为了保证语法一致。

LEFT JOIN = LEFT OUTER JOIN

RIGHT JOIN = RIGHT OUTER JOIN

FULL JOIN = FULL OUTER JOIN

参考:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值