`
jackroomage
  • 浏览: 1196969 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

SQL 左外连接,右外连接,全连接,内连接,自连接

阅读更多

 

 

 

 

-- 左连接(返回包括左表中的所有记录和右表中联结字段相等的记录 )
select a.rid, a.picname, b.trpid, b.rid, b.picname, b.picurl
  from tc_restaurants a
  left join tc_restaurants_pictures b on a.rid = b.rid

-- 右链接( 返回包括右表中的所有记录和左表中联结字段相等的记录)
select a.rid, a.picname, b.trpid, b.rid, b.picname, b.picurl
  from tc_restaurants_pictures b
 right join tc_restaurants a on a.rid = b.rid

-- 等值连接(只返回两个表中联结字段相等的行)
select a.rid, a.picname, b.trpid, b.rid, b.picname, b.picurl
  from tc_restaurants_pictures b
 inner join tc_restaurants a on a.rid = b.rid

-- 全连接(返回两个表中所有信息)
select a.rid, a.picname, b.trpid, b.rid, b.picname, b.picurl
  from tc_restaurants_pictures b
  full join tc_restaurants a on a.rid = b.rid

-- 等值连接(只返回两个表中联结字段相等的行)
select a.rid, a.picname, b.trpid, b.rid, b.picname, b.picurl
  from tc_restaurants a, tc_restaurants_pictures b
 where a.rid = b.rid

-- 自连接(比如一张表中有两个字段,一个字段是员工编号,一个字段是领导编号,
       -- 员工字段编号中包含领导字段编号,所以可以当做两张表,做自关联,只要别名不一样就ok了)
SELECT worker.ename, boss.ename
  FROM emp worker, emp boss
 WHERE worker.mgr = boss.empno
   AND worker.ename = 'FORD';

 

 

内连接(等值连接和自然连接)    

 

 Oracle natural join(自然连接)

虽然natural join(自然连接)实际上的用的比较少,但实际上这个连接是非常有用的,若能经常使用一下,实际上是非常方便的。

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

来看一下自然连接的例子。

Select emp.ename,dept.dname

From emp natural join dept;

这里我们并没有指定连接的条件,实际上oracle为我们自作主张的将,emp中的deptno和dept中的deptno做了连接。

也就是实际上相当于

Select emp.ename,dept.dname

From emp join dept on emp.deptno = dept.deptno;

因为这两张表的这两个字段deptno的类型个名称完全相同。所以使用natural join时被自然的连接在一起了。

另外:

1.如果做自然连接的两个表的有多个字段都满足有相同名称个类型,那么他们会被作为自然连接的条件。

2.如果自然连接的两个表仅是字段名称相同,但数据类型不同,那么将会返回一个错误。

3.由于oracle中可以进行这种非常简单的natural join,我们在设计表时,应该尽量在不同表中具有相同含义的字段使用相同的名字和数据类型。以方便以后使用natural join

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics