MySql 数据库多表链接查询的方式

数据库中多表联查可以通过连接运算实现,即将多张表通过主外键关系关联在一起进行查询,分为非等值查询和等值查询两大类。

一.非等值查询:

语法:

select * from 表1,表2

此查询方式的实质是笛卡尔积的应用,即表1有x行,表2有y行,得到的结果就是x*y行。因此非等值查询在应对数据量较小的情况时可以选择,但当数据量庞大时,采用非等值查询方式会造成大量的数据,从而降低效率,因此不推荐使用非等值查询。

二.等值查询

语法:

select * from 表1,表2 where 表1.字段1 = 表2.字段2....

等值查询是通过where 后面的判断条件去获取自己需要的数据,可以分为以下三种:

1.左连接: left join

select * from 表1 left join 表2 on 表1.字段1 = 表2.字段1

 以left join 左边的表(表1)为主表,从左表中返回所有的记录,即便在右表(表2)中没有匹配的行。如下图所示:left join取得就是左表红色区域的数据

MySql 数据库多表链接查询的方式_第1张图片

取左表中独有的数据:on 的后面,根据条件进行过滤筛选,再生成临时查询结果。where 的后面,从临时查询结果中再根据条件进行筛选,生成最终结果。

select * from A left join Bon A.id = B.id where B.id is null

如下图:

MySql 数据库多表链接查询的方式_第2张图片

2.右连接:right join 


select * from 表1 right join 表2on 表1.字段1 = 表2.字段1

 与 left join 相对应,右边的表(表2)为主表,从右表中返回所有的记录,即便在左表(表1)中没有匹配的行。如下图

MySql 数据库多表链接查询的方式_第3张图片

取右表独有的数据:

select * from A right join B on A.id = B.id where A.id is null

如下图: 

MySql 数据库多表链接查询的方式_第4张图片 

 3.交集:inner join

 


select * from A inner join B on A.id = B.id

组合两个表中的记录,只要在公共字段中有相符合的值,都会被取到,即在表中至少一个匹配时,就会返回记录,实际结果为两张或多张表的交集。

MySql 数据库多表链接查询的方式_第5张图片 

注意: inner join不会统计空值 

4.并集:union与union all

union与union all都是求多表的并集,但两种方式得到的结果截然不同,具体如下。

 union 语法:

select * from A union (select * from B)

 取得是下图中红色区域的数据:

MySql 数据库多表链接查询的方式_第6张图片

 

可以看到,union合并的是结果集,不区分来自于哪一张表,所有可以合并多张表查询出来的数据,但是会过滤掉重复的数据。

注意:

1.当表列名不一致时,会以第一张表的表头为准

2.不同数据类型可以并到一个列中

3.如果查询的表的列数量不相等是,就会报错

4.每个字句中的的排序是没有意义的,mysql在进行合并的适合会忽略掉,如需要排序,可以对合并后的整张表进行排序union all 语法:


select * from A union all (select * from B)

 取得是下图中红色区域的数据:

MySql 数据库多表链接查询的方式_第7张图片

 可以看到,union all 得到的结果也是结果的并集,但是不会把重复的数据过滤掉,而是全部显示出来。

联表查询中on和where的区别

1.on在内连接中可省略,外连接不可省略;

2.on在内连接中执行效果和外连接执行效果不同;left join...on查询不能过滤掉左表中的数据,而内连接on查询可以过滤掉全局数据。

3.外连接中on和where不同,on筛选笛卡尔积过滤条件,where筛选具体业务
 

你可能感兴趣的:(sql,数据库,database)