mysql inner join 长数字_Mysql 多表连接查询 inner join 和 outer join 的使用

JOIN的含义就如英文单词“join”一样,连接两张表,大致分为内连接,外连接,右连接,左连接,自然连接。这里描述先甩出一张用烂了的图,然后插入测试数据。

4ebe3ee5a9803527340a22e777761336.png

2ef9676178f7972317cf9177b076d9ee.png

首先先列举本篇用到的分类(内连接,外连接,交叉连接)和连接方法(如下):

A)内连接:join,inner join

B)外连接:left join,left outer join,right join,right outer join,union

C)交叉连接:cross join

案例表:

t_users:

3d92b48f72972ebbac2429f41e6d93c4.png

t_department:

403907eb82be5a6708e45d32b05e5047.png

第一种:内连接 inner join

内连接INNER JOIN是最常用的连接操作。从数学的角度讲就是求两个表的交集,从笛卡尔积的角度讲就是从笛卡尔积中挑出ON子句条件成立的记录。

有INNER JOIN,WHERE(等值连接),STRAIGHT_JOIN,JOIN(省略INNER)四种写法。

select d.id, d.department, t.name fromt_users t

inner join t_department d on d.id= t.department_id

8e636d7c5733e0c5413c3a358d13cbac.png

结果说明;只去表A表和B表共同有的on 条件部分数据;

第二种:外连接 left join,left outer join ,right join, right outer join, union

1)左连接LEFT JOIN的含义就是求两个表A表和B表的交集外加左表剩下的数据。依旧从笛卡尔积的角度讲,就是先从笛卡尔积中挑出ON子句条件成立的记录,然后加上左表A表中剩余的记录(见最后三条)。

005ed2cbae01ebf3fc6b3925af61847c.png

c6f8fe6ffeaec05d8e6172ff9f84207d.pngwhere b.id is null

select t.name, t.department_id, d.department fromt_users tleft join t_department d on d.id = t.department_id

ff10cc3397355d3b3df2ea2939f110a8.png

32de3d584c22b088864335b4f710ba68.png

2)右连接 RIGHT JOIN

同理右连接RIGHT JOIN就是求两个表A和B表的交集外加右表B剩下的数据。再次从笛卡尔积的角度描述,右连接就是从笛卡尔积中挑出ON子句条件成立的记录,然后加上右表中剩余的记录(见最后一条)

fa4b206c1a0eb72756a6974323be2882.png

92f976731cc118178c0e236764bfab5e.png where a.id is null

select t.id userid,t.name, t.department_id, d.department fromt_users tright join t_department d on d.id = t.department_id

3e8ff2ecb9cd6d1f6d1eba6744e9c49b.png

3)外连接 FULL OUTER JOIN

外连接就是求两个表A和B集合的并集。从笛卡尔积的角度讲就是从笛卡尔积中挑出ON子句条件成立的记录,然后加上左表中剩余的记录,最后加上右表中剩余的记录。另外MySQL不支持OUTER JOIN,但是我们可以对左连接和右连接的结果做UNION操作来实现。

情景一:A和B的并集

d64ae19500153b2d5f40c08f115ea15a.png

select t.id userid,t.name, t.department_id, d.department fromt_users tleft join t_department d on d.id =t.department_idUNION

select t.id userid,t.name, t.department_id, d.department fromt_users tright join t_department d on d.id = t.department_id

8c196a6557aea434dfa7726162e6d3e1.png

情景二:A和B中不满足某个条件的记录

90d3436c629e881f9e585d11f63b2e34.png

如:即不在A表user里面;也不在B表department里面的数据;条件 is null

select t.id userid,t.name, t.department_id, d.department fromt_users tleft join t_department d on d.id =t.department_idwhere d.id is null

UNION

select t.id userid,t.name, t.department_id, d.department fromt_users tright join t_department d on d.id =t.department_idwhere t.department_id is null

037669226ed108d174143ee7f2715205.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值