两表做全相乘(交叉连接)
select * from table1,table2;
返回一个全新的表,其行数为两表的行数相乘,每一行的为两表每一行的两两结合,列数为两表列数的和。
因为这种方法会生成一个大表,非常占内存(比如两张10000行的表相乘就得到1×108行的表),所以应尽量避免使用。
左连接
table1 left join table2 on [条件];
当[条件]为真时,则将table2对应的行取出并将其添加到table1对应的行上,以形成一张新表。如果table1的某行在table2中没有匹配行,则新表中该行的保留table1的数据,table2列的值均为NULL。由于建立了索引,因此效率非常快。
右连接
table1 right join table2 on [条件];
与左连接相反,保留table2的所有行,如果table2的某行在table1中没有匹配行,则新表中该行的保留table2的数据,table1列的值均为NULL。
内连接
table1 inner join table2 on [条件];
与左右连接相似,但不同的时,不会保留table1和table2没有匹配上的行(也就是左右连接的交集)。
完全连接
table1 full join table2 on [条件];
保留左右表的所有行,不匹配的用NULL填充(也就是左右连接的并集),但mysql中不支持该语法。