练习一、创建每科课程的平均成绩视图




大于8点就是下一天 mysql sql大于某个时间_sql查询 关联帖子


视图优点:

  • 频繁使用的SQL语句可以保存在视图中,特别是在进行汇总以及特别的查询条件导致SQL查询语句特别庞大时候。
  • 视图里的数据可以跟随原表的变化自动更新。
  • 视图不保存数据,节约设备空间

视图注意事项:

  • 不要再视图中再创建视图,这样会降低SQL效率
  • 视图中不能使用ORDER BY
  • 不能往视图插入数据

练习二、子查询

1.子查询在FROM子句


大于8点就是下一天 mysql sql大于某个时间_查询某个分区是那张表_02


2.子查询在WHERE子句中(结合in,any,all)


大于8点就是下一天 mysql sql大于某个时间_大于8点就是下一天 mysql_03

查找每个课程里成绩最高的学生学号、课程号和成绩

大于8点就是下一天 mysql sql大于某个时间_sql大于某个时间_04

查找哪些学生成绩比课程0002全部成绩的任意一个都高

大于8点就是下一天 mysql sql大于某个时间_sql查询 关联帖子_05

查找成绩大于所有的课程平均成绩的学生学号和成绩

子查询注意事项:

  • 子查询结果不能进行运算,如不能使用a > 3*all(b),可以用a/3 > all(b)
  • 随着子查询嵌套层数的增加, SQL 语句会变得越来越难读懂,尽量避免使用多层嵌套的子查询
  • 子查询的AS和别名在WHERE子句中可以省略

练习三、标量子查询


大于8点就是下一天 mysql sql大于某个时间_大于8点就是下一天 mysql_06


标量子查询注意事项:

  • 标量子查询和上面的子查询区别是:标量子查询结果返回唯一值;不仅可以使用IN、ANY、ALL也可以直接与运算符结合使用
  • 标量子查询绝对不能返回多行数据,否则就是普通的子查询

练习四、关联子查询


大于8点就是下一天 mysql sql大于某个时间_sql查询 关联帖子_07

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

关联子查询注意事项:

  • 关联条件一定要写在子查询里面,子查询内部设定的关联名称,只能在该子查询内部使用。

练习五、如何用SQL解决业务问题-哪些学生的成绩比课程0002全部成绩的任意一个高呢?

1)把问题翻译成自己理解的话:第1步,查找课程0002的全部成绩;第2步,某个学生成绩大于任意一个第1步骤的成绩

2)分析思路:

子查询:

  • SELECT:查询结果【成绩】
  • FROM :从哪张表查找数据【成绩表:score】
  • WHERE:查询条件【课程号是0002】
  • GROUP BY:分组【没有】
  • HAVING:对分组结果指定条件【没有】
  • ORDER BY 对结果排序【没有】
  • LIMIT从查询结果中取出指定行【没有】

外查询:

  • SELECT:学号,成绩
  • FROM :score
  • WHERE:成绩 > ANY(子查询)

3)写SQL语句

SELECT 学号,成绩 FROM score WHRER 成绩 > ANY (SELECT 成绩 FROM score WHERE 课程号='0002');

练习六、SQLZOO

4. Which country has a population that is more than Canada but less than Poland? Show the name and the population.

方法一、采用> <符号


大于8点就是下一天 mysql sql大于某个时间_查询某个分区是那张表_08


方法一、采用BETWEEN AND


大于8点就是下一天 mysql sql大于某个时间_sql查询 关联帖子_09


5. Show the name and the population of each country in Europe. Show the population as a percentage of the population of Germany.


大于8点就是下一天 mysql sql大于某个时间_查询某个分区是那张表_10


注释:采用ROUND函使计算结果四舍五入,采用CONCAT函数,使数据和%相连接。

7. Find the largest country (by area) in each continent, show the continent, the name and the area


大于8点就是下一天 mysql sql大于某个时间_大于8点就是下一天 mysql_11


注释:用到关联子查询,注意除去NULL值

8. List each continent and the name of the country that comes first alphabetically


大于8点就是下一天 mysql sql大于某个时间_查询某个分区是那张表_12


注释:查找每个洲的第一个国家名字,按照名字排序,则第一个国家名字最小

10. Some countries have populations more than three times that of any of their neighbours (in the same continent). Give the countries and continents.


大于8点就是下一天 mysql sql大于某个时间_sql大于某个时间_13


注释:查找一个洲内国家是其他国家人口3倍的国家和洲。这里要限制两个关联,洲相同而国家不相同。

学习笔记:

  1. 当要经常使用某个SQL语句时,可以使用视图
  2. 当不经常使用SQL语句,可以使用子查询
  3. 当需要返回单一值时,可以使用标量子查询
  4. 当需要在每个组内进行比较时候,可以使用关联子查询

5.常用函数:


大于8点就是下一天 mysql sql大于某个时间_sql查询 关联帖子_14


大于8点就是下一天 mysql sql大于某个时间_sql大于某个时间_15


大于8点就是下一天 mysql sql大于某个时间_查询某个分区是那张表_16


大于8点就是下一天 mysql sql大于某个时间_sql查询 关联帖子_17