有关创建 Java 项目的系列文章中的一篇文章(其他材料的链接位于最后)。其目标是分析关键技术,结果是编写一个电报机器人。 以前关于数据库的文章和作业分析:1 , 2 , 3。对于所有有耐心和忍耐力的人,对于所有和我一起阅读第四篇文章的人 - 干得好。正如人们所说,走的人才能掌握路。本周将发布有关数据库的最后一篇文章,其中我们将讨论关系和连接的类型。但在我们处理新信息之前,让我们先检查一下我们的作业……我真的感觉自己像个老师。别生我的气:我没有受过教育,这是肯定的。由于上周对遥控器的详细检查占据了材料的大部分,所以我决定将作业的分析和新材料的复习分为两部分。
然后我们只需要按人口对查询进行排序并只获取一条记录。为此,您需要在脚本末尾添加LIMIT运算符并指定所需数量: $ SELECT * FROM Country ORDER BY Population DESC LIMIT 1;
这里一切都更有趣,因为请求会更复杂,但也更有趣。由于我们仍然不知道有关连接的信息,因此只能获取国家/地区 ID: $ SELECT Country_id, SUM(population) FROM city GROUP BY Country_id ORDER BY SUM(population) DESC LIMIT 1; 在这里,我们做了一件很酷的事情 - 我们收集了每个国家所有已知城市的人口总和,按这个总和排序并取出第一个元素。嗯,很棒吗?我很高兴:D 在此之后,您立即感觉自己像一个查询大师......(当然,不会太久))
在这种情况下,一切都将完全相同。唯一的区别是排序会颠倒——仅此而已。因此,我简单写下请求:
$ SELECT Country_id, SUM(population) FROM city GROUP BY Country_id ORDER BY SUM(population) LIMIT 1;
$ SELECT * FROM 国家/地区 ORDER BY 人口 LIMIT 1; 并亲自看看结果!
这里的技术规范又不准确,就好像经理写的一样......为什么我决定这个?因为不清楚在哪个表中工作。但这是正常的:根本不存在所有事情都会立即清晰易懂的任务。因此,您需要仔细阅读任务,如果您有疑问,请立即询问!没错,就是一句话。考虑到数据库中的数据,我们将使用城市数据进行搜索。为此,请编写以下查询: $ SELECT Country_id, AVG(population) FROM city GROUP BY Country_id; 这里很简单:我们使用 AVG 函数并按国家/地区对城市记录进行分组。
根据要求,这里会略有变化。在进行分组之前,我们需要添加按名称过滤。在发表这篇文章之前,我和所有学生一样做了功课,并且我明白这个问题没有连接就无法解决。为什么?因为除了国家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; 这里发生了什么?首先,我们使用外键 Country_id 连接城市和国家/地区表中的记录,按国家/地区名称进行过滤,以便它们以“a”结尾,然后才按 Country_id 进行分组。
这里我们只需要使用 COUNT 函数并添加对人口的过滤: $ SELECT COUNT(*) from country WHERE Population > 4000000; 结果我们发现这样的国家有3个,对吗?是的,只有摩尔多瓦没有达到这一里程碑。
为此,我们需要使用我们已经知道的 ORDER BY 运算符。但请记住,默认情况下排序是按自然顺序的。对于数字,这意味着它按升序排序,对于字符串,这意味着它从第一个字符开始排序。如果我们需要降序排序,则需要自然排序的逆排序: $ SELECT * FROM Country ORDER BY Population DESC;
这就是自然秩序的知识将派上用场的地方。因为它是默认的,所以对我们来说小菜一碟: $ SELECT * FROM Country ORDER BY name;
其实,作业分析
我非常高兴有人从事 PD 并谈论它。这很酷!我尽可能确信,仅仅阅读而不巩固知识是一条没有出路的路。因此,每个做过或试图做的人——尊重。让我提醒您任务的条件:- 了解HAVING运算符并为示例中的表编写示例查询。如果您需要添加一些字段或更多值以使其更清晰,请添加它们。如果有人愿意,请在评论中写下您的示例解决方案 - 这样我也可以在有时间时检查它。
- 安装 MySQL Workbench 以通过 UI 操作数据库。我认为我们已经在控制台上进行了足够的练习。连接到数据库。如果您使用其他东西来处理数据库,请随意跳过此任务。在这里以及以后我将仅使用 MySQL Workbench。
- 使用我们的数据编写收据请求:
- 最小/人口最多的国家;
- 该国的平均居民人数;
- 名称以“a”结尾的国家的平均居民人数;
- 人口超过四百万的国家数量;
- 按居民数量递减对国家进行排序;
- 按自然顺序按名称对国家/地区进行排序。
我们来谈谈 HAVING
了解 Have 运算符可以帮助您通过不止一次存在 SQL 问题的面试。因此,了解它是极其重要的。碰巧您不能使用聚合函数的条件(SUM、MIN、MAX、AVG)。此外,HAVING 用于分组字段。这是什么意思?例如,如果我们想要得到城市平均居民数超过 50,000 人的国家,就不能不使用 HAVING。据我了解,这样做是因为聚合发生在WHERE语句执行之后,并且不可能向其添加稍后计算的聚合值。即使到目前为止我的观点并没有增加太多的理解,你也可以简单地接受这个事实并接受它。在编程中,经常会发生这样的情况:如果某件事在某个时刻不清楚,很可能意味着大脑还没有消化它。带着这样的想法入睡,第二天一切都会变得更加清晰。安装 MySQL 工作台
在这里以及以后我将使用 Workbench 进行查询。我将向您展示安装和创建数据库连接所需的内容。这是 Oracle 的产品,因此您只需访问他们的网站并选择您想要的版本和操作系统。为此,请点击此链接:在这里您可以准确选择您需要的操作系统。单击“下载”,但我们不会看到此窗口,而是看到此窗口:不要迷路,只需查找名为“不,谢谢,只需开始我的下载”的按钮,下载就会开始。他们为什么要这么做?也许,让更多的人注册他们,这对我们来说并不重要。下载成功后,运行安装文件。在MacOS上,它看起来像这样:只需拖动图标即可,安装完成。不像安装 MySQL 本身那么困难,对吧?或者我们刚刚习惯它并且变得更有经验;) 这项任务的第二部分是建立与我们的数据库的连接。为此需要什么?单击 MySQL Connections 旁边的加号:在出现的窗口中,输入必要的数据:- 连接名称- 我们的连接的名称。名字尽量写清楚,以免以后识别时出现问题。我将此连接命名为JRTB_DB;
- 主机名- 将已设置为本地127.0.0.1(又名 localhost)。在我们的例子中,不需要更改任何内容,因为数据库安装在计算机上,但如果数据库安装在其他地方,则需要相应更改主机(运行数据库的计算机的 IP);
- 用户名- 如果需要,您还可以指定您的用户。如果您没有在此键中添加任何内容,请保持不变;
- 密码- 单击存储在钥匙串中并准确设置您为自己设置的密码。我让一切变得简单——root。
GO TO FULL VERSION