oracle数据库之多表查询二
多表查询解题思路:
1.分析题目要查询的结果涉及到那几张表
2.将每张表建立关联条件,否则会产生笛卡尔积
3.分清楚查询的条件,然后使用and将条件链接
4.涉及到分组查询的需要使用聚合函数
5.分组之后的过滤使用having
--练习题:
--查询706班每位同学的没门课程的分数
1.首先题目涉及到班级表、学生表、课程表、分数表我们需要先将四张表进行关联,sql如下:
select * from t_class;
select * from t_Student;
select * from t_course;
select * from t_score;
2.我们需要将每张表建立起关联,比如题目中涉及的班级表、学生表、课程表、分数表。然后通过查看表中的主键和外键、有studentid,classid,courseid几个主键,所以我们可以通过这些主键将这四张表进行关联。我们先看第一种的查询方法,也是最常使用的。sql如下
select * from t_class t1,t_student t2,t_course t3,t_score t4
where t1.classid=t2.classid and t2.studentid=t4.studentid and
t4.courseid=t3.courseid; --我们关联以后,会发现一个问题。查询后的结果是所有班级的学生成绩和信息。但是我们题目中的要求是让我们查询706班的,所以显然这么写是不对的,我们继续往下看:
查询结果如下:

我们需要在查询的结果中在进行一次条件过滤,记住过滤使用的是and。如下所示:
select * from t_class t1,t_student t2,t_course t3,t_score t4
where t1.classid=t2.classid and t2.studentid=t4.studentid and
t4.courseid=t3.courseid and t1.classid=; --我们最后使用and将要查询的706班的主键classid进行过滤,记住一般过滤都是使用的是主键过滤哦。。。
这时候我们继续查看查询结果:

这回终于查询正确了,所以回过头来我们看看,总结一下,这道题的套路:1.先分析几张表 2.关联 3.筛选题目中要的结果 好了,我们继续看第二种的变态方式是如果实现的我们使用 inner join on的方法来实现这道题。
select * from t_class t1 inner join t_student t2 on t1.classid=t2.classid
inner join t_score t4 on t2.studentid=t4.studentid
inner join t_course t3 on t3.courseid=t4.courseid
and t1.classid=;
查询结果如下:

ok,我们知道了第一道题的解题思想,那么第二道题应该就是一带而过~~~
--查询每位同学没门课程的分数
--查询每位学生的每门课程分数
select * from t_student t1,t_course t2,t_score t3 where
t1.studentid=t3.studentid and t2.courseid=t3.courseid;
查询结果如下:

oracle数据库之多表查询二的更多相关文章
- Oracle数据库之七 多表查询
七.多表查询 对于查询在之前已经学过了简单查询.限定查询.查询排序,这些都属于 SQL 的标准语句,而上一章的单行函数,主要功能是为了弥补查询的不足. 而从多表查询开始就正式进入到了复杂查询部 ...
- Oracle数据库之单表查询
接着上一篇的分享,今天主要给大家分享的是关于数据中的单表查询,单表查询很基础,也很重要,但是任何一个初学者必须要掌握的姿势,单表查询就是对单个表进行操作,查询我们想要的数据.单表查询里面的内容也是比较 ...
- Oracle数据库之多表查询一
上一篇给大家介绍了数据的单表查询,相信大家对于单表的查询应该都有了一些了解.单表查询在数据库中的使用会有一些,但并不是很多,但是作为初学者,我们需要学习单表查询的思路.今天呢,我们为大家介绍一下数据库 ...
- Oracle数据库--解决单张表中数据量巨大(大数据、数据量上百万级别,后查询,更新数据等耗时剧增)
版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/QQ578473688/article/details/54561397 思路1:采用备份表 备份表中 ...
- oracle数据库误删的表以及表中记录的恢复
oracle数据库误删的表以及表中记录的恢复 一.表的恢复 对误删的表,只要没有使用PURGE永久删除选项,那么从flash back区恢复回来希望是挺大的.一般步骤有: --1.从flash bac ...
- MySQL/MariaDB数据库的多表查询操作
MySQL/MariaDB数据库的多表查询操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.单表查询小试牛刀 [root@node105.yinzhengjie.org.cn ...
- PowerDesigner生成Oracle数据库时,表名会带引号问题
使用PowerDesigner生成数据库建表SQL脚本时,尤其是Oracle数据库时,表名一般会带引号.其实加引号是PL/SQL的规范,数据库会严格按照""中的名称建表,如果没有& ...
- Oracle数据库之创建表空间与用户
Oracle数据库之创建表空间与用户 一.创建表空间 基本语法表述: CREATE TABLESPACE tablespace_name [DATAFILE datafile_spec1 [,data ...
- Oracle 数据库中查看表空间的2种方法
在Oracle数据库中查看表空间使用状况是我们在实际应用中经常涉及到的,以下的内容就就是对Oracle 数据库中查看表空间使用状况时所要用到的SQL的描述,希望你能从中获得自己想要的东西. Oracl ...
随机推荐
- Kattis - redblacktree Red Black Tree (树形背包)
问题:有一课含有n(n<=2e5)个结点的数,有m(m<=1000)个结点是红色的,其余的结点是黑色的.现从树中选若干数量的结点,其中红色的恰有k个,并且每个结点都不是其他任何另一个结点的 ...
- 如何打开 Windows 的热键提示
如何打开 Windows 的热键提示 很早之前我记的 Windows 是有热键提示的,不知道什么时候开始默认不显示了,难道 微软是为是美观? 找了一下原来是有地方可以设置的.
- SpringCloud微服务实战——第一章序言读书笔记
什么是微服务架构 是系统架构上的一种设计风格,将独立的系统拆分成多个小型服务,这些小型服务都在各自独立的进程中运行,服务之间基于HTTP的RESTful API进行通信协作. 每个小型服务都围绕各自的 ...
- Unix文件指令-Mac终端命令应用
pwd:查看当前文件夹 cd: 打开文件夹 ls:列出当前路径下所有文件 ls -l :列出当前路径下的所有文件详细信息. mkdir: 新建文件夹 touch: 创建文件 eg: touch t ...
- ThreadPoolExecutor之一:使用基本介绍
一.concurrent包中的线程池的简单介绍 线程池按照线程数量可以分为:一是固定线程数量的线程池:二是可变数量的线程池. 线程池按照执行时间可以分为:一是立即执行线程池:二是延时线程池. Thre ...
- [置顶]
制作开机LOGO就是这么简单!
转自: http://mp.weixin.qq.com/s?__biz=MzAxNTAyOTczMw==&mid=2649328522&idx=1&sn=64107695fef ...
- C#字符串全排序
排列:从n个元素中任取m个元素,并按照一定的顺序进行排列,称为排列: 全排列:当n==m时,称为全排列: 比如:集合{ 1,2,3}的全排列为: { 1 2 3} { 1 3 2 } { 2 1 3 ...
- [phonegap]安装升级
安装 npm install -g phonegapnpm install -g phonegap@版本号 比如 npm install -g phonegap@3.3.0-0.19.6 升级 ...
- paramiko监控 windows服务器 被监控服务器只需要安装openssh服务即可基于wmic完成大部分监控
#!/usr/bin/python #-*- coding: UTF-8 -*- #++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ ...
- redis学习三 redis持久化
1,快照持久化 1简介 redis可以通过创建快照来获得某个时间点上的内存内容的数据副本,有了副本之后,就可以将副本发送到其他redis服务器上从而创建相同数据的从服务器,同时快照留在原 ...