什么是MSSQL?
MSSQL是一种关系数据库管理系统(RDBMS),由Microsoft维护和开发。它被广泛用于企业级应用程序,特别是在Web应用程序中。
为什么需要合并查询?
在数据库应用程序中,有时需要从两个或多个表中组合数据来执行复杂的查询。使用合并查询可以在单个结果集中组合数据,而不必多次查询数据库。
MSSQL提供了几种合并查询的方法,包括UNION
,UNION ALL
,INTERSECT
和EXCEPT
等。
使用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提供了几种类型的合并查询,包括UNION
,UNION ALL
,INTERSECT
和EXCEPT
。在本文中,我们重点介绍了使用UNION ALL
和UNION
命令来合并两个或多个表的数据。
我们看到了合并查询的效率之所以高,是因为只需要执行一个查询,而不是多个查询。如果我们只需要从两个表中检索数据,那么合并查询将比多个查询要快得多。