https://github.com/OpenDocCN/sec-notes-zh/raw/master/docs/ggl-cbrsec-4/img/563c21b272f8709b264327ebf3dc664e_0.png
在本节课中,我们将学习SQL中一个非常强大的功能:连接表。通过连接,我们可以将数据库中不同表的信息组合起来,从而获得更全面、更有价值的查询结果。
概述
上一节我们学习了如何使用SQL进行查询和过滤。本节中,我们将介绍如何通过连接操作,从多个表中提取和组合数据。这在网络安全分析中非常有用,例如,将员工信息表与机器信息表连接,可以快速识别出使用特定操作系统的员工。
连接表的基本语法
当我们同时操作两个表时,SQL需要明确知道我们引用的列属于哪个表。解决方法是使用表名.列名的格式。
例如,在示例数据库中,employee_id列同时存在于employees表和machines表中。为了区分它们,我们这样写:
employees.employee_id表示employees表中的员工ID列。machines.employee_id表示machines表中的员工ID列。
理解了如何引用不同表中的列之后,我们就可以开始应用连接操作了。
使用内连接
假设我们想更深入地了解公司中访问机器的员工情况。通过连接employees表和machines表,我们可以实现这个目标。
首先,我们需要确定用于连接两个表的共享列。通常,我们会使用一个表中的主键去连接另一个表中对应的外键。
在
employees表中,employee_id是主键,因为它为每一行提供了唯一且非空的值。在
machines表中,employee_id是外键,它引用自employees表的主键。作为外键,它不一定满足唯一和非空的约束。
接下来,我们将使用一种称为内连接的连接方式。内连接会返回在指定列上匹配的行,这些行必须同时存在于两个表中。
为了更清晰地解释内连接,我们来看一个简化的例子。假设我们只关注两个表中的各四行数据。
我们选择在两个表中都存在的employee_id列来执行内连接。观察匹配的行:两个表在employee_id列上都有值1188和1189,因此它们被认为是匹配的。连接的结果就是包含1188和1189的这两行数据,以及两个表中的所有列。
在继续学习查询之前,我们需要了解表中的空值。在SQL中,NULL代表由于任何原因导致的缺失值。在我们的例子中,这可能代表尚未分配给任何员工的机器。
在SQL中执行内连接
现在,让我们在SQL中对完整的表执行内连接。
https://github.com/OpenDocCN/sec-notes-zh/raw/master/docs/ggl-cbrsec-4/img/563c21b272f8709b264327ebf3dc664e_2.png
假设我们希望通过连接表,获得一个显示用户名、办公室位置及其机器操作系统的列表。employee_id是这两个表之间的公共列,我们可以用它来连接。但在最终结果中,我们不需要显示这个列。
以下是构建查询的步骤:
首先,编写一个基础查询,指明我们要选择username、office和operating_system列。我们希望employees表作为第一个(左)表,因此在FROM语句中使用它。
接着,编写查询中告诉SQL将machines表与employees表连接的部分。
让我们分解这个查询:
INNER JOIN告诉SQL执行内连接。然后我们命名想要与第一个表组合的第二个表,这被称为右表。在本例中,我们想要连接
machines表和FROM后面已指定的employees表。最后,我们告诉SQL基于哪一列进行连接。在我们的例子中,我们使用
employee_id列。由于涉及两个表,我们必须指明表名,后跟列名,即employees.employee_id和machines.employee_id。
完整的查询语句如下:
SELECTusername,office,operating_systemFROMemployeesINNERJOINmachinesONemployees.employee_id=machines.employee_id;让我们回顾一下输出结果。很好,我们已经成功连接了两个表。查询结果显示的是在employee_id列上匹配的记录。请注意,这些记录包含了来自两个表的列,但仅限于我们通过SELECT语句指定的那些列。
总结
https://github.com/OpenDocCN/sec-notes-zh/raw/master/docs/ggl-cbrsec-4/img/563c21b272f8709b264327ebf3dc664e_4.png
本节课中,我们一起学习了SQL中的表连接操作。我们首先了解了在涉及多表时,需要使用表名.列名的语法来明确引用列。接着,我们重点学习了内连接,它能够基于两个表共有的列(通常是主键-外键关系)来合并匹配的行。通过一个具体的查询示例,我们实践了如何使用INNER JOIN ... ON ...语句来组合employees和machines表,从而获得包含用户信息及其对应机器操作系统的结果集。
除了内连接,SQL还支持其他类型的连接,它们不要求严格的匹配就能合并表。我们将在下一个视频中讨论这些连接类型。
082:39_02_连接类型
https://github.com/OpenDocCN/sec-notes-zh/raw/master/docs/ggl-cbrsec-4/img/8bc77e9f4da4905f176f46941fd08614_0.png
https://github.com/OpenDocCN/sec-notes-zh/raw/master/docs/ggl-cbrsec-4/img/8bc77e9f4da4905f176f46941fd08614_0.png
概述
在本节课中,我们将要学习 SQL 中的外连接。上一节我们介绍了内连接,本节中我们来看看如何通过外连接来获取更完整的数据集。
外连接简介
内连接仅返回在指定列中具有匹配值的记录。然而,在某些情况下,我们可能需要获取一个或两个表中的所有条目。这时就需要使用外连接。
外连接有三种类型:左连接、右连接和全外连接。与外连接类似,外连接也是将两个表组合在一起。但是,它们不要求列之间必须匹配才能返回行。返回哪些行取决于连接的类型。
左连接
左连接返回第一个表的所有记录,但只返回第二个表中在指定列上有匹配的行。
让我们通过查看两个只有少量列和四行数据的表来研究这种连接类型。employees表是左表(第一个表),machines表是右表(第二个表)。我们以employee_id列进行连接。该列在两表中只有两条记录有匹配值。
当我们执行连接时,SQL 会返回这些具有匹配值的行、左表的所有其他行以及两个表的所有列。来自employees表但未匹配的记录,通过左连接返回时,在来自machines表的列中会包含空值。
以下是左连接的语法结构:
SELECT*FROMtable1LEFTJOINtable2ONtable1.column=table2.column;右连接
右连接返回第二个表的所有记录,但只返回第一个表中在指定列上有匹配的行。
使用上一个例子进行右连接,完整的结果会返回两个表的匹配行、第二个表的所有行以及两个表的所有列。对于任一表中不存在的值,我们会得到一个空值。
以下是右连接的语法结构:
SELECT*FROMtable1RIGHTJOINtable2ONtable1.column=table2.column;全外连接
最后,我们来讨论全外连接。全外连接返回两个表中的所有记录。
使用我们相同的例子,全外连接返回所有表的所有列。如果某一行在特定列上没有值,则返回空值。例如,machines表中没有任何employee_id为 1190 的行,因此该行在来自machines表的列中的值就是空值。
以下是全外连接的语法结构:
SELECT*FROMtable1FULLOUTERJOINtable2ONtable1.column=table2.column;https://github.com/OpenDocCN/sec-notes-zh/raw/master/docs/ggl-cbrsec-4/img/8bc77e9f4da4905f176f46941fd08614_2.png
总结
本节课中我们一起学习了 SQL 中三种外连接:左连接、右连接和全外连接。它们在语法结构上与内连接相似,但使用LEFT JOIN、RIGHT JOIN和FULL OUTER JOIN这些关键字。
作为安全分析师,你不需要死记硬背所有这些内容。一旦理解了所需的连接类型,你可以快速搜索并找到执行这些查询所需的全部信息。掌握了这些关于连接的知识,我们就涵盖了作为使用 SQL 的安全分析师所需的一些非常重要的信息。
https://github.com/OpenDocCN/sec-notes-zh/raw/master/docs/ggl-cbrsec-4/img/8bc77e9f4da4905f176f46941fd08614_2.png
083:总结回顾
https://github.com/OpenDocCN/sec-notes-zh/raw/master/docs/ggl-cbrsec-4/img/f7f0592c3db859dcee9317a7c03e8c3e_0.png
https://github.com/OpenDocCN/sec-notes-zh/raw/master/docs/ggl-cbrsec-4/img/f7f0592c3db859dcee9317a7c03e8c3e_0.png
在本节课中,我们将一起回顾并总结SQL部分所学的全部核心知识与技能。
恭喜你,我们已经共同完成了SQL部分的学习。你付出了很多努力,并掌握了一项对安全分析师职业生涯至关重要的工具。
现在,让我们花点时间回顾一下你在本部分学到的所有主题。
📚 本部分学习内容回顾
上一节我们完成了SQL连接的学习,现在我们来整体回顾一下学习路径。
以下是我们在本部分涵盖的核心主题:
关系数据库与SQL基础:我们首先学习了关系数据库的结构,以及如何使用SQL查询语言来访问它们。
动手编写SQL查询:我们通过实践练习了如何编写自己的SQL查询语句。
**应用SQL进行信息检索**:我们使用SQL来提取作为分析师在工作中可能需要的信息。掌握SQL过滤器:我们深入学习了SQL过滤。从简单的字符串条件开始,到最后,我们学会了如何在一个查询中使用多个过滤器。
使用SQL连接表:我们以SQL连接作为本单元的结尾,学习了如何连接多个表,从而一次性获取更多信息。
https://github.com/OpenDocCN/sec-notes-zh/raw/master/docs/ggl-cbrsec-4/img/f7f0592c3db859dcee9317a7c03e8c3e_2.png
https://github.com/OpenDocCN/sec-notes-zh/raw/master/docs/ggl-cbrsec-4/img/f7f0592c3db859dcee9317a7c03e8c3e_2.png
🚀 学习成果与后续建议
完成本课程,意味着你在未来成为安全分析师的职业生涯中迈出了非常重要的一步。你已经接触到了一个能在工作中为你提供强大助力的工具。
学习像SQL这样的查询语言需要时间。因此,无论何时你需要,我都鼓励你重新回顾本课程的材料。
再次感谢你与我一同完成这段学习旅程。希望你也能像我一样享受使用SQL的过程。
https://github.com/OpenDocCN/sec-notes-zh/raw/master/docs/ggl-cbrsec-4/img/f7f0592c3db859dcee9317a7c03e8c3e_4.png
https://github.com/OpenDocCN/sec-notes-zh/raw/master/docs/ggl-cbrsec-4/img/f7f0592c3db859dcee9317a7c03e8c3e_4.png
总结:本节课中我们一起回顾了SQL部分的学习历程,从数据库基础、查询编写、数据过滤到多表连接,巩固了作为安全分析师所需的核心数据操作技能。请记住持续练习是掌握SQL的关键。
084:课程总结 🎉
https://github.com/OpenDocCN/sec-notes-zh/raw/master/docs/ggl-cbrsec-4/img/2219e1718d6a44727f98210acf3a89dc_0.png
在本节课中,我们将回顾《工具之道:Linux与SQL》这门课程的核心内容,总结所学知识,并为后续学习做好准备。
课程概述
您已经完成了本课程的学习。恭喜您取得了这一成就。
希望您为所学到的一切感到自豪。本课程的重点是计算基础。理解计算基础是您转型为安全分析师过程中的一项宝贵技能。
课程内容回顾
上一节我们介绍了课程的整体目标,本节中我们来具体回顾一下所学内容。
以下是本课程涵盖的核心主题:
操作系统基础:我们首先关注操作系统及其与应用程序和硬件的关系。理解您所保护的系统如何运作,对于有效完成工作至关重要。
Linux操作系统:这引导我们进入Linux操作系统。在安全领域工作时,熟悉Linux非常重要。我们首先讨论了它的体系结构和各种发行版。
Linux命令行实践:然后,我们使用Linux命令行来执行安全分析师可能遇到的任务。
SQL数据库查询:最后,我们探讨了另一个有用的工具,并使用SQL来查询数据库。
学习收获与展望
https://github.com/OpenDocCN/sec-notes-zh/raw/master/docs/ggl-cbrsec-4/img/2219e1718d6a44727f98210acf3a89dc_2.png
完成本课程后,希望您能更好地理解这些计算基础如何支持安全分析师的日常工作。
同时,也希望您能继续在这个专业项目中前进。前方还有许多其他有用且令人兴奋的主题。
再次恭喜您。您完成了又一项课程。掌握技能是值得自豪的事情。请在本项目的后续学习中继续保持。
总结
https://github.com/OpenDocCN/sec-notes-zh/raw/master/docs/ggl-cbrsec-4/img/2219e1718d6a44727f98210acf3a89dc_4.png
本节课中,我们一起学习了《工具之道:Linux与SQL》课程的核心要点,包括操作系统原理、Linux体系结构与命令行操作,以及SQL数据库查询。这些基础知识是您未来在网络安全领域深入发展的坚实起点。请带着这些收获,自信地迎接后续的挑战。