1:内连接
(典型的连接运算,使用像 = 或 <> 之类的比较运算符),包括相等连接和自然连接。
2: 外连接。
外连接可以是左向外连接、右向外连接或完整外部连接。
LEFT JOIN 或 LEFT OUTER JOIN。
左向外连接的结果集包括LEFT OUTER子句中指定的左表的所有行,而不仅仅是连接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所有选择列表列均为空值。
RIGHT JOIN 或 RIGHT OUTER JOIN。
右向外连接是左向外连接的反向连接。将返回右表的所有行。如果右表的某行在左表中没有匹配行,则将为左表返回空值。
FULL JOIN 或 FULL OUTER JOIN。
完整外部连接返回左表和右表中的所有行。当某行在另一个表中没有匹配行时,则另一个表的选择列表列包含空值。如果表之间有匹配行,则整个结果集行包含基表的数据值。
3:交叉连接。
交叉连接返回左表中的所有行,左表中的每一行与右表中的所有行组合。交叉连接也称作笛卡尔积。
4:
(+)是outer join 的意思
=======================================================
例子:
tb_a表 id name || tb_b表 id job parent_id
1 张三 || 1 程序员 1
2 李四 || 2 程序员 2
3 王五 || 3 程序员 4
建表语句
-- Create table create table TB_B ( ID NUMBER, NAME VARCHAR2(20), PARENT_ID NUMBER ) create table TB_A ( ID NUMBER, NAME VARCHAR2(30) ) insert into tb_a(id,name) values(1,'张三'); insert into tb_a(id,name) values(2,'李四'); insert into tb_a(id,name) values(3,'王五'); insert into tb_a(id,name) values(1,'张三'); insert into tb_a(id,name) values(2,'李四'); insert into tb_a(id,name) values(3,'王五');
内连接
select a.*, b.* from tb_a a inner join tb_b b on a.id=b.parent_id
结果是
1 张三 1 程序猿 1
2 李四 2 程序猿 2
左连接
select a.*, b.* from tb_a a left join tb_b b on a.id=b.parent_id; --等价于 select a.*, b.* from tb_a a left outer join tb_b b on a.id=b.parent_id; --等价于 select a.*, b.* from tb_a a, tb_b b where a.id=b.parent_id(+)
结果是
1 张三 1 程序猿 1
2 李四 2 程序猿 2
3 王五
右连接
select a.*, b.* from tb_a a right join tb_b b on a.id=b.parent_id; --等价于 select a.*, b.* from tb_a a right outer join tb_b b on a.id=b.parent_id; --等价于 select a.*, b.* from tb_a a, tb_b b where a.id(+)=b.parent_id
结果是
2 李四 2 程序猿 2
1 张三 1 程序猿 1
3 程序猿 4
完全连接
select a.*,b.* from a full join b on a.id=b.parent_id
结果是
1 张三 1 程序猿 1
2 李四 2 程序猿 2
3 王五
3 程序猿 4