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).如果自然连接的两个表仅是字段名称相同,但数据类型不同,那么将会返回一个错误。