MySQL-多表查询

MySQL-多表查询

起男 1,024 2020-12-23

MySQL-多表查询

联合查询

语法

select col_name[,col_name...]from tab_name1,tab_nem2[,...][where ...]

如果不加条件直接进行查询,会出现笛卡尔乘积(如1表数据条数*2表数据条数)

这种方式不能使用onusing,而是使用where

链接查询

语法

select col_name[,col_name...]from tab_name1

[inner|left[outer]|right[outer]|cross] join tab_name2

{on tab_name1.col_name = tab_name2.col_name|using(col_name)}

  • using:如果两个表字段名相同可以使用using,否则使用on

内连接

使用inner join或者join(默认内连接)

效果:只显示符合条件的数据,和联合查询不使用where查询的效果是一样的

内连接时,可以使用where代替on,但不建议使用

左外连接

使用left join或者left outer join

效果:左边表(前面的表)中的数据全部显示,右边表(后面的表)中符合条件的才会显示,不符合条件的会以null进行填充

右外连接

使用right join或者right outer join

效果:和左外连接正好相反

全外连接

效果:在内连接的基础上增加左右两边没有显示的数据

注意:MySQL并不支持全连接full join关键字,但是MySQL提供了union关键字,可以间接实现全外连接

select col_name[,col_name...] from tab_name1 left join tab_name2 on tab_name1.col_name = tab_name2.col_name

union

select col_name[,col_name...] from tab_name1 right join tab_name2 on tab_name1.col_name = tab_name2.col_name

交叉连接

使用cross join

效果:在MySQL中join、inner join和cross join是等价的