多表查询解题思路:

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. SQL夯实基础(四):子查询及sql优化案例

    首先我们先明确一下sql语句的执行顺序,如下有前至后执行: (1)from  (2) on   (3) join  (4) where  (5)group by  (6) avg,sum...  (7 ...

  2. LeetCode Distribute Candies

    原题链接在这里:https://leetcode.com/problems/distribute-candies/#/description 题目: Given an integer array wi ...

  3. Maven实现直接部署Web项目到Tomcat7

    如题目,自动部署到Web服务器,直接上过程. 1.Tomcat7的用户及权限配置:在conf目录下,找到tomcat-users.xml,添加manager权限的用户. <role rolena ...

  4. 开始写博客,与ITer们互相学习

    学习计算机也6年了,一直待在学校里.这些年来很多学习资料都来自网络上的技术博客,非常感谢各位 ITer 的分享精神,鄙人从中受益匪浅.从今天起也挤出时间开始写技术博客.主要是把自己这些年的一些技术文档 ...

  5. Dos简单命令

    1.cmd命令进入某个目录,具体教程:http://blog.csdn.net/aidenliu/article/details/5390113 (注意的是:切换目录时不能直接cmd D:\Nancy ...

  6. 第八篇 web开发学习资源

    互联网时代,最好的资源都在网上,好好利用网络学起来! 偶然才发现好资源,很多是E文的,看来努力的路还很长! 1)下面是一个老外收集的PHP资源,确实要为此分享点赞. https://github.co ...

  7. php之laravel学习

    http://laravel-china.github.io/php-the-right-way/#composer_and_packagist laravel 添加 dingoapi路由插件 并运用 ...

  8. java代码继承疑惑,请有心人解答

    总结:这段程序没有问题,编译运行都是可以的.关键是,子类的无参构造方法第一句少了super(a,b);运行后,显示了双重结果 .还有.如果子类中没有声明成员变量String  name.那么结果显示父 ...

  9. 刷题常用的STL容器总结

    本文归纳总结刷题常用到STL容器以及一些标准算法,主要包括: string.vector.map.pair.unordered_map.set.queue.priority_queue.stack,以 ...

  10. 2016.1.1 VS中宏的使用技巧点滴

    Dim selection As TextSelection = DTE.ActiveDocument.Selection'定义 TextSelection 对象 selection.StartOfL ...