Oracle数据库-多表联查的介绍与使用

多表联查首先我们要知道多表联查分几部分?

就三部分...

一对一【1:1】

一对多【1:n】

多对多【n:n】

那怎么理解这三个部分???

很简单...

1.一对一我们可以理解为一个人只有一个身份证,一个身份证可以证明一个人,这两者之间是可以相互成立的...

    1.如果两个对象是1对1的关系,则可以建成一张表。

    2.如果两个对象是1对1的关系,可以通过1对1主键关联放在两张表中。

2.一对多我们可以理解为一个人可以拥有多辆车,一位老师可以教授多位学生,一个教室有多个学生,一个市有多个地区....但是!!这里有一个注意事项:

    如果两张表之间是1对多的关系,则需要通过外键去建立两张表的关系。

3.多对多我们可以理解为一个人可以拥有多辆车,一辆车可以被多个人使用,,这就是多对多,这里也有一个注意事项:

    如果两张表的关系是多对多,则必须引入中间表

我们都知道了主键,那在这里就要知道另一个东西叫外键!!!

    所谓外键就是为了建立表与表之间的关系,这就叫外键.....

    外键是可以重复的,可以为空的。

    通常情况下一个表的外键是另外一张表的主键。

基础知识都知道了那就开始多表联查:

在这之前要知道另一个单词

1..."内连接"  inner join

翻译:只显示两张表有关联的数据

select 字段名(或者*) from 表1  s  inner  join  表2  c  on 表1和表2的关联条件

什么是表1和表2的关联条件??其实该为代码可以举例是:s.classid=c.id

意思是:表1的classid字段等于表2的id字段

如果这个例子看的云里雾里的,那好换一个真实的例子

查询年龄在18-30之间的女生姓名以及所在的班级名

select s.studentname,c.classname,s.studentage,s.sex from t_student s inner join t_class c

on s.classid=c.id

where s.studentage>=18 and s.studentage<=30 and s.sex=0;

其实就是将多张表的信息结合成一张表输出出来,,,,就是这样...

我们再举一个复杂的例子

查询年龄在18-30之间的姓张的女生姓名以及所在的班级名并且按照年龄进行升序排列

select s.studentname,c.classname,s.studentage,s.sex from t_student s inner join t_class c

on s.classid=c.id

where s.studentage>=18 and s.studentage<=30 and s.sex=0

and s.studentname like '张%'

order by s.studentage asc;

然后我们要学习另一个知识点:

2...左连接 left join

意义:会将左边表的全部数据进行展示,另外一张表有和它关联的就展示,没有就不展示

select 字段名,字段名 from 表1 left join 表2 on 表1和表2的关联条件

上代码例子

select * from t_student left join t_class

on t_class.id=t_student.classid;

在这个代码中t_student在左,t_class在右,那么在执行这段代码后左边的信息全部展示,在右边的信息有关联的就展示出来,没有关联就不展示.....就是这样....

有左就该有右啊!

3...右连接 right join

意义:会将右边表的全部数据进行展示,另外一张表有和它关联的就展示,没有就不展示

那之前不是说了要建立两者之间的中间表吗??中间表怎么建???要新建中间表

create table 中间表表名(

sid number(11),

cid number(11),

score number(3),

constraint 主键名称 primary key(sid,cid)

);

这就是中间表,,当然,,现在的数据是要你自己手动去输入的,,手动输入虚假数据..

那我们开始三表联查吧!!

查询学生名,课程名以及对应的成绩

select s.studentname,c.cname,sc.score from t_student s

left join t_score sc on s.id=sc.sid

left join t_course c on c.id=sc.cid

order by studentName;

之中要注意left join 和select join 一般用left join

其实多表联查和两表联查就多了一段而已....

最后输出的也就是三张表结合成一张表输出而已....

那如何将多表联查的结构进行分页???

select * from (

select t.*,rownum rn from(

select s.studentname,c.cname,sc.score from t_student s

left join t_score sc on s.id=sc.sid

left join t_course c on c.id=sc.cid

order by studentName

) t where rownum<=6

)where rn>4;

即可.....

新手上路,请多关照...

如有错误,评论指出,本人感激不尽..

谢谢...

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

槐序二十四

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

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

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

打赏作者

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

抵扣说明:

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

余额充值