Oracle 的内连接、外连接、自连接、左连接、右连接

http://www.cnblogs.com/star-studio/archive/2011/06/25/2090000.html

内连接     (JOIN 
SELECT a.*,b.* FROM table_1 a,table_2 b WHERE a.name=b.name --写法一
SELECT a.*,b.* FROM table_1 a JOIN table_2 b ONa.name=b.name --写法二
SELECT a.*,b.* FROM table_1 a  INNER JOIN table_2 b ONa.name=b.name --写法三


外连接   外连接有三种方式  左连接、 右连接、 全连接

左连接   LEFT JOIN) 左连接是根据最左表的记录,在被连接右表中找出符合条件的记录与之匹配,找不到与左表匹配的,用null填充
SELECT a.*,b.*FROM table_1 a LEFT JOIN table_2 b ONa.name=b.name--左连接写法一
SELECT a.*,b.*FROM table_1 a LEFT OUTER JOIN table_2 b ONa.name=b.name--左连接写法二
SELECT a.*,b.*FROM table_1 a, table_2 b  where  a.name=b.name(+) --左连接写法三


右连接   RIGHT JOIN) 右连接则是根据最右表的记录,在被连接的左表中找出符合条件的记录与之匹配,找不到匹配的,用null填充
SELECT a.*,b.*FROM table_1 a RIGHT JOIN table_2 bON a.name=b.name--右连接写法一
SELECT a.*,b.*FROM table_1 a RIGHT OUTER JOIN table_2 b ON a.name=b.name--右连接写法二
SELECT a.*,b.*FROM table_1 a , table_2 b  where  a.name(+)=b.name --连接写法三

全连接   FULL JOIN返回符合条件的所有表的记录,没有与之匹配的,用null填充
SELECT*FROM table_1 a FULL JOIN table_2 b ONa.name=b.name--全连接写法一
SELECT a.*,b.*FROM table_1 a FULL OUTER JOIN table_2 b ONa.name=b.name--全连接写法二 


交叉连接  CROSS JOIN 笛卡尔积,结果集的记录数将等于第一个表的记录数乘以第二个表中的记录数。
SELECT a.*,b.*FROM table_1 a CROSS JOIN table_2 b --交叉连接
SELECT a.*,b.*FROM table_1 a,table_2 b --内连接


自连接   连接的表都是同一个表。同样可以有内连接、外连接各种组合方式,按实际应用去组合。

SELECT a.*,b.*FROM table_1 a,table_1 b WHERE  a.[name]=b.[name] --连接的两表是同一个表,别称不一样
SELECT a.*,b.*FROM table_1 a  LEFT  JOIN table_1 b ON a.[name]=b.[name]--左连接写法
等等


自然连接  

自然连接是在两张表中寻找那些数据类型和列名都相同的字段,然后自动地将他们连接起来,并返回所有符合条件按的结果

SELECT a.*,b.* FROM table_1 a NATURAL JOIN table_2 b   

自然连接等效于内连接

SELECT a.*,b.* FROM table_1 a JOIN table_2 b ON a.name=b.name  


也可以将自然连接理解为内连接的一种。
有关自然连接的一些注意事项:
(1).如果做自然连接的两个表的有多个字段都满足有相同名称个类型,那么他们会被作为自然连接的条件。
(2).如果自然连接的两个表仅是字段名称相同,但数据类型不同,那么将会返回一个错误。














posted @ 2014-09-19 21:39  lihui1625  阅读(188)  评论(0编辑  收藏  举报