对跨多个表格的数据组合时需要用到的SQL

对跨多个表格的数据组合时需要用到的SQL,第1张

对跨多个表格的数据组合时需要用到的SQL,第2张

当跨多个表组合数据时,有时很难知道使用哪种SQL语法。在这里,我将解释将多个表中的查询合并到一个语句中的常用方法。

本文中的示例查询符合SQL92 ISO标准。并不是所有的数据库厂商都遵循这个标准,很多厂商采取的升级措施都会带来一些意想不到的后果。如果不确定你的数据库是否支持这些标准,可以参考厂商的相关资料。

挑选

简单的SELECT语句是查询多个表的最基本方式。您可以在FROM子句中调用多个表来组合多个表的结果。下面是它如何工作的一个例子:

从表1中选择table1.column1,table2.column2,

其中table 1 . column 1 = table 2 . column 1;

在这个例子中,我使用一个点(table1.column1)来指定该列来自哪个表。如果所涉及的列只出现在引用表中,则不需要添加全名,但是添加全名将有助于可读性。

在FROM子句中,表由逗号分隔,您可以根据需要添加任意多的表,尽管在引入正式的JOIN声明之前,一些数据库对它们可以有效处理的内容有限制,这将在下面讨论。

这个语法是一个简单的内部连接。一些数据库将其视为等同于外部连接。WHERE子句告诉数据库要关联哪个区域,当它返回结果时,就像在给定条件下将列出的表组合成一个表一样。值得注意的是,您的比较条件不需要与作为结果组返回的列相同。在上面的示例中,table1.column1和table2.column1用于合并表,但返回的是table2.column2。

可以在WHERE子句中使用AND关键字将该函数扩展到两个以上的表。您还可以使用这种表的组合来限制结果,而不必实际返回每个表中的列。在下面的例子中,table3匹配table1,但是我没有从table3返回任何要显示的内容。我只是确保表1中的相关列存在于表3中。注意,在这个例子中,需要在FROM子句中引用table3。

从表1中选择table1.column1,table2.column2,

表2,表3,其中表1 .列1 =

table2.column1和table 1 . column 1 = table 3 . column 1;

但是,应该注意,这种查询多个表的方式是一种隐含连接。您的数据库可能以不同的方式处理事情,这取决于它使用的优化引擎。此外,忽略与WHERE子句相关的特性的定义会带来不良的结果,比如返回与剩余查询的每个可能结果相关的列的流氓字段,就像在交叉连接中一样。

如果您习惯于数据库处理这种类型的语句的方式,并且您只组合两个或几个表,那么一个简单的SELECT语句就可以实现目标。

加入

JOIN的工作方式与SELECT声明相同,它返回一个包含来自不同表的列的结果组。在隐式连接的基础上使用外部连接的优点是可以更好地控制结果集,而且当涉及许多表时,还可以提高性能。

连接有几种类型:左连接、右连接、全外连接、内连接和交叉连接。您使用的类型由您希望看到的结果决定。例如,使用LEFT OUTER JOIN将返回第一个列出的表中的所有相关行,而如果没有与第一个表相关的信息,则可能会添加第二个列出的表中的行。

这里,内部连接不同于隐含连接。内部联接将只返回那些在两个表中都有数据的行。

对第一个选择查询使用以下联接声明:

从表1内部连接表2中选择表1 .列1、表2 .列2

ON table 1 . column 1 = table 2 . column 1;

子查询

子查询或子选择声明是一种在查询中使用结果组作为资源的方式。它通常用于限制或定义结果,而不是在应用程序软件中运行多个查询或操作数据。使用子查询,您可以参考表来确定数据内容,或者在某些情况下,返回一个列,这是部分选择的结果。

以下示例中使用了两个表。一个表包含我想要返回的数据,而另一个表给出了比较点,以确定我真正感兴趣的数据。

从存在的表1中选择列1

(从表2中选择列1

其中table 1 . column 1 = table 2 . column 1);

查询的一个重要方面是性能。便利是有代价的。这取决于你所使用的表格和报表的大小、数量和复杂程度,你可以让你的应用软件来做处理工作。在被主查询用作资源之前,每个查询将被完全独立地处理。如果可能的话,创造性地使用连接声明可以以更少的延迟时间提供相同的信息。


位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 对跨多个表格的数据组合时需要用到的SQL

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情