史密斯是ABC数据库服务的实习生DBA,他面前有挑战 - 他必须在使用多个列和行生成的数据库表中引用数据。除此之外,史密斯还必须将列中的值与同一表的同一列中的其他值进行比较。

但是他不知道如何处理这个问题。他知道如何引用数据库中的信息,但他如何将其与数据库本身进行比较呢?

为什么我们不帮助他解决这个问题?

完整的SQL Bootcamp 2021:从零到英雄

最后更新5月2021

畅销书
  • 83课
  • 各级
4.7 (99199)

成为SQL专家!|何塞波罗拉

探索课程

什么是SQL自助联合?

大多数SQL开发人员将熟悉加入两个表来连接其数据的概念。但有些人可能不会意识到它可以加入一张表。虽然它似乎有点迂回,但它实际上是比较和分析表数据的最佳方式反对它自己的数据。

在史密斯的情况下,SQL自助连接查询将是他的问题最有效的解决方案。SQL Self Join基本上是一个正常的连接,但它是用于将表加入本身的查询。

可以这样可视化——对于给定的表,SELF JOIN是在该表的两个相同副本之间执行的连接。同一个表联接自身的另一个副本,而不是与不同的表合并。

想象一下,在您面前打印出两组数据的两个副本 - 两份电子表格 - 所以您可以更有效地比较数据。

为什么我们使用自我加入?

你为什么要加入一张桌子?

自助连接的一些实际用途是获取运行计数和总计,确定特定列下的数据满足某一组条件,并通过从原始表中提取数据来生成另一个表。

自我加入关系的一些应用如下,但当然,还有许多其他可能性:

除了SELF JOIN,还有其他选择。而不是使用SELF JOIN,像Smith这样的开发人员可能会选择使用分析函数。但是分析函数往往比SELF JOIN更健壮,更难导航,特别是对于相对简单的查询。

涉及多个自助查询时,查询本身就可以变得非常资深。这始终是任何类型的SQL连接。因此,如果他们将以任何规律性加入大型数据,开发人员可能希望深入了解分析函数和其他替代方案。

但是,对于较小的应用程序,一次性查询和更少的资源密集型数据库,自行连接通常是最直接的选项。

除了自我加入查询本身之外,数据库可能需要重新设计。通常情况下,使用多个自行连接并加入查询时,特别是如果查询是密集的。重新考虑数据库的初始设计如果数据需要定期进行广泛重新格式化,因为这是数据库的先前格式不再适用于数据库的当前需求的标志。

自行连接的示例和格式

自连接可以是内连接或外连接。表根据在不同记录中具有重复数据的字段或字段组合连接到自己。相关列的数据类型必须是相同的类型,或者需要将它们转换为相同的类型。

要编写查询,请从中列出的两次使用不同的别名,设置比较,并消除特定值将等于其自身的情况。您可以使用自行连接来简化内部和外部查询引用同一表的嵌套SQL查询。这些连接允许您从同一表中检索相关的记录。

例1:

让我们占据我们使用自助联合的一个例子,使员工姓名与主管或经理的名称相匹配。员工表如下:

emp_id. emp_name. emp_supv
4081. 南希·布朗 空值
4083 彼得帕克 4081.
4055 雅各布米勒 4083
4058 玛丽雷 4083
4060. 简·史密斯 4081.
4061 鲍勃猎人 4081.

在这个表中,manager属性只是引用同一表中另一个员工的员工ID。例如,南希·布朗是公司的首席执行官,彼得·帕克向南希·布朗汇报,而雅各布·米勒和玛丽·雷向彼得·帕克汇报。

以下是将检索所需结果的SQL语句:

句法:

SELECT a. Emp_ID AS " Emp_ID ",emp_name.AS “Employee Name”, b.emp_id AS “Supervisor ID”,b.emp_name AS “Supervisor Name” FROM employees AS a LEFT OUTER JOIN employees AS b ON a.emp_supv = b.emp_id

正如您所看到的,这种自助语法相当复杂,但主要问题是难以阅读。为此原因创建和依赖于自我连接陈述时,非常重要,因为它们并不总是直观或易于阅读,而且它们可能很难在代码库中维护。

对应的输出表如下所示:

emp_id. 员工姓名 主管ID 主管名称
4081. 南希·布朗 空值 空值
4083 彼得帕克 4081. 南希·布朗
4055 雅各布米勒 4083 彼得帕克
4058 玛丽雷 4083 彼得帕克
4060. 简·史密斯 4081. 南希·布朗
4061 鲍勃猎人 4081. 南希·布朗

在编写自行连接语句时选择正确的连接类型非常重要。在这种情况下,我们使用左外连接以确保我们有与每个员工对应的输出记录。如果我们使用内部连接,那么南希·布朗,首席执行官将被省略,因为她没有主管。

使用不正确的连接类型是涉及SQL Self连接时最常见的缺陷之一,因此,在决定是否使用内连接或外连接时必须注意。

例2:

下面的示例执行Sales的自连接。表生成销售人员及其匹配区域的列表。

句法:

SELECT st.Name AS TerritoryName, sp.BusinessEntityID, sp.SalesQuota, sp.SalesYTD FROM Sales。销售人员作为sp加入销售。SalesTerritory AS st ON sp.TerritoryID = st. territory id ORDER BY st. name, sp.BusinessEntityID

例3:

使用自助连接来查找由多个供应商提供的产品。这是某人可能使用自助的经典原因之一,因为它是某人通常可能不做的(它可能不是初始数据库架构的一部分),但它仍然可能是某人可能需要偶尔做的事情。

由于此查询涉及ProductVendor表的连接本身,因此FROM子句使用了两个不同的别名(PV1和PV2)。这些别名用于符合查询的其余部分中的列名称。

句法:

选择不同的发现。ProductID, pv。VendorID采购。ProductVendor pv1 INNER JOIN采购。ProductVendor pv2 ON pv1。ProductID =兵。ProductIDAND pv1.VendorID <> pv2.VendorID ORDER BY pv1.ProductID

该讨论可以推断为包括SQL中的其他类型的加入查询,例如:

内连接

左外连接

右外连接

全外加入

交叉连接

加入陈述可能会变得非常复杂。高级SQL Developers可以使用SQL Join语句进行非常复杂的内容,但应该注意,资源使用(CPU和RAM)往往会更加复杂,加入语句越复杂。此外,每次添加新表时,它们都可以实际呈指数。您可以使用多个表进行加入语句,但并不总是最好的方法。

SQL SELE加入的常见错误是什么?

使用错误的JOIN类型(例如需要外部连接时使用内部连接)是使用SQL SELF JOIN时最常见的错误之一。另一个常见的错误——更多的是资源使用问题或可伸缩性问题——是在过于庞大的数据集上使用SQL SELF JOIN。

复杂的加入查询往往是责任应用程序中的CPU使用量增加。有时,可以更好地重新设计表而不是实现复杂的自行连接可能更好。

其他常见的SQL错误在SQL自行连接期间可能会成为有问题,例如数据类型不匹配,谓词评估订单和复杂子查询。因为加入功能可以复杂,可能不易读取或可扫描,因此更容易使语法导向错误。您应该彻底测试SQL Self加入查询,以确保它们提供必要的结果。

SQL SELF JOIN的优点和缺点是什么?

如上所述,有些原因是史密斯将使用SQL Self加入。它是将表格与本身比较的最直接的方法。它可以帮助查询分层数据并比较表中的行。因此,您可以使用它来比较数据,分析数据和生成新数据。

但是也有缺点来使用SQL Self加入。

首先,在使用连接时,难以读取所涉及的查询。一个加入可能会令人困惑,尤其是在开发期间,并且很难创建一个加入查询,从而产生正确的结果betwayapp下载安装。总的来说,加入往往是资源密集型 - 取决于您计划操纵的数据量。

当然,SQL Self加入有一个非常具体的用例;您用它来加入一张表。想要互相进行比较其他表的开发人员应该探索不同类型的联合。

那么连接多个表呢?

SQL Self加入无法加入多个表,但加入多个表相似的。为此,您可以查看文章SQL加入多个表。

连接多个表时涉及的大多数语法都类似于SQL SELF JOIN。可以通过SQL join连接两个或多个表,许多优点、优点和潜在错误都是相同的。一旦开发人员掌握了“JOIN”概念,他们应该能够以任何一种方式连接表。

SQL连接和SQL SELE加入之间的主要区别是加入在一起的表不会具有相同的架构。这将使查询更复杂,以及最终结果。

开发的最高课程betwayapp下载安装

完整的2021 Web开发训练营betwayapp下载安装
安吉拉Yu博士
4.7 (131,219)
畅销书
iOS&swift - 完整的iOS应用开发训练营betwayapp下载安装
安吉拉Yu博士
4.8 (61,175)
畅销书
完成c# Unity Game Developer 3D
Ben Tristem, Rick Davidson(游戏开发者)电视团队
4.7 (27,176)
畅销书
理解TypeScript - 2021版
MaximilianSchwarzmüller.
4.7 (21,589)
畅销书
数据科学课程2021:完整的数据科学训练营
365职业,365职业团队
4.6 (91,771)
畅销书

更多的发展betwayapp下载安装课程

您如何了解有关SQL Self加入的更多信息?

SQL Self加入是一个相当简单的工具,但其应用程序可能很复杂。此外,了解SQL自助连接和其他更模糊的SQL工具可以帮助数据库开发人员在其字段中更高级。虽然大多数SQL操作只能使用少数函数和关键字,但对SQL的更深入或更深入的了解,始终帮助有兴趣改善他们的站立的专业人士。有兴趣的人可以查看最有用的SQL命令。

有兴趣学习更多关于SQL Self Join的人应该检查Udemy的甲骨文课程。我们的SQL Developer Smith可以参加这些课程,以了解有关数据库管理和甲骨文的更多信息 - 他甚至可以通过继续教育来改善他的职业生涯。

如果您只闯入SQL或需要进修课程,您可能希望考虑UDEMY中提供的许多训练营课程之一。在一个训练营,你可以“从初学者到专家”。但即使您已经有了先前的经验,训练营也可以是一个很好的进修。Oracle和MySQL都是今天常见使用的SQL数据库技术,但是一个是专有和商业的,而另一个是自由和开放的源。

SQL开发人员是否需要了解SQL SELF JOIN等高级功能与他们将要进行的开发类型有很大关系。betwayapp下载安装一些SQL程序员只需要从数据库中提取一些简单的信息用于分析和业务报告。其他SQL程序员需要能够从头开始开发数据密集型包。但无论如何,SQL入门课程都是有帮助的。

概括

SQL Join语句特别强大的工具。它们不仅可以将表格与自己进行比较,而且可以将表格与其他故事进行比较。但它们也很复杂的工具。与其他查询相比,它们的语法可以复杂。返回的结果也可能是复杂的。因此,由于SQL加入查询尤其是资源密集型的,因此必须在创建并利用它们时进行护理。

随着Smith的职业发展,他可以在JOIN语句方面获得更多的经验和创造性,这将在更少的延迟时间内提供更好的结果。要成为一名数据库编程专家,Smith可以学习Udemy课程来提高他的SQL技能。希望我们帮史密斯解决了他的问题。祝愿他在DBA的职业生涯中取得成功,取得成就,取得成功。

SQL中的顶级课程

SQL和PostgreSQL:完整的开发人员指南
Stephen主梁
4.7 (1,466)
收视率最高
完整的SQL Bootcamp 2021:从零到英雄
何塞Portilla
4.7 (99199)
畅销书
终极MySQL训练营:从SQL初学者到专家
Colt Steele,Ian Schoonover
4.6 (54,389)
畅销书
SQL - 用于数据分析和商业智能的MySQL
365职业
4.6 (27,853)
畅销书
高级SQL:SQL Expert认证准备课程
Oracle Master Training•全球90,000多名学生,古典明星学院
4.5 (2,214)
完整的SQL和数据库训练营:零到精通[2021]
Andrei Neagoie, Mo Binni
4.6 (1,480)
SQL for初学者:使用MySQL和数据库设计学习SQL
Tim Buchalka的学习编程学院,Jon Avis - SQL讲师
4.5 (11,354)
SQL&PostgreSQL为初学者:成为一个SQL专家
Jon Avis - SQL教练
4.6 (3,241)
畅销书
SQL编程基础知识
全球学院
4.4 (114)

更多SQL课程

SQL学生还学习

让你的团队。领导行业。

通过Udemy为Business获取组织的在线课程和数字学习工具库的订阅。

请求演示