ORACLE SQL 多表查询

ORACLE SQL 多表查询

开发工具与关键技术:Oracle sql*plus  PLSQL Developer
作者:张国军
撰写时间:2019年04月07日

在这里插入图片描述
多表查询跟我们的单表查询差不多,只是在单表查询上复杂了一点。
我们看一下oracle基本查询方法
Select * from table1 a,table b
Where a.tablec_id=b.tablec_id;
这种连接是通过等值进行连接的,值得注意的是:当我们使用这种方法进行多表连接的时候很容易忘记写where的语句(也就是连接条件),产生的笛卡尔积,那么查询出来的数据就不是我们需要的数据了。
多表连接又可以分为:等值连接、非等值连接、外连接等连接。
1.等值连接:这个我想应该不难理解,也就是通等值连接。
例如:select * from student a,score b
where a.sno=b.sno;
查询学生的成绩
在这里插入图片描述
每一个连接ID是对应的,如果没有匹配的上的话,那么它就不会显示出来。
这就是我们的等值连接。
2.非等值连接:不等值连接,我们可以将它理解为(区间值)
SELECT e.last_name, e.salary, j.grade_level
FROM employees e, job_grades j
WHERE e.salary
BETWEEN j.lowest_sal AND j.highest_sal;
在这里插入图片描述
就好比如:一个员工工资在(1000,3000)区间评为A级(3000,5000)评为B级
然后就用我们的between关键词定在那个区间就行了,就是:如果在第一个区间范围内就评为A,在第二个区间范围内就评为B,以此类推。
这就是我们的不等值连接。
3. 外连接:外连接我们还可以细分为(左外连接、右外连接、满外连接)这三个。
外连接,那边是外就将那边数据都留下来,然后去匹配另外的表。简单理解就是(对于外来的客人我们一般都是来多少就接纳多少,也就是谁是外来的数据就留多少数据)
左外连接:从字面我可以读出左外(左边是外)然后我们就把左边的表数据都留下
Select * from student a,score b
Where a.sno=b.sno(+);
这个是oracle的语法,对于这个我将它理解为((+)这个在那边那边就是主,另外一边就是客人(外来的))所以我们可以从下面的数据可以看出外来的我们都要保留下来,然后成绩表进行配对。
在这里插入图片描述
还有另外一种语法就是:1999 语法,这个语法相对oracle语法,我个人感觉还是1999语法好用一点,当然那得个人的喜欢。
Select * from student a Left Join score b
ON a.sno=b.sno;
1999语法主要的关键字是(left join on)。
看了左连接,尤连接我想应该也能搞明白了,应为他们都是一样的,只是留下的表数据不一样而已。
满外连接:那么我们来看一下满外连接,满外满外我将它理解为都是外来的客人(意思就是两张表都是外来的,所以我们将两张表的数据都留下来,如果匹配上的那么两边都有数据,没有匹配上的另外一边为null。)
Select * from student a Full Join score b
ON a.sno=b.sno;
也可以将它理解为左外连接和右外连接的结合。
这是我个人的理解,如有不同,欢迎分享。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值