SQL复杂查询 及 sqlzoo练习

2 02 2 年,我在某城市参加了数据库培训。
当时我很困惑,对视图和子查询没有深入的理解。
后来我花了很多时间、很多钱去想办法。

当时我尝试创建一个视图来按性别总结人数。
我创建一个视图,然后选择性别和人数,然后选择 As,然后选择查询语句。
我记得当时写的是视图性别数字汇总 select sex, count from Student table group by sex count(),
我使用视图的时候,我在选择语句子句中写了视图名称,看起来像这样:select sex number summary from system,
后来我学会了子查询,很有趣。
它就像一个嵌套查询,首先运行 from 子句,然后运行外部查询。
我正在尝试使用子查询来完成一些复杂的事情,例如比较每个组中的数据。

我还记得有一次,我使用标量子查询来解决一个问题。
由于汇总函数不能在 where 子句中使用,因此我使用了标量子查询。

相关子查询,这个东西很难,但是一旦理解了它,就可以解决很多业务问题。
例如,如果我想知道哪些学生在所有课程中的成绩比某个班级高,我需要使用相应的子班级。

然后我学习了各种函数,数学,字符串和日期。
这些函数在处理数据时非常有用。
我记得尝试对一些数值使用旋转函数,对一些文本数据使用字符串函数。

最后,我通过SQlzoo网站上的练习加强了自己的知识,比如询问人口比俄罗斯多的国家,欧洲哪些国家的人均GDP比英国大等等。
我还尝试使用SQL查询解决一些实际问题,比如询问不同州的人口百分比。

在这个过程中我遇到了很多问题,也学到了很多东西。
现在回想起来,我可能有偏见,但当时我很困惑。

什么是子查询?

这就是洞。
别相信。
不要这样做。

子查询 分组 区别是什么?

抱歉,谈论子查询和组查询是一个很长的故事。
当我刚开始接触数据库的时候,这两件事让我很头疼。
现在回想起来,差别已经在这里了。

子查询就像嵌套的洋葱。
你一层层剥开,每一层都是一个查询。
例如,如果您想找出哪个学生的考试成绩最高,然后检查该学生的所有考试记录,您可以使用子查询。
您首先运行内部查询,例如“查找得分最高的学生的 ID”,然后使用该 ID 运行外部查询。
这个玩法类似于使用小刀片,先将目标圈起来,然后将其一一切割。

当时我不明白如何在 SQL 中组合查询。
后来想想,这就是SQL的强大之处。
如果使用得当,它可以让你写出特别简洁的代码。
但老实说,如果包含太多,数据库将不得不花费时间进行计算,并且性能可能会受到影响。

对于集体探究,就像在一堆散落的珍珠中找到相同颜色,然后数出它们的数量。
您可以使用 GROUP BY 告诉数据库按什么标准进行分组,例如按姓名对学生进行分组,然后计算每个人选修的课程数。
这个东西要和批处理函数一起使用,比如COUNT、SUM、AVG,不然分组就没用了,数据还是乱的。

而且说实话,这两件事有很多实际应用。
例如,如果要查看哪些学生的成绩高于平均绩点,可以先创建一个子查询来计算平均绩点,然后查看那些学生的记录。
或者,如果您想检查每个学生哪个主题获得最高分,您应该使用子查询来查找最高分,然后将它们链接到学生表。

简而言之,子查询是先检查后使用,集合查询是先拆分后检查。
一种侧重于生成临时结果集,另一种侧重于收集数据和统计数据。
如果使用得当,它可以使你的代码简洁高效。
但是,还应该注意的是,嵌套子查询过多以及聚合查询的聚合字段和聚合函数选择不当可能会降低数据库速度。
البيانات.