之前所有的查询都是在临时性的针对单个条件或者针对同一个表的相同维度进行的,我之前在做题(SQL Zoo)的时候经常想:如果需要经常性的查询某个特定结果要怎么办?如果需要更加复杂的维度查询又怎么办?

哈哈,复杂查询来啦!

本周笔记:

练习1:视图

  • 按性别汇总视图:
创建视图
打开视图结果
  • 每个学生的平均分视图:
创建视图
打开视图结果

练习2:子查询

  • 修改上周查询男、女生人数的查询,使用子查询方式完成
  • 找出每个课程里成绩最高的学号

考虑到如果单独查询出最高成绩列表,可能会出现多个学号都会被重复查询出来的结果,使用了课程号+最高分的方式可以保证唯一性。

0001课程最高分为80分,有两个学生该科目成绩都是80分,故而同时查询到了两个学号。

  • 哪些学生的成绩比课程0003的全部成绩里的任意一个高?
  • 哪些学生的成绩比课程0003的全部成绩里都低?

练习3:标量子查询

  • 小于平均成绩学生的学号和成绩
  • 列出所有平均分数中等(大于60分并小于80分)的学号和成绩
  • 列出学生成绩表,以及所有学生的平均分

此处是不能够返回多个数据的,不然会报错,或者完全找不到结果:

练习4:关联子查询

  • 找出每个课程中大于对应课程平均成绩的学生

练习5:SQL解决业务问题的思路

以上一练习为例:找出每个课程中大于对应课程平均成绩的学生

  • 翻译成自己能看明白的大白话

先找到每门课程的平均成绩
之后对比学生的每课的成绩确认是否大于对应课程的平均成绩由于此处需要对比对应课程平均成绩,可以考虑使用关联子查询
最后列出结果包括学号、课程号以及成绩

  • 写出分析思路

select 学号, 课程号, 成绩 from score (基础查询)as s1 (关联子查询需要别名比较)where 成绩 > ( select avg(成绩) from score (关联子查询的基础语句)as s2 (关联子查询需要别名比较)where s1.课程号 = s2.课程号 (进行对比)group by 课程号(分组) having ... (不需要) order by ... (不需要) limit ... (不需要))group by ... (不需要)having ... (不需要)order by ... (不需要)limit ... (不需要)

  • 写出对应的SQL语句
-- 找出每个课程中大于对应课程平均成绩的学生
SELECT 学号, 课程号, 成绩 FROM score AS s1WHERE 成绩 > (SELECT AVG(成绩) FROM score AS s2WHERE s1.课程号 = s2.课程号GROUP BY 课程号);

运行结果如上一练习的截图。


SQL Zoo练习题

  • 第一题
  • 第二题
这道题的题目稍稍有点问题,要求列出人均GDP,但是正确答案却是仅仅需要国家名称即可;题目应该改成“列出欧洲人均GDP高于英国‘United Kingdom’数值的国家名”。
  • 第三题
  • 第四题
  • 第五题
此处根据正确答案提示,将round()的小数点改为0,但Andorra的人口变成了0%有点奇怪
  • 第六题
  • 第七题
这里省略了关键字as
  • 第八题
min()也可以用于字符串,用于按照字母顺序筛选出最小的字符串
  • 第九题
  • 第十题

以上,全部练习完成!

到了这个部分,需要更认真地思考如何将需要查询的东西进行拆解,从而确认是否需要进行子查询,或者根本不需要子查询就可以达成目的。

复杂查询练习_数据分析之路——复杂查询(4)相关推荐

  1. 如何避免循环查询数据库_与数据库无关的查询是不可避免的

    如何避免循环查询数据库 As the amount of data managed by an organization grows, the difficulty of managing and q ...

  2. mysql query 查询失败_如何在mysql进行查询缓存及失败的解决方法

    都知道函数在使用前需要弄清楚参数的属性,这样才能对函数的使用有较好的了解.有些小伙伴学习了查询缓存后,直接进行了下一步的实战操作.这里小编想提醒大家,开始操作之前一定要先设置参数,不然就会出现问题.下 ...

  3. mysql子查询设置_什么是mysql子查询?如何利用子查询进行过滤?

    子查询 MySQL 4.1引入了对子查询的支持,所以要想使用本章描述的SQL,必须使用MySQL 4.1或更高级的版本. SELECT语句 是SQL的查询.迄今为止我们所看到的所有 SELECT 语句 ...

  4. mysql 子查询概念_聊聊MySQL的子查询

    1. 背景 在之前介绍MySQL执行计划的博文中已经谈及了一些关于子查询相关的执行计划与优化.本文将重点介绍MySQL中与子查询相关的内容,设计子查询优化策略,包含半连接子查询的优化与非半连接子查询的 ...

  5. sql子查询示例_学习SQL:SQL查询示例

    sql子查询示例 In the previous article we've practiced SQL, and today, we'll continue with a few more SQL ...

  6. 实验4mysql查询数据_数据库实验四 复杂查询.doc

    实验四 复杂查询 一.实验目的 掌握两个表以上的连接查询的应用,包括嵌套查询. 二.实验内容 (1)查询比"林红"年纪大的男学生信息. select * from Studentw ...

  7. access怎么查询工龄_计算机二级Access数据库查询的功能教程

    计算机二级Access数据库查询的功能教程 引导语:査询是Access数据库的重要对象,以下是百分网小编分享给大家的计算机二级Access数据库查询的功能教程,欢迎阅读! 查询的功能 使用Access ...

  8. JAVA实现查询系统_基于jsp的车辆查询系统-JavaEE实现车辆查询系统 - java项目源码...

    基于jsp+servlet+pojo+mysql实现一个javaee/javaweb的车辆查询系统, 该项目可用各类java课程设计大作业中, 车辆查询系统的系统架构分为前后台两部分, 最终实现在线上 ...

  9. 关联查询取更新时间_数据分析之sql复杂查询

    关键记忆点: 1.[关联子查询] 理解:用于每组组内比较时 应用场景:分组取每组最大值.最小值 #理解:where处的条件为两个表分别是同一组时,筛选满足2表与1表的比较条件,所以group by 可 ...

最新文章

  1. CPU 核数与线程数有什么关系?
  2. Shell练习(七)
  3. sqlite3之基本操作(二)
  4. rust(13)-闭包作为参数 trait泛型
  5. 灰色市场(Gray Market),简称灰市,也称半黑市
  6. ul1977标准_UL 1977连接器认证知识
  7. python段子_Python爬取内涵段子里的段子
  8. 最新版Byte Buddy完全支持Java 11
  9. 电商网站攻防,三个制胜锦囊
  10. 【GBK、UTF-8、ISO8859-1】三种编码方式总结及实例
  11. python回车换行怎么不行_解决pycharm回车之后不能换行或不能缩进的问题
  12. [01] 四大组件之Activity
  13. 时序分析基本概念介绍<input/output delay>
  14. 从零开始搭二维激光SLAM --- 基于ceres的后端优化的代码实现
  15. API调用,API传参,面向对接开发,你真的会写接口文档吗?
  16. Docker快速入门-腾讯云
  17. sed新增首行与尾行
  18. Oracle商务智能系统(Oracle Business Intelligence System 11i )
  19. 服务器mdf ldf文件,sqlserver2008如何导入mdf,ldf文件
  20. 12306nbsp;售票网站新版验证码识别对抗

热门文章

  1. python中文文本分析_python--文本分析
  2. 查看target/classes/.../dao/文件夹下,发现只有mapper的class文件,而没有xml文件 的解决方法。
  3. 计算机语言常用符号含义,符号的含义 - 解析编译原理
  4. java sessionid放入cookie_sessionID和cookie
  5. 汽车销售系统javaweb代码_有什么代驾系统能远离销售套路_搜狐汽车
  6. 360视域分析 cesium_Cesium-空间分析之通视分析(附源码下载)
  7. 线程的生命周期_[线程设计]通过观察者模式监控线程生命周期
  8. 华为鸿蒙第一期名单,机型正式确认,鸿蒙2.0第一批名单曝光!花粉:华为不够厚道...
  9. 在excel工作表中c1单元格_已知Excel工作表中A1单元格和B1单元格的值分别为“电子科技大学”、“信息中心”,要求在C1单元格显示“...
  10. linux系统基础入门,虚惊一场