Oracle-第一章-多表查询和其他

4多表关联查询

4.1表的别名

①在多表关联查询时,如果多个表之间存在同名的列,则必须用表名限定列的引用
 如dept.deptno,emp.deptno
②为使语句简洁,使用表别名,表别名在from子句中定义如 emp e
③表别名一经定义,在整个查询语句中就只能用表别名,而不能用表名 emp.ename × e.ename √
④表别名只在所定义的查询语句中有效

4.2内连接(直连-只显示关联到的结果,会遗失部分数据)

####
select d.dormno, s.name
from dorm d
[inner]join student s--默认是inner内查询,不用写
on d.id=s.dormid;
--用相同的ID来进行表之间连接

####
select b.buildname,d.dormno,s.name
  from building b
  join dorm d
    on b.id = d.buildid
  join student s
    on d.id = s.dormid;
--三个及以上连接

####
select d.dormno, s.name
  from dorm d
  join student s
    on d.id = s.dormid
 where s.gender = ;
 --条件语句放在后面
 
####
内连接的另一种写法(了解即可,千万别用)
select e.ename,d.dname,e.sal
 from emp e,dept d--省去了join on 语句
 where sal>=3000;--忘记写where子句会导致笛卡尔积任意关联,会导致非常严重的数据库崩溃
 --笛卡尔积:两个表做任意关联,无关联条件,导致数据暴增

4.3外连接(可以返回不相关的数据行,不必须有条件语句)

(1)左连接(以左边的为主表,显示所有行的结果,以右边的为从表,只显示关联的结果)

select e.ename,d.dname,e.comm
from dept d
left join emp e
on e.deptno=d.deptno;--此处应该在建表时用id而不用no

####
select s.name,d.dormno 
from student s, dorm d 
where s.dormid=d.id(+);
--左连接另种写法,仅作了解,千万别用,会造成笛卡尔积数据库崩溃或数据丢失
####
▲如果左连接的从表添加where条件,则左连接失效
例:查询所有人的姓名,如果其他宿舍在2楼,显示宿舍号
select s.name,d.dormno
from student s
left join dorm d
on d.id=s.dormid
where d.floor=2;--此处where应改为and,把选择条件变成关联条件

(2)右连接

right用法和左连接一样

(3)全连接(特殊情况才用,一般不用,显示左右全部数据,如果关联则在同一行)

full同上

4.4自然连接(几乎不用)

自然连接指在检索多个表时
oracle会将个表中的列和第二个表中具有相同名称的列进行自动连接
语法: natural join
select empno,ename,job,dname
from emp 
natural join dept
where sal>2000;
--由于自然连接要求表之间必须有相同名称的列,这样容易在出现不可预知的错,故几乎不用

4.5自连接(一表两用)

####
select em2.ename 上层管理者,em1.ename 下属员工
from emp em1
join em
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小猪宝宝哦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值