前言:在进行设计和开发的时候,很多时候需要用到表查询,多个表关联查询能够很大简化我们获取数据的业务,这里主要讲一下SQL的左连接、右连接、内连接(left join , right join , inner join)

案例表:

  1. sys_role_menu

  1. sys_role

LEFT JOIN

  1. 左连接,不考虑where条件下,left join 会把左表所有数据查询出来,on及其后面的条件仅仅会影响右表的数据(符合就显示,不符合全部为null)
  2. 左连接关注的是左边的主表数据,不应该把on后面的从表中的条件加到where后,这样会影响原有主表中的数据

案例

select * from A left join B on A.aid = B.bid

意思是:

首先取出A表中所有数据,然后再加上与A,B匹配的的数据

表A:

aid ax
1 A1
2 A2
3 A3

表B:

bid bx
1 B1
2 B2
4 B4

那么LEFT JOIN指:

aid ax bid bx
1 A1 1 B1
2 A2 2 B2
3 A3

案例2

RIGHT JOIN

和左连接差不多,右连接就是关注右边表的数据,先把右边表的数据查询出来,on及其后面的条件仅仅会影响左表的数据(符合就显示,不符合全部为null)

select * from A right join B on A.aid = B.bid

这里右边表是B,先把B表中的全部数据取出来,然后再加上与A,B匹配的数据。如果没有匹配的就是空

案例

案例2

INNER JOIN

和左右连接不一样,INNER JOIN是取公共部分的,不匹配的部分就直接去掉,而不是空NULL了。

公共的部分就是ON后面的那个连接语句,比如案例中的aid和bid相同的那个部分就是公共的部分

select * from A inner join B on A.aid = B.bid

案例

image.png

案例2