Oracle中的多表查询

Oracle多表查询

Oracle中的多表连接就是通过查询表之间的关联字段,一次查询多表数据,要有关联的表才可以哦。

多表查询呢,有几种的方式来查的,就是写的格式有点不一样,但是查询出来的结果呢都是一样的!
以下就是多表连接的几种方式。
(谨记,多表连接查询一定要在where字句中加入有效的连接条件,要不然就会产生可怕的笛卡尔值。 这就有人问了,什么情况下会产生笛卡尔值呢?
笛卡尔值会在下面的条件下产生:
– 省略连接条件
– 连接条件无效
– 所有表中的所有行互相连接)
如:select * from 表1,表2; 如果直接执行的话,得到的数据就是表1的数据x表2的数据,也就是笛卡尔值。
还有一种也是笛卡尔值的表达方式:select * from table1 cross join table2;
这个笛卡尔值要慎用,一定要慎用
下面就用一个学生表和成绩表来举栗子:

第一种:等值连接

select *
from student1 s1,score s
where student1.sno = score1.sno;
在这里插入图片描述
得到的结果就是以student1.sno = score1.sno为条件查出这两个表有关系的数据,不包含一个表与另一个表不匹配的行
由于sno列对于两个表都是常见的,所以它必须按表名称前缀,以避免歧义,当然你也可以用别名来代替
使用别名可以简化查询,使用表名前缀可以提高执行效率。
,如果是两个表以上的呢,那就有一条公式:连接n个表就至少需要n-1个连接条件啦,就是说如果连接5张表,那至少就需要4个连接条件才可以。
在这里插入图片描述

第二种:外连接,外连接就是两个表在连接过程中除了返回满足连接条件的行以外还返回左(或右)表中不满足条件的行 ,这种连接称为左(或右) 外连接,也就是可以查询不满足连接条件的数。符号(+)

左连接:select * from student1, score1
Where student1.sno= score1.sno(+)
右连接:select * from student1, score1
Where student1.sno(+)= score1.sno
还有就是SQL1999的语法,格式不同,结果相同:左(右)连接左(右)边的表为主表
左连接:select * from student1 left join score1 on student1.sno= score1.sno
右连接:select * from student1 rightjoin score1 on student1.sno= score1.sno

第三种:自然连接:natural join会以两个表中具有相同名字的列为条件创建等值连接,注意如果只是列名相同而数据类型不同,则会产生错误。

在这里插入图片描述
还有个using:select * from student1 join score1 using(sno)
跟natural join是差不多的,就是如果有两张表,里面有两个关联的字段,当你用natural join 时,它会自动把有关联的列作为连接条件来进行查询,当你用using时,你可以自己来选择那个任意一个或多个有关系的列来做为连接条件。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值