首先明确下概念
left join 的全称是 left outer join
join 的全称是 inner join
所以平时所说的左连接 就是左外连接,
连接 就是内连接,
另外参考:http://blog.chinaunix.net/uid-21187846-id-3288525.html
Oracle
(1)左外连接 (左边的表不加限制)
outer join则会返回每个满足第一个(顶端)输入与第二个(底端)输入的联接的行。它还返回任何在第二个输入中没有匹配行的第一个输入中的行。外连接分为三种:左外连接,右外连接,全外连接。对应SQL:LEFT/RIGHT/FULL OUTER JOIN。 通常我们省略outer 这个关键字。写成:LEFT/RIGHT/FULL JOIN。
在左外连接和右外连接时都会以一张表为基表,该表的内容会全部显示,然后加上两张表匹配的内容。如果基表的数据在另一张表没有记录。那么在相关联的结果集行中列显示为空值(NULL)。
对于外连接, 也可以使用“(+) ”来表示。 关于使用(+)的一些注意事项:
在做实验之前,我们先将dave表和bl里加一些不同的数据。 以方便测试。
SQL> select * from bl;
---------- ----------
SQL> select * from dave;
---------- ----------
2.1 左外连接(Left outer join/ left join)
示例:
SQL> select * from dave a left join bl b on a.id = b.id;
--------- ---------- ---------- ----------
SQL> select * from dave a left outer join bl b on a.id = b.id;
---------- ---------- ---------- ----------
用(+)来实现, 这个+号可以这样来理解: + 表示补充,即哪个表有加号,这个表就是匹配表。所以加号写在右表,左表就是全部显示,故是左连接。
SQL> Select * from dave a,bl b where a.id=b.id(+);
---------- ---------- ---------- ----------
2.2 右外连接(right outer join/ right join)
和left join的结果刚好相反,是以右表(BL)为基础的, 显示BL表的所以记录,在加上Dave和BL 匹配的结果。 Dave表不足的地方用NULL填充.
示例:
SQL> select * from dave a right join bl b on a.id = b.id;
---------- ---------- ---------- ----------
已选择7行。
SQL> select * from dave a right outer join bl b on a.id = b.id;
---------- ---------- ---------- ----------
已选择7行。
用(+)来实现, 这个+号可以这样来理解: + 表示补充,即哪个表有加号,这个表就是匹配表。所以加号写在左表,右表就是全部显示,故是右连接。
SQL> Select * from dave a,bl b where a.id(+)=b.id;
---------- ---------- ---------- ----------
2.3 全外连接(full outer join/ full join)
示例:
SQL> select * from dave a full join bl b on a.id = b.id;
---------- ---------- ---------- ----------
已选择9行。
SQL> select * from dave a full outer join bl b on a.id = b.id;
---------- ---------- ---------- ----------