JavaRush /Java 博客 /Random-ZH /我们分析数据库和 SQL 语言。(第 4 部分 - 检查作业) - “Java 项目从 A 到 Z”
Roman Beekeeper
第 35 级

我们分析数据库和 SQL 语言。(第 4 部分 - 检查作业) - “Java 项目从 A 到 Z”

已在 Random-ZH 群组中发布
有关创建 Java 项目的系列文章中的一篇文章(其他材料的链接位于最后)。其目标是分析关键技术,结果是编写一个电报机器人。 以前关于数据库的文章和作业分析:1 , 2 , 3。对于所有有耐心和忍耐力的人,对于所有和我一起阅读第四篇文章的人 - 干得好。正如人们所说,走的人才能掌握路。本周将发布有关数据库的最后一篇文章,其中我们将讨论关系和连接的类型。但在我们处理新信息之前,让我们先检查一下我们的作业……我真的感觉自己像个老师。别生我的气:我没有受过教育,这是肯定的。由于上周对遥控器的详细检查占据了材料的大部分,所以我决定将作业的分析和新材料的复习分为两部分。“Java 项目从头到尾”:我们分析数据库和 SQL 语言。 第 4 部分 - 检查作业 - 1

其实,作业分析

我非常高兴有人从事 PD 并谈论它。这很酷!我尽可能确信,仅仅阅读而不巩固知识是一条没有出路的路。因此,每个做过或试图做的人——尊重。让我提醒您任务的条件:
  1. 了解HAVING运算符并为示例中的表编写示例查询。如果您需要添加一些字段或更多值以使其更清晰,请添加它们。如果有人愿意,请在评论中写下您的示例解决方案 - 这样我也可以在有时间时检查它。
  2. 安装 MySQL Workbench 以通过 UI 操作数据库。我认为我们已经在控制台上进行了足够的练习。连接到数据库。如果您使用其他东西来处理数据库,请随意跳过此任务。在这里以及以后我将仅使用 MySQL Workbench。
  3. 使用我们的数据编写收据请求:
    1. 最小/人口最多的国家;
    2. 该国的平均居民人数;
    3. 名称以“a”结尾的国家的平均居民人数;
    4. 人口超过四百万的国家数量;
    5. 按居民数量递减对国家进行排序;
    6. 按自然顺序按名称对国家/地区进行排序。

我们来谈谈 HAVING

了解 Have 运算符可以帮助您通过不止一次存在 SQL 问题的面试。因此,了解它是极其重要的。碰巧您不能使用聚合函数的条件(SUM、MIN、MAX、AVG)。此外,HAVING 用于分组字段。这是什么意思?例如,如果我们想要得到城市平均居民数超过 50,000 人的国家,就不能不使用 HAVING。据我了解,这样做是因为聚合发生在WHERE语句执行之后,并且不可能向其添加稍后计算的聚合值。即使到目前为止我的观点并没有增加太多的理解,你也可以简单地接受这个事实并接受它。在编程中,经常会发生这样的情况:如果某件事在某个时刻不清楚,很可能意味着大脑还没有消化它。带着这样的想法入睡,第二天一切都会变得更加清晰。

安装 MySQL 工作台

在这里以及以后我将使用 Workbench 进行查询。我将向您展示安装和创建数据库连接所需的内容。这是 Oracle 的产品,因此您只需访问他们的网站并选择您想要的版本和操作系统。为此,请点击此链接"Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 2在这里您可以准确选择您需要的操作系统。单击“下载”,但我们不会看到此窗口,而是看到此窗口:"Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 3不要迷路,只需查找名为“不,谢谢,只需开始我的下载”的按钮,下载就会开始。他们为什么要这么做?也许,让更多的人注册他们,这对我们来说并不重要。下载成功后,运行安装文件。在MacOS上,它看起来像这样:"Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 4只需拖动图标即可,安装完成。不像安装 MySQL 本身那么困难,对吧?或者我们刚刚习惯它并且变得更有经验;) 这项任务的第二部分是建立与我们的数据库的连接。为此需要什么?单击 MySQL Connections 旁边的加号:"Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 5在出现的窗口中,输入必要的数据:
  • 连接名称- 我们的连接的名称。名字尽量写清楚,以免以后识别时出现问题。我将此连接命名为JRTB_DB
  • 主机名- 将已设置为本地127.0.0.1(又名 localhost)。在我们的例子中,不需要更改任何内容,因为数据库安装在计算机上,但如果数据库安装在其他地方,则需要相应更改主机(运行数据库的计算机的 IP);
  • 用户名- 如果需要,您还可以指定您的用户。如果您没有在此键中添加任何内容,请保持不变;
  • 密码- 单击存储在钥匙串中并准确设置您为自己设置的密码。我让一切变得简单——root
要检查连接是否有效,请单击“测试连接”"Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 6好吧,如果一切都正确完成,结果很快就会出现:"Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 7现在我们在数据库中有一个已保存的连接,我们不需要创建连接并填写每次都在名称和密码中。这种幸福感将如下所示:"Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 8我们进入新创建的连接并看到请求窗口。为了确保一切正确,让我们检查数据库列表,转到我们的数据库并获取有关城市的所有数据:"Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 9在这里我们可以全权委托我们需要的数据。第一部分负责我们输入的脚本。接下来,在结果网格中,我们看到脚本中最后一个操作的结果。操作输出显示操作列表及其结果。一件非常有用的事情,我想告诉你:在它的帮助下你可以监控某些脚本的执行速度。它为什么如此重要?应用程序中任务执行速度最常见的问题之一是数据库中查询执行的速度。在这里您可以快速方便地手动检查它们。

我们写下必要的请求

我们只有 7 个请求需要完成,开始吧!

  1. 获得人口最多的国家。在这里你可以巧妙地走几条路:

  • 根据国家表

然后我们只需要按人口对查询进行排序并只获取一条记录。为此,您需要在脚本末尾添加LIMIT运算符并指定所需数量: $ SELECT * FROM Country ORDER BY Population DESC LIMIT 1;"Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 10

  • 根据城市表

这里一切都更有趣,因为请求会更复杂,但也更有趣。由于我们仍然不知道有关连接的信息,因此只能获取国家/地区 ID: $ SELECT Country_id, SUM(population) FROM city GROUP BY Country_id ORDER BY SUM(population) DESC LIMIT 1; "Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 11在这里,我们做了一件很酷的事情 - 我们收集了每个国家所有已知城市的人口总和,按这个总和排序并取出第一个元素。嗯,很棒吗?我很高兴:D 在此之后,您立即感觉自己像一个查询大师......(当然,不会太久))

  1. 获得最小的国家。在这里你可以狡猾地走几条路

在这种情况下,一切都将完全相同。唯一的区别是排序会颠倒——仅此而已。因此,我简单写下请求:

  • 根据城市表

$ SELECT Country_id, SUM(population) FROM city GROUP BY Country_id ORDER BY SUM(population) LIMIT 1;

  • 根据国家表

$ SELECT * FROM 国家/地区 ORDER BY 人口 LIMIT 1; 并亲自看看结果!

  1. 该国平均居民人数

这里的技术规范又不准确,就好像经理写的一样......为什么我决定这个?因为不清楚在哪个表中工作。但这是正常的:根本不存在所有事情都会立即清晰易懂的任务。因此,您需要仔细阅读任务,如果您有疑问,请立即询问!没错,就是一句话。考虑到数据库中的数据,我们将使用城市数据进行搜索。为此,请编写以下查询: $ SELECT Country_id, AVG(population) FROM city GROUP BY Country_id; "Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 12这里很简单:我们使用 AVG 函数并按国家/地区对城市记录进行分组。

  1. 名称以“a”结尾的国家的平均居民人数

根据要求,这里会略有变化。在进行分组之前,我们需要添加按名称过滤。在发表这篇文章之前,我和所有学生一样做了功课,并且我明白这个问题没有连接就无法解决。为什么?因为除了国家ID之外,我们还需要得到他的名字。如果不将两个表连接到一条记录中,就无法完成此操作。因此,我当然会完成这个任务,但这是我的门框...)))我想在请求中使用 LIKE 来提出一个任务...) $ SELECT ci.country_id, AVG(ci.population ) FROM city ci INNER JOIN Country co ON ci.country_id = co.id WHERE co.name LIKE "%a" GROUP BY Country_id; "Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 13这里发生了什么?首先,我们使用外键 Country_id 连接城市和国家/地区表中的记录,按国家/地区名称进行过滤,以便它们以“a”结尾,然后才按 Country_id 进行分组。

  1. 人口超过四百万的国家数量

这里我们只需要使用 COUNT 函数并添加对人口的过滤: $ SELECT COUNT(*) from country WHERE Population > 4000000; 结果我们发现这样的国家有3个,对吗?是的,只有摩尔多瓦没有达到这一里程碑。

  1. 按居民数量减少对国家进行排序

为此,我们需要使用我们已经知道的 ORDER BY 运算符。但请记住,默认情况下排序是按自然顺序的。对于数字,这意味着它按升序排序,对于字符串,这意味着它从第一个字符开始排序。如果我们需要降序排序,则需要自然排序的逆排序: $ SELECT * FROM Country ORDER BY Population DESC;"Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 14

  1. 按自然顺序按名称对国家/地区进行排序

这就是自然秩序的知识将派上用场的地方。因为它是默认的,所以对我们来说小菜一碟: $ SELECT * FROM Country ORDER BY name;"Java-проект от А до Я": разбираем базы данных и язык SQL. Часть 4 — проверка домашнего задания - 15

而不是输出

碰巧作业解决方案的规模会很大,所以我们会破例:我将通过支票发布这篇文章,周五我将发布带有连接和联接的新材料。感谢大家的阅读。直到星期五!

该系列所有材料的列表位于本文开头。

评论
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION