关于Oracle多表连接的小结(内连接,外连接,交叉连接和自然连接)

最近学习了一下Oracle的多表连接,包括内连接、外连接、交叉连接和自然连接,个人用到比较多的是内连接和外连接

1.内连接

场景:某班两门课出了成绩,想要把两份成绩表合一起。table1为语文课成绩,table2为数学课成绩

 

select a.name, a.course, a.grade, b.course, b.grade
  from table1 a
 inner join table2 b
    on a.name = b.name;

如上图为内连接结果,内连接要求坐标和右表要连接的条数相等,因此内连接也叫做等值连接。

2.外连接

外连接可分为左外连接(左边保持不变)和右外连接(右边保持不变)

场景:我有一个表里面统计了手机号信息,还有一个表统计了不同号段对应的手机号归属地,我想知道这些手机号的归属地,那么就可以使用外连接(两个表要连接的列数不同)

 

--左连接
SELECT a.*, b.position
  FROM TABLE1 a
  LEFT OUTER JOIN TABLE2 b
    ON SUBSTR(a.phonenum, 1, 7) = b.num;

 

如上图为左外连接的结果,可以发现右边表TABLE2的数据有重复而左边表TABLE1的数据与原来相同

也可以将上述代码简写为

--左连接简化写法
SELECT a.*, b.position
  FROM TABLE1 a, TABLE2 b
    WHERE SUBSTR(a.phonenum, 1, 7) = b.num(+);

 

 

 结果与原来相同,加号出现在右边,可以理解为右边不够需要补充(http://blog.chinaunix.net/uid-21187846-id-3288525.html

右连接类似

 3.交叉连接

用于求两个表两个字段的笛卡尔积,比如说第一个表有10行,第二表有3行,则交叉连接后的行数为10x3=30行

4.自然连接

两个表中存在同名且同类型的列时使用自然连接,我还没有想到需要用到自然连接的场景

还是个新手,也许会有不对的地方,请不吝赐教

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值