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 ...
随机推荐
- 元素为指针的vector的使用说明
该程序演示了vector中的元素为指针的时候的对对象的操作. /* 功能说明: 元素为指针的vector的使用说明 实现方式: 使用this成员来显示各个对象的地址. 限制条件或者存在的问题: 无 * ...
- 转载:【菜鸟玩Linux开发】通过MySQL自动同步刷新Redis
转载: http://www.cnblogs.com/zhxilin/archive/2016/09/30/5923671.html
- pair对组
一.pair基本概念 对组(pair)将一对值组合成一个值,这一对值可以具有不同的数据类型,两个值可以分别用pair的两个公有函数first和second访问. 类模板:template <cl ...
- python3 之logging模块
logging.getLogger(name=None)Return a logger with the specified name or, if name is None, return a lo ...
- unix下网络编程之I/O复用(三)
poll函数 在上文unix下网络编程之I/O复用(二)中已经介绍了select函数的相关使用,本文将介绍另一个常用的I/O复用函数poll.poll提供的功能与select类似,不过在处理流设备时, ...
- 对oracle中date/timestamp的操作
设置oracle中date的会话格式为 'yyyy-mm-dd hh24:mi:ss' alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss ...
- Mybatis代码学习
Mybatis架构学习 MyBatis 是支持定制化 SQL.存储过程以及高级映射的持久层框架.MyBatis 封装了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.可以对配置和原生Map使用 ...
- php用zendstudio建立wsdl
首先,新建的时候要选择soap,然后deocument和rpc都可以. 类和方法的页面: <?php //发货接口 class test{ function send_do_delivery($ ...
- Day2-VIM(六): 恢复
恢复在VIM里比较简单,不过想要具体恢复到某个时间段很难 就我的经验而言,有时候使用恢复还不如删了重写 这里我们来讲讲恢复.撤销和重复命令的使用 u 撤消上次命令 U 恢复整行 ctrl+r 重做 . ...
- Django基础(四)
Form表单 Admin Django Form表单 django 中的form 一般有两种功能: 输入html 验证用户输入 1,先写一个form import re from django ...