如何组合来自多个SQL表的结果(提示:有三种方式) 您所在的位置:网站首页 表格两个公式怎么合并在一起显示 如何组合来自多个SQL表的结果(提示:有三种方式)

如何组合来自多个SQL表的结果(提示:有三种方式)

2024-07-07 10:56| 来源: 网络整理| 查看: 265

目录

我可以将多个查询的结果组合在一起的方法是什么?

结合数据的三种主要方式

Joins

Unions

子查询

很多时候,在关系数据库中,要在查询中显示的信息位于多个表中。这引出了一个问题“你如何结合多个表的结果?”

本课程的所有示例均基于Microsoft SQL Server Management Studio和AdventureWorks2012数据库。

我可以将多个查询的结果组合在一起的方法是什么?

如果SQL没有提供一种简单的方法来组合来自多个查询的结果,那么SQL将不是一种非常有用的语言。幸运的是,有三种主要方法可以组合来自多个表的数据。我们将在此简要介绍这些内容。

结合数据的三种主要方式

关系数据库表中的数据按行和列组织。在我们研究组合数据的方法时,请记住最终结果是通过从两个或多个表中获取一组行,向结果中添加更多列,可能来自另一个关联表或行。

当大多数人学习组合数据时,他们会了解:

JOIN——您可以使用jion将一个或多个查询中的列合并为一个结果。UNION——使用union和其他集合运算符将一个或多个查询中的行组合成一个结果。子查询——有时称为嵌套查询,这些可用于在数据库中执行单独搜索,显示结果可用于另一个查询。 Joins

我喜欢将join视为将数据库重新组合在一起的粘合剂。关系数据库通常被规范化以使数据更易于维护并提高性能,但最终结果是信息被分成许多表。您可以使用join将这些信息重新组合成一种更易于阅读的格式。通过匹配每个表的列来重新组合数据。

在所有情况下,连接都需要两个主要成分:两个表和一个join条件。这些表是我们用来拉取行和列的内容,join条件是我们打算如何匹配表之间的列。

示例JOIN

SELECT Person.FirstName, Person.LastName, PersonPhone.PhoneNumber FROM   Person.Person INNER JOIN Person.PersonPhone ON Person.BusinessEntityID = PersonPhone.BusinessEntityID

有两种主要类型的join。内部连接(Inner Joins)和外部连接(Outer Joins)。

如果两个表中的连接条件匹配,则内连接(Inner Joins)仅返回结果行。内连接(Inner Joins)主要用于将一个表的主键与另一个表中的外键相匹配。

第二种类型的连接是外连接(Outer Joins)。外连接始(Outer Joins)终为主表返回至少一行(称为Left或Right表),并在非匹配列的相应列中返回null值。外连接(Outer Joins)对于查找不匹配的数据很有用。

重要的是要注意,连接可以返回比组合表中存在的行更多的行。连接返回匹配组合。如果连接两个表,包含5行,其他的10行,结果可能包含0到50行,具体取决于连接条件。

Unions

一个UNION用于在两个或多个查询的行组合成一个结果。Union被称为集合操作符。

为了使Union发挥作用,必须出现一些特殊情况。首先,每个查询必须具有相同的列数。其次,这些列的数据类型必须兼容。一般来说,每个查询必须返回相同数量和类型的列。

Union的一个实际示例是当两个表包含部件号并且您想要为目录创建组合列表时。您可以选择将最终结果作为组合查询的唯一列表,或者如果使用UNION ALL,则返回每个表中的所有行。

示例UNION

SELECT C.Name FROM   Production.ProductCategory AS C UNION SELECT S.Name FROM   Production.ProductSubcategory AS S

除了Union之外,还有一些其他方便的集合运算符:

INTERSECT——您可以使用它来仅返回两个表之间通用的行。EXCEPT——您可以使用它来返回一个表上存在但在另一个表中找不到的行。

在继续学习更多SQL时,您会发现可以使用join为Intersect和Except编写等效语句,但Union没有等效语句。

子查询

子查询有时称为嵌套查询。它们是在其他查询中定义的查询。子查询可能会令人困惑。我认为很多原因是它们可以在SQL select语句中的许多地方使用,并且出于多种目的!

例如,以下是您可能会看到子查询的一些地方:

SELECT子句——用于返回值。例如,如果您要查询销售表,则可以通过返回子查询中所有销售额的总和来包括总销售额。 WHERE子句——子查询可以在比较中的where子句中使用。您可以设置比较以将销售额与总体平均值进行比较。将从子查询返回总体平均值。您还可以在成员运算符(如IN)中使用子查询。您可以使用子查询使其更具动态性,而不是对in子句进行硬编码。 HAVING子句——来自子查询的单个值包含在HAVING子句比较中。

示例子查询

SELECT SalesOrderID, LineTotal, (SELECT AVG(LineTotal)   FROM Sales.SalesOrderDetail) AS AverageLineTotal FROM   Sales.SalesOrderDetail

当在select子句和比较运算符(如equals,大于和小于)中使用时,子查询只能返回一行。如果与成员运算符(如IN)一起使用,则查询可以返回一行或多行。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有