mysql多表关联查询 | 奇点产品

/ 0评 / 0

之前简单介绍了sql 的一些语句,我们在正常工作中还会用到多表关联查询的情况,今天就来具体介绍下联表查询。

 

1.1 多表连接有哪些分类?

 

1.2 针对这些分类有哪些连接方法?

 

1.3 这些连接方法分别作用于哪些应用场景?

 

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

 

A)内连接:join

 

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

 

C)交叉连接:cross join

 

二,下面以实例进行分析

 

我们假设有两张表A,B,感兴趣的新同学可以在数据库中建立这两个表,用作接下来的操作。两张表如下:

 

table A:

table B:

2.1 内连接(join)

 

selecta.*,b.*fromtableajointablebona.id=b.id

结果如下

应用场景

这种场景下得到的是满足某一条件的A,B内部的数据;正因为得到的是内部共有数据,所以连接方式称为内连接。

2.2 外链接

 

2.2.1 left join

 

select a.*, b.* from table a left join table b on a.id = b.id

结果如下:

应用场景

这种场景下得到的是A的所有数据,和满足某一条件的B的数据

 

2.2.2 left join + where b.column is null

 

select a.id aid,a.age,b.id bid,b.name from table a left join table b on a.id = b.id Where b.id is null

结果如下

应用场景

这种场景下得到的是A中的所有数据减去"与B满足同一条件 的数据",然后得到的A剩余数据

 

2.2.3 right join

 

select a.id aid,a.age,b.id bid,b.name from table a right join table b on a.id = b.id

结果如下

应用场景

这种场景下得到的是B的所有数据,和满足某一条件的A的数据

 

2.2.4 right join + where a.column is null

 

select a.id aid,a.age,b.id bid,b.name from table a right join table b on a.id = b.id where a.id is null

运行结果如下

应用场景

这种场景下得到的是B中的所有数据减去 "与A满足同一条件 的数据“,然后得到的B剩余数据

 

2.2.5 left join union right join

 

select a.id b.name from tablea a left join table b on a.id = b.id union select a.id b.name from tablea a right join table b on a.id = b.id

运行结果如下

应用场景

这种场景下得到的是A,B中不满足某一条件的记录之和

 

2.2.6 实际应用中还有这样一种情形,想得到A,B记录的排列组合,即笛卡儿积,这个就不好用集合和元素来表示了。需要用到cross join

 

三,多表查询举例

 

select `info`.`id`,`info`.`name`,`lol`.`chinese`,mus.musicfrom infoleft join lolon info.id=lol.idleft join muson mus.id=info.id

查询结果

 

备注:上述的语句是作者目前举例的写法,还会有其他很多的写法可以借鉴。具体查询的操作好需要在实际的应用中使用到,孰能生巧。

 

公众号:奇点产品

发表评论

电子邮件地址不会被公开。 必填项已用*标注