SQL关联表查询,多表查询
前言:在进行设计和开发的时候,很多时候需要用到表查询,多个表关联查询能够很大简化我们获取数据的业务,这里主要讲一下SQL的左连接、右连接、内连接(left join , right join , inner join)
案例表:
- sys_role_menu
- sys_role
LEFT JOIN
- 左连接,不考虑where条件下,left join 会把左表所有数据查询出来,on及其后面的条件仅仅会影响右表的数据(符合就显示,不符合全部为null)
- 左连接关注的是左边的主表数据,不应该把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
案例
案例2
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 AliveSeven's Blog!
评论