JOIN用于连表查询,主要有5种用法。下面分别演示这5种用法
随便建2张表,结构如下
? ? ? ? ? ? ???
字段col1用来使两张表有一个同名字段的(但其实没什么用,因为查询条件都需要用ON来指定,这里只是说明一下如果有相同的字段名也没什么影响)
一、笛卡尔积:CROSS JOINCROSS JOIN使两张表的所有字段直接进行笛卡尔积,假设表1有m条数据,表2有n条数据,则结果数量为m*n条
SELECT * FROM tab1 CROSS JOIN tab2结果
二、内连接:INNER JOIN内连接需要用ON来指定两张表需要比较的字段,最终结果只显示满足条件的数据
SELECT * FROM tab1 INNER JOIN tab2 ON tab1.id1 = tab2.id2?结果
注意到内连接只把满足ON条件的数据相连接,与笛卡尔积不同
三、左连接:LEFT?JOIN左连接可以看做在内连接的基础上,把左表中不满足ON条件的数据也显示出来,但结果中的右表部分中的数据为NULL
SELECT * FROM tab1 LEFT JOIN tab2 ON tab1.id1 = tab2.id2结果
??
四、右连接:RIGHT?JOIN右连接就是与左连接完全相反
SELECT * FROM tab1 RIGHT JOIN tab2 ON tab1.id1 = tab2.id2结果
??
五、全连接:OUTER?JOIN全连接就是左连接和右连接的并集,但是MySQL中并不支持全连接的写法
SELECT * FROM tab1 OUTER JOIN tab2 ON tab1.id1 = tab2.id2不过可以用UNION联合左连接和右连接的结果来代替
SELECT * FROM tab1 LEFT JOIN tab2 ON tab1.id1 = tab2.id2 UNION SELECT * FROM tab1 RIGHT JOIN tab2 ON tab1.id1 = tab2.id2结果
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。 |