多表查询解题思路:

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数据库之多表查询二的更多相关文章

  1. Oracle数据库之七 多表查询

    七.多表查询 ​ 对于查询在之前已经学过了简单查询.限定查询.查询排序,这些都属于 SQL 的标准语句,而上一章的单行函数,主要功能是为了弥补查询的不足. ​ 而从多表查询开始就正式进入到了复杂查询部 ...

  2. Oracle数据库之单表查询

    接着上一篇的分享,今天主要给大家分享的是关于数据中的单表查询,单表查询很基础,也很重要,但是任何一个初学者必须要掌握的姿势,单表查询就是对单个表进行操作,查询我们想要的数据.单表查询里面的内容也是比较 ...

  3. Oracle数据库之多表查询一

    上一篇给大家介绍了数据的单表查询,相信大家对于单表的查询应该都有了一些了解.单表查询在数据库中的使用会有一些,但并不是很多,但是作为初学者,我们需要学习单表查询的思路.今天呢,我们为大家介绍一下数据库 ...

  4. Oracle数据库--解决单张表中数据量巨大(大数据、数据量上百万级别,后查询,更新数据等耗时剧增)

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/QQ578473688/article/details/54561397 思路1:采用备份表 备份表中 ...

  5. oracle数据库误删的表以及表中记录的恢复

    oracle数据库误删的表以及表中记录的恢复 一.表的恢复 对误删的表,只要没有使用PURGE永久删除选项,那么从flash back区恢复回来希望是挺大的.一般步骤有: --1.从flash bac ...

  6. MySQL/MariaDB数据库的多表查询操作

    MySQL/MariaDB数据库的多表查询操作 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.单表查询小试牛刀 [root@node105.yinzhengjie.org.cn ...

  7. PowerDesigner生成Oracle数据库时,表名会带引号问题

    使用PowerDesigner生成数据库建表SQL脚本时,尤其是Oracle数据库时,表名一般会带引号.其实加引号是PL/SQL的规范,数据库会严格按照""中的名称建表,如果没有& ...

  8. Oracle数据库之创建表空间与用户

    Oracle数据库之创建表空间与用户 一.创建表空间 基本语法表述: CREATE TABLESPACE tablespace_name [DATAFILE datafile_spec1 [,data ...

  9. Oracle 数据库中查看表空间的2种方法

    在Oracle数据库中查看表空间使用状况是我们在实际应用中经常涉及到的,以下的内容就就是对Oracle 数据库中查看表空间使用状况时所要用到的SQL的描述,希望你能从中获得自己想要的东西. Oracl ...

随机推荐

  1. POJ - 3150 :Cellular Automaton(特殊的矩阵,降维优化)

    A cellular automaton is a collection of cells on a grid of specified shape that evolves through a nu ...

  2. 预备架构的工具ADMEMS矩阵

    矩阵,是很多著名方法的核心.例如,制定公司层战略的方法之一是"波士顿矩阵","波士顿矩阵"又称"市场增长率-相对市场份额矩阵". " ...

  3. 虚拟环境中的django及相关包安装

    1.先进入虚拟环境 pyenv activate virtualenvname. 2.安装django软件包 安装命令: pip install django==1.7 查看安装结果: python ...

  4. Poj 2387 Til the Cows Come Home(Dijkstra 最短路径)

    题目:从节点N到节点1的求最短路径. 分析:这道题陷阱比较多,首先是输入的数据,第一个是表示路径条数,第二个是表示节点数量,在 这里WA了四次.再有就是多重边,要取最小值.最后就是路径的长度的最大值不 ...

  5. unix下网络编程之I/O复用(二)

    select函数 该函数允许进程指示内核等待多个事件中的任何一个发生,并仅在有一个或是多个事件发生或经历一段指定的时间后才唤醒它.我们调用select告知内核对哪些描述字(就读.写或异常条件)感兴趣以 ...

  6. Quartz 定时任务(含Redis)

    一  定时任务基础: MQ:Message Queue消息队列服务器:MSMQ.ActiveMQ.Redis等项目任务:确定邮件的发送,重置密码的发送(发送可能会很慢,而且有可能还需要重试),用消息队 ...

  7. Mingw版QtCreator调用VS编译的C++库的方法

    https://wenku.baidu.com/view/ae3667fe0b1c59eef8c7b4bc.html

  8. 基于人脸识别+IMDB-WIFI+Caffe的性别识别

    本文用记录基于Caffe的人脸性别识别过程.基于imdb-wiki模型做finetune,imdb-wiki数据集合模型可从这里下载:https://data.vision.ee.ethz.ch/cv ...

  9. 【转】Jquery修改image的src属性,图片不加载问题

    1.当点击某一按钮的时候,把图片域中的图片改变一下    <img id="randimg" src="/servlet/CreateValidateNum&quo ...

  10. .netcore 在linux 上运行 Helllo World 例子

    要想在linux上运行netcore ,需要在linux 安装netcore SKD 下面分两步完成, 首先我的操作系统是 Ubuntu 14.04 ,不同版本可以参考 官网给出的连接 https:/ ...