兩表做全相乘(交叉連接)
select * from table1,table2;
返回一個全新的表,其行數(shù)為兩表的行數(shù)相乘涮帘,每一行的為兩表每一行的兩兩結(jié)合,列數(shù)為兩表列數(shù)的和衣赶。
因為這種方法會生成一個大表平委,非常占內(nèi)存(比如兩張10000行的表相乘就得到1×108行的表),所以應(yīng)盡量避免使用啥繁。
左連接
table1 left join table2 on [條件];
當(dāng)[條件]為真時荒叶,則將table2對應(yīng)的行取出并將其添加到table1對應(yīng)的行上,以形成一張新表输虱。如果table1的某行在table2中沒有匹配行,則新表中該行的保留table1的數(shù)據(jù)脂凶,table2列的值均為NULL宪睹。由于建立了索引,因此效率非巢锨眨快亭病。
右連接
table1 right join table2 on [條件];
與左連接相反,保留table2的所有行嘶居,如果table2的某行在table1中沒有匹配行罪帖,則新表中該行的保留table2的數(shù)據(jù),table1列的值均為NULL邮屁。
內(nèi)連接
table1 inner join table2 on [條件];
與左右連接相似整袁,但不同的時,不會保留table1和table2沒有匹配上的行(也就是左右連接的交集)佑吝。
完全連接
table1 full join table2 on [條件];
保留左右表的所有行坐昙,不匹配的用NULL填充(也就是左右連接的并集),但mysql中不支持該語法芋忿。