left join 是left outer join的简写,left join默认是outer属性的。
Inner Join
Inner Join 逻辑运算符返回知足第一个(顶端)输入与第二个(底端)输入联接的每一行。这个和用select查询多表是同样的效果,因此不多用到;
outer join则会返回每一个知足第一个(顶端)输入与第二个(底端)输入的联接的行。它还返回任何在第二个输入中没有匹配行的第一个输入中的行。关键就是后面那句,返回的多一些。因此一般意义上的left join就是left outer join
sql
一.先看一些最简单的例子spa
例子orm
Table A
aid adate
1 a1
2 a2
3 a3it
TableB基础
bid bdate
1 b1
2 b2
4 b4
两个表a,b相链接,要取出id相同的字段
select * from a inner join b on a.aid = b.bid这是仅取出匹配的数据.
此时的取出的是:
1 a1 b1
2 a2 b2
那么left join 指:
select * from a left join b on a.aid = b.bid
首先取出a表中全部数据,而后再加上与a,b匹配的的数据
此时的取出的是:
1 a1 b1
2 a2 b2
3 a3 空字符
一样的也有right join
指的是首先取出b表中全部数据,而后再加上与a,b匹配的的数据
此时的取出的是:
1 a1 b1
2 a2 b2
4 空字符 b4
LEFT JOIN 或 LEFT OUTER JOIN。
左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的全部行,而不单单是联接列所匹配的行。若是左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的全部选择列表列均为空值date
二. left join/right join/inner join操做演示select
表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语句以下:
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
(所影响的行数为 5 行)
结果说明:
left join是以A表的记录为基础的,A能够当作左表,B能够当作右表,left join是以左表为准的.
换句话说,左表(A)的记录将会所有表示出来,而右表(B)只会显示符合搜索条件的记录(例子中为: A.aID = B.bID).
B表记录不足的地方均为NULL.
2. right join
sql语句以下:
数据
SELECT * FROM A
RIGHT 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
NULL NULL 8 2006032408
(所影响的行数为 5 行)
结果说明:
仔细观察一下,就会发现,和left join的结果恰好相反,此次是以右表(B)为基础的,A表不足的地方用NULL填充.
3.inner join
sql语句以下:
SELECT * FROM A
INNERJOIN B
ON A.aID = B.bID
结果以下:
aID aNum bID bName1 a20050111 1 20060324012 a20050112 2 20060324023 a20050113 3 20060324034 a20050114 4 2006032404