left join是以左表为准的.
左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).
B表记录不足的地方均为NULL.
PS:right join表理解相同
官方的解释下:
inner join(等值连接):只返回两个表中联结字段相等的行;
left join(左联接):返回包括左表中的所有记录和右表中联结字段相等的记录;
right join(右联接):返回包括右表中的所有记录和左表中联结字段相等的记录。
比如我们有xs、cj两个表
xs表 cj表
--------------- ----------------------
id name id score
1 张三 1 96
2 李四 2 80
3 86
Sql代码
SELECT * FROM `xs` INNER JOIN `cj` ON xs.id = cj.id
SELECT * FROM `xs` INNER JOIN `cj` ON xs.id = cj.id
返回
------------------------
id name id score
1 张三 1 96
2 李四 2 80
-----------------------
Sql代码
SELECT * FROM `xs` LEFT JOIN `cj` ON xs.id = cj.id
SELECT * FROM `xs` LEFT JOIN `cj` ON xs.id = cj.id
返回
------------------------
id name id score
1 张三 1 96
2 李四 2 80
-----------------------
Sql代码
SELECT * FROM `xs` RIGHT JOIN `cj` ON xs.id = cj.id
SELECT * FROM `xs` RIGHT JOIN `cj` ON xs.id = cj.id
返回
id name id score
1 张三 1 96
2 李四 2 80
NULL NULL 3 86
追问:
left,right 代码输入完成之后结果没有什么不同么?我看你这三个代码输入之后表格结果都是一样的。从表格中看不代码之间的区别?
回答:
你看这个,上面首先说了,如果左表有多余的项的化右表就会用NULL表示
表A记录如下:
aID aNum
1 a20050111
2 a20050112
3 a20050113
4 a20050114
5 a20050115
表B记录如下:
bID bName
1 2006032401
2 2006032402
3 2006032403
4 2006032404
8 2006032408
--------------------------------------------
1.left join
sql语句如下:
select * from A
left join B
on A.aID = B.bID
结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
5 a20050115 NULL NULL
right 的结果如下:
aID aNum bID bName
1 a20050111 1 2006032401
2 a20050112 2 2006032402
3 a20050113 3 2006032403
4 a20050114 4 2006032404
NULL NULL 8 2006032408