有时您可能倾向于将跨越多个表的数据组合。在这期间,您可能想知道SQL语法最好。当然,答案是加入。但这是一个比那样复杂的答案。

加入是通常用于组合和整合两个或更多表的语法。表一次加入两个,使得一个新表,其中包含来自原始两个表的所有可能的行组合 - 或者一次使用多个表。有许多类型的连接命令,具体取决于需要组合的表和它们内部的数据。因为有多种类型的加入命令,所以要了解所有这些都是一个好主意。这样,当您准备开始创建自己的语句时,您永远不会混淆使用哪种类型的连接。

完整SQL训练营2021:从零到英雄

最后更新5月2021

畅销书
  • 83讲座
  • 各级
4.7 (99,530)

成为SQL的专家!|由穆Portilla

探索课程

作为开发人员,您可能有不同的方法来处理数据库查询。在本教程中,我们将详细介绍如何使用一些更常用的方法加入表格 - 包括如何在多个表上整合查询到单个语句中。虽然这些选项中的一些可能会影响性能,增加或减少处理时间,或者弹出错误,练习和体验将使更容易知道何时使用哪种类型的查询。

如果您是新的编写SQL查询或需要进修,则可能希望从我们的有用SQL命令列表开始。它将概述如何使用插入,删除和orderby等操作。

加入多个表的最简单方法

首先,让我们从你可以用来加入多个表的最简单方法开始。这很简单,你可能已经这样做了。

查询多个表的最快、最简单的方法是直接通过SELECT语句。您可以使用FROM子句来组合多个表的结果,从而调用多个表。

从表1中选择table1.column1,table2.column2,表2其中table1.column1 = table2.column1;

使用SELECT语句,大多数人将在没有每天实现它的情况下加入表格。Select语句的优势是它非常简单;如上所述,大多数人甚至没有意识到他们已经使用过它。但是,SELECT语句的缺点是它对您如何加入桌子的控制权并不起。

当然,它也会让人感觉很混乱。因为每一列都必须用它的表名和它自己的名称来调用,所以很难阅读。

假设您希望在从多个表中选择数据时控制表的顺序,具体连接到左表或使用外键。其他类型的连接和SQL查询可能更适用,并且您可能需要高级连接操作。

其他连接SQL查询将为您提供更多控制数据操作。这可以帮助您获得所需的结果,而且还可以控制完成查询时使用的资源。加入多个表通常是资源密集型,无论是在CPU和内存方面。因此,您希望尽可能确保您正在简化和优化查询。

union语句是用单个查询从多个表返回信息的另一种方法。union语句允许您针对多个表执行查询并在统一集中返回结果,如下例所示:

从Table1 Union中选择Column1,Column2,Column3选择Column1,ColumN2,ColumN3来自表2;

这将返回一个结果集,其中包含三列包含来自两个查询的数据。默认情况下,除非使用UNION所有关键字,否则union语句将省略表之间的重复。

当不同表的返回的列没有列或数据可以进行比较和连接,或者在防止运行多个查询并在应用程序代码中附加结果时,协会是有用的。与子查询一样,UNION语句可以在数据库服务器上创建沉重的负载,但偶尔使用,它们可以节省大量时间。

如果您发现自己需要执行大量UNION查询,那么您或多或少可能需要重组数据库,以便将这些表包含在单个表中,或者至少需要移动一些数据。UNION查询不应该频繁出现,也不应该内置到应用程序中,因为它们的资源负载很重;由于需要进行大量的数据操作,它们的可伸缩性不如许多其他查询。

执行SQL Join命令

使用SELECT和UNION,一些数据库可能会限制它们能够处理的表的数量。这时,最好使用SQL JOIN语句来连接两个或多个表。连接表可能会对SQL服务器造成更大的压力,但这也取决于所使用的SQL JOIN语句和JOIN子句的类型。

实际上,有多种类型的SQL语句。开发人员手动查询数据库时,会使用一次性和动态的SQL语句。一些程序员甚至在他们的应用程序中合并了SQL命令。当向应用程序中添加SQL语句时,它们必须是可伸缩的。SQL连接是一种功能强大的工具,但请考虑它将如何适应数据库的增长和应用程序使用量的增加。

让我们看一下所有类型的SQL连接。

SQL连接的类型

以下是不同类型的SQL连接:

为什么需要这么多加入命令?

这些都将加入多个表。但它们与SQL中的表格不同;使用这些SQL连接和合适的连接条件,您可以对如何识别并返回数据来深入控制。

了解上面的加入是很多像有一个非常好的工具箱。所有这些连接语句都是最适合不同场景的语句,并且它们都不是“一体化”工具。在区分它们时,您需要考虑如何对数据配对,您要返回的数据以及您的资源使用程度如何。

对于许多刚刚开始学习的SQL开发人员来说,真正理解这些JOIN语句的最佳方法是创建两个(或更多)表,并在表上运行这些语句。通过运行这些语句并查看结果,您将更快地了解它们是如何工作的。

SQL Inner Join.

定义:这返回来自多个表的所有行,其中遇到连接条件或返回表1和表2相交的记录。内连接只会返回两个表中存在数据的行。它指定了两个表的完整横向产品。

SELECT columns FROM table1 INNER JOIN table2 ON table1。列= table2.column;

INNER JOIN非常类似于OUTER JOIN,但您需要事先知道要做什么—是需要返回所有记录还是只需要适用的记录。OUTER JOIN为您提供了对数据的更多控制,但是INNER JOIN将返回您可能需要的几乎所有内容。

但是,INNER join也可能提供不符合您需求的信息。因为它们将包含不满足您所有需求的行,所以它们可以用空结果填充您的查询。

SQL左外连接

定义:此类型的连接返回使用ON条件指定的左侧表中的所有行,并且仅满足连接条件的其他表中的那些行。此语句从表1返回所有记录,也才能与表2相交的表2中的记录。

SELECT columns FROM table1 LEFT [OUTER] JOIN table2 ON table1。列= table2.column;

许多人将默认使用SQL左外连接,而不需要考虑它们可能需要SQL右外连接。并且仍然,其他人只需使用外部连接或内连接而不指定左侧或右表。

事实上,使用左或右表通常更进一步,大多数人只会在没有得到他们需要的数据的情况下进行。尽管如此,对左右加入的更深层次理解可以更容易找到和操作数据。

记住:左右术语是相对的。他们将反映您列出您表格的顺序。

如果SELECT或UNION语句不适用,人们通常会使用经典的INNER JOIN或OUTER JOIN语句。换句话说,INNER JOIN和OUTER JOIN语句是最常见的JOIN类型,没有任何LEFT、RIGHT或OUTER特征。因此,如果您要学习任何类型的JOIN语句,您都需要很好地理解这两个语句。

SQL右外连接

描述:这种类型的连接返回使用ON条件指定的右手表中的所有行,只返回满足连接条件的另一个表中的行。换句话说,该语句返回表2中的所有记录,并且只返回与表2相交的表1中的记录。

SELECT columns FROM table1 RIGHT [OUTER] JOIN table2 ON table1。列= table2.column;

当然,您还可以控制您带入的表的顺序。所以,您可以随时将表1置于表2中,反之亦然。因此,右外连接很少使用,因为您可以用左外连接替换它,没有真正的功能丢失。

考虑一下,当您引用客户然后订单时,将留下客户表,订单表是对的。但是你可以轻松地指订单,然后是客户。所以,左右确实有意义,帮助你弄清楚抽象的东西,但实际上,你可以订购你想要的东西,左边加入通常会做你想要的东西。

However, there may be times when you want to be consistent regarding which tables are always “LEFT” and which tables are always “RIGHT” — usually if you’re going to conceptualize some tables (like the “customers” table) as being the main table with the major data storage.

SQL全外连接

定义:此类加入从左侧表和右侧表返回所有行。未满足连接条件的位置,插入NULL。连接操作后的结果将是表1和表2的所有记录。

在Table1.Column = Table2.Column中选择来自Table1 Full [Outlue]加入表2的列;

有些数据库替换具有全加入的完整外部连接关键字,因此您应确保检查数据库使用的语法。

oracle,Microsoft SQL和MySQL等所有数据库源自SQL标准。有了这一说法,他们并非所有人都不相同地实施这些SQL标准。因此,某些语法可能因您正在运行的程序而异。您应该始终首先使用SQL Server签入。

除了文档之外,大多数SQL服务器都有一个“HELP”命令,可以让您了解更多关于函数的信息。如果您键入一个没有任何修饰符的函数,您还可以获得它的语法概述以及如何成功地使用它。

SQL交叉加入

定义:这将返回所有记录,其中来自第一表中的每一行与第二个表中的每一行组合。您可以通过两种方式指定交叉连接:使用JOIN语法或从逗号分隔的表中列出表,而不使用WHERE子句来提供连接条件。

从[表1]中选择*交叉连接[表2]或从[表1]中选择*,[表2]

交叉连接是一个非常高级的加入类型,但它实际上非常简单;它只需创建第一表行和第二表的行的组合。它也被称为笛卡尔联接。但是因为它看起来很复杂,很好地关注你正在使用的语法。

虽然CROSS JOIN功能强大(而且看似简单),但您可能永远不会使用它;大多数人会使用其他形式的JOIN或以其他方式连接他们的数据。但是在使用时,它可以方便地合并来自多个表的数据。

概括

您的成功作为成功的DBA在于构造和开发一个适当的设计和链接数据库,这将帮助您从您所需要的表中检索信息,根据表中的任何数据指定检索条件,并按任何顺序显示结果你喜欢。

加入命令最初似乎很复杂。但它们并不像似乎一样复杂。加入命令的主要问题是它们通常不是人类可读。他们往往非常漫长,并不“优雅”。通常,您需要对您选择的列和值非常具体,这导致乍一看看起来很困惑的查询。

但是,一旦剥离加入命令的更复杂的部分,它们非常简单。它们只是一种比较数据集的方式。例如,如果查看电子表格,例如,这些类型的数据整合变得非常直观。

虽然大多数人倾向于使用Select语句加入表,但了解其他类型的SQL联接深入将使某人成为更好的DBA。了解您可以使用的所有工具意味着当另一个工具最适合这项工作时,您也会熟悉。同时,这并不意味着您应该始终使用最复杂的格式。加入查询确实以一个价格来了;加入查询可能更复杂(和有趣),资源密集型的可能性越有可能。

永远记住,性能是子宫的一个重要因素。每个查询都以单独处理,然后用作主要查询的资源之前。因此,加入语句的创造性使用可以提供更好的结果,滞后时间较小。但如果您发现您遇到高资源使用情况,并且需要使用大量的连接语句以获取所需的结果,您可能需要以不同的方式构建数据库。

SQL中的顶级课程

全面的SQL课程2021
Malvik vagadia.
4.8 (34)
热&新
SQL和PostgreSQL:完整的开发人员指南
斯蒂芬格莱德里
4.8 (1,486)
收视率最高
完整SQL训练营2021:从零到英雄
何塞波罗拉
4.7 (99,530)
畅销书
Ultimate MySQL BootCamp:从SQL初学者到专家
Colt Steele,Ian Schoonover
4.6 (54,558)
畅销书
SQL - 用于数据分析和商业智能的MySQL
365职业
4.6 (27,972)
畅销书
SQL和数据库设计A-Z™:学习MS SQL Server + PostgreSQL
Kirill Eremenko,Ilya Eremenko,Ligency团队
4.4 (4,154)
高级SQL:SQL Expert认证准备课程
•代码之星学院,全球90,000多名学生
4.5 (2,239)
完整的SQL和数据库Bootcamp:零掌握[2021]
安德烈Neageie,Mo Binni
4.6 (1,503)
SQL初学者:使用MySQL学习SQL和数据库设计
Tim Buchalka的学习编程学院,Jon Avis - SQL教练
4.5 (11,576)
SQL&PostgreSQL为初学者:成为一个SQL专家
Jon Avis - SQL讲师
4.6 (3,259)
畅销书

更多SQL课程

SQL学生还学习

赋予你的团队。引领行业。

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

请求演示