oracle中的多表连接,oracle中的多表连接

简单连接:

简单连接仅仅是通过select子句和from子句来连接多个表,其查询结果是一个通过笛卡尔积所生成的表。在实际需求中,由于笛卡尔积包含了大量的冗余信息,一般没有任何意义,通常为了避免这种情况,在select语句提供一个连接条件,过滤无意义的数据。例如:

--学生表和性别表关联,拿学生表的性别id和性别表的id来关联过滤

select * from student s,gender g where s.gender = g.id;

Join连接:

1.内连接

内连接是一种常见的连接,用关键字inner join.innner可以省略,也就是说,只使用join连接的为内连接。连接的条件必须用on来进行条件匹配。如果还想进一步限制,则可以加where条件句。

如:

select * from student s join gender g on s.gender = g.id where s.name='张三';

2.自然连接

自然连接与内连接的功能类似,在使用自然连接查询多个表时,oracle会降低一个表中的那些列与第二个表中具有相同名称的列进行连接。在自然连接中,用户不需要明确指定进行连接的列。系统自动完成这一任务。自然连接在实际应用中很少。因为有个限制条件,连接的各个表之间必须有相同名称的列。但这在实际应用中可能和实际引用的含义发生矛盾。

3.外连接

外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN)和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹配的行,还列出左表(左外连接时候)、右表(右外连接时)或两个表(全外连接时)中所有复合搜索条件的数据行。完全外连接相当于同时执行一个左外连接和一个右外连接。然后将结果集合并,并消除重复记录行。

其中外连接还可以采用一种写法:

--这两种写法一致(右外连接)

select * from student s,gender g where s.gender(+) = g.id;

select * from student s right join gender g on s.gender = g.id;

--这两种写法一致(左外连接)

select * from student s,gender g where s.gender = g.id(+);

select * from student s left join gender g on s.gender = g.id;

4.自连接

自连接是在from子句中两次指定了同一个表,为了在其他子句中区分,分别为表指定了表别名。这样oracle就可以将两个表看作是分离的两个数据源,并且从中获取相应的数据。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值