MSSQL下借助合并实现两个数据表的高效查询

什么是MSSQL?

MSSQL是一种关系数据库管理系统(RDBMS),由Microsoft维护和开发。它被广泛用于企业级应用程序,特别是在Web应用程序中。

为什么需要合并查询?

在数据库应用程序中,有时需要从两个或多个表中组合数据来执行复杂的查询。使用合并查询可以在单个结果集中组合数据,而不必多次查询数据库。

MSSQL提供了几种合并查询的方法,包括UNIONUNION ALLINTERSECTEXCEPT等。

使用UNION ALL合并两个数据表

创建数据表

让我们从创建两个基本的数据表开始,这些表将使用UNION ALL命令合并。假设我们有两个表:Customers和Orders。我们将创建这些表并将一些示例数据添加到它们中。

CREATE TABLE Customers (

CustomerID int,

CustomerName varchar(255),

ContactName varchar(255),

Country varchar(255),

City varchar(255),

PostalCode varchar(255)

);

CREATE TABLE Orders (

OrderID int,

CustomerID int,

OrderDate Date,

Amount decimal(8,2)

);

INSERT INTO Customers (CustomerID, CustomerName, ContactName, Country, City, PostalCode)

VALUES (1,'Alfreds Futterkiste', 'Maria Anders', 'Germany', 'Berlin', '12209'),

(2,'Ana Trujillo Emparedados', 'Ana Trujillo', 'Mexico', 'México D.F.', '5021'),

(3,'Antonio Moreno Taquería', 'Antonio Moreno', 'Mexico', 'México D.F.', '5023'),

(4,'Around the Horn', 'Thomas Hardy', 'UK', 'London', 'HG1'),

(5,'Berglunds snabbk?p', 'Christina Berglund', 'Sweden', 'Lule?', 'S-958 22');

INSERT INTO Orders (OrderID, CustomerID, OrderDate, Amount)

VALUES (1, 3, '2021-05-10', 100.50),

(2, 5, '2021-05-11', 200.00),

(3, 2, '2021-05-15', 450.75),

(4, 1, '2021-05-19', 25.13),

(5, 4, '2021-05-22', 75.00);

使用UNION ALL查询表数据

现在我们已经创建了两个表,让我们使用UNION ALL来合并这些表。此命令将返回从两个表中检索的所有行,并将它们合并到单个结果集中。

SELECT CustomerName, 'Customers' as TableName

FROM Customers

UNION ALL

SELECT CAST(OrderID AS varchar(10)), 'Orders' as TableName

FROM Orders

在这个示例中,我们使用了UNION ALL来合并Customers和Orders表。我们选择了两个列CustomerName和OrderID,并添加了另一个列TableName。

结果如下所示:

CustomerName TableName
Alfreds Futterkiste Customers
Ana Trujillo Emparedados Customers
Antonio Moreno Taquería Customers
Around the Horn Customers
Berglunds snabbk?p Customers
3 Orders
5 Orders
2 Orders
1 Orders
4 Orders

如上所述,我们执行了一个单一的查询,从两个表中选择数据,并返回其结果。这比将两个查询组合在一起并执行它们要更有效率。

使用UNION联接两个数据表

创建数据表

我们来看一些不同的数据表,这次我们将使用UNION命令来合并这些表。在这个例子中,我们将创建两个表:Students和Adults。我们将在这些表中添加一些示例数据。

CREATE TABLE Students (

StudentID int,

FirstName varchar(255),

LastName varchar(255),

Age int,

Grade varchar(255)

);

CREATE TABLE Adults (

AdultID int,

FirstName varchar(255),

LastName varchar(255),

Age int,

Occupation varchar(255)

);

INSERT INTO Students (StudentID, FirstName, LastName, Age, Grade)

VALUES (1,'John', 'Doe', 15, '9th'),

(2,'Jane', 'Doe', 17, '11th'),

(3,'David', 'Smith', 18, '12th'),

(4,'Sarah', 'Lee', 16, '10th'),

(5,'Jacob', 'Johnson', 14, '8th');

INSERT INTO Adults (AdultID, FirstName, LastName, Age, Occupation)

VALUES (1, 'Tom', 'Smith', 35, 'Engineer'),

(2, 'Kathy', 'Lee', 42, 'Teacher'),

(3, 'David', 'King', 30, 'Doctor'),

(4, 'Sarah', 'Johnson', 27, 'Lawyer'),

(5, 'Jacob', 'Brown', 38, 'Accountant');

使用UNION联接表数据

现在我们已经创建了两个表,让我们使用UNION来合并这些表。

SELECT FirstName, LastName, Age, 'Student' as Category

FROM Students

UNION

SELECT FirstName, LastName, Age, 'Adult' as Category

FROM Adults

在这个示例中,我们使用了UNION来联接Students和Adults表。我们选择了四个列FirstName、LastName、Age和Category。

结果如下所示:

FirstName LastName Age Category
John Doe 15 Student
Jane Doe 17 Student
David Smith 18 Student
Sarah Lee 16 Student
Jacob Johnson 14 Student
Tom Smith 35 Adult
Kathy Lee 42 Adult
David King 30 Adult
Sarah Johnson 27 Adult
Jacob Brown 38 Adult

如上所述,我们使用了一个查询,从两个表中选择数据,并将其联接在一起,返回单个结果集。这比将两个查询组合在一起并执行它们更加有效率。

总结

对于那些需要处理多个表中的数据的数据库应用程序来说,合并查询是一个完美的解决方案。MSSQL提供了几种类型的合并查询,包括UNIONUNION ALLINTERSECTEXCEPT。在本文中,我们重点介绍了使用UNION ALLUNION命令来合并两个或多个表的数据。

我们看到了合并查询的效率之所以高,是因为只需要执行一个查询,而不是多个查询。如果我们只需要从两个表中检索数据,那么合并查询将比多个查询要快得多。

数据库标签