MySQL-多表查询
联合查询
语法
select col_name[,col_name...]from tab_name1,tab_nem2[,...][where ...]
如果不加条件直接进行查询,会出现笛卡尔乘积(如1表数据条数*2表数据条数)
这种方式不能使用
on
或using
,而是使用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是等价的