SQL中的各种连接及查询
有如下两张表:
TEST_USERONE 、TEST_USERTWO
-
内连接
-
两个表的内链接就是两个表的并集。
在百度百科中解释内连接又可称之为普通连接或者自然连接。 这个说法有误,确切说 自然连接是特殊的内连接。下面会叙述自然连接。
select * from TEST_USERONE t inner join Test_Usertwo t2 on t.id = t2.id2
-
外连接
- 两个表的内链接就是两个表的交集。关键字 full outer join 或者full join
select * from TEST_USERONE t full outer join Test_Usertwo t2 on t.id = t2.id2
-
左外连接
- A的全集 若B中不存在就null。
Select * from TEST_USERONE t left outer join Test_Usertwo t2 on t.id = t2.id2
或者
Select * from TEST_USERONE t , Test_Usertwo t2 where t.id = t2.id2(+)
-
右外连接
- B的全集 若A中不存在就null(类似)
Select * from TEST_USERONE t right outer join Test_Usertwo t2 on t.id = t2.id2
或者
Select * from TEST_USERONE t , Test_Usertwo t2 where t.id(+) = t2.id2
还可以使用外连接实现以下情况:
A中存在而B中不存在 使用左连接或者全连接实现
Select *
from TEST_USERONE t
left join Test_Usertwo t2 on t.id = t2.id2
where t2.id2 is null
A中存在B中不存在并且 B中存在而A中不存在
使用全连接实现。
Select *
from TEST_USERONE t
full join Test_Usertwo t2 on t.id = t2.id2
where t2.id2 is null or t.id is null
-
Cross join
- 它就是笛卡尔乘积,无法用文氏图表示。
Select * from TEST_USERONE t cross join Test_Usertwo t2 ; 或者 select * from TEST_USERONE t , Test_Usertwo t2;
内连接和等值连接的效果是相同的。
自然连接是一种特殊的等值连接。关键字为natural join
select * from TEST_USERONE natural join Test_Usertwo
(自然连接是没有on的)
等值连接仅要求字段的属性值相同,查询出来的结果集包含两个表中全部字段。
两个自然连接的表不仅要求字段的属性值相同,还要求字段的名字也相同。查询出来的结果会进行投影处理,相同的那个字段名,只会保留一列。