小编精心整理的超详细mysql left join,right join,inner join用法分析希望大家喜欢,觉得好的亲们记得收藏起来哦!您的支持就是小编更新的动力~
下面是例子分析
表A记录如下:
aID aNum
1 a0111
2 a0112
3 a0113
4 a0114
5 a0115
表B记录如下:
bID bName
1 032401
2 032402
3 032403
4 032404
8 032408
创建这两个表SQL语句如下:
CREATE TABLE a
aID int( 1 ) AUTO_INCREMENT PRIMARY KEY ,
aNum char( 20 )
)
CREATE TABLE b(
bID int( 1 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
bName char( 20 )
)
INSERT INTO a
VALUES ( 1, a0111 ) , ( 2, a0112 ) , ( 3, a0113 ) , ( 4, a0114 ) , ( 5, a0115 ) ;
INSERT INTO b
VALUES ( 1, 032401 ) , ( 2, 32402 ) , ( 3, 32403 ) , ( 4, 32404 ) , ( 8, 32408 ) ;
实验如下:
join(左联接)
sql语句如下:
SELECT * FROM a
LEFT JOIN b
ON a.aID =b.bID
结果如下:
aID aNum bID bName
1 a0111 1032401
2 a0112 2 032402
3 a0113 3 032403
4 a0114 4 032404
5 a0115 NULL NULL
(所影响的行数为 5 行)
结果说明:
left join是以A表的记录为基础的,A可以看成左表,B可以看成右表,left join是以左表为准的.
换句话说,左表(A)的记录将会全部表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).
B表记录不足的地方均为NULL.
join(右联接)
sql语句如下:
SELECT * FROM a
RIGHT JOING b
ON a.aID = b.bID
结果如下:
aID aNum bID bName
1 a0111 1032401
2 a0112 2 032402
3 a0113 3 032403
4 a0114 4 032404
NULL NULL 8 032408
(所影响的行数为 5 行)
结果说明:
仔细观察一下,就会发现,和left join的结果刚好相反,这次是以右表(B)为基础的,A表不足的地方用NULL填充.
join(相等联接或内联接)
sql语句如下:
SELECT * FROM a
INNER JOIN b
ON a.aID =b.bID
等同于以下SQL句:
SELECT *
FROM a,b
WHERE a.aID = b.bID
结果如下:
aID aNum bID bName
1 a0111 1032401
2 a0112 2 032402
3 a0113 3 032403
4 a0114 4 032404
结果说明:
很明显,这里只显示出了 A.aID = 的记录这说明 join并不以谁为基础,它只显示符合条件的记录.
LEFT JOIN操作用于在任何的 FROM 子句中,
组合