📜  比较两个查询的 SQL Server 结果

📅  最后修改于: 2022-05-13 01:55:08.334000             🧑  作者: Mango

比较两个查询的 SQL Server 结果

SQL Server 是一种多功能数据库,它是在许多软件行业中使用最多的关系数据库。在本文中,让我们简要地看一下两个查询的 SQL Server 结果的比较。通过使用 Azure Data Studio,让我们从创建数据库、创建表、锁等开始了解概念,Azure Data Studio 适用于 Windows 10、Mac 和 Linux 环境。它可以从安装

数据库创建:

创建数据库的命令。这里 GEEKSFORGEEKS 是数据库名称

CREATE DATABASE GEEKSFORGEEKS;

使数据库处于活动状态

USE GEEKSFORGEEKS;

将表添加到数据库:

使用主键创建表。这里 ID 是一个 PRIMARY KEY 意味着每个作者都有自己的 ID



CREATE TABLE Authors (
  ID INT NOT NULL PRIMARY KEY,
    ,
  ..........
);

如果明确指定了“NOT NULL”,则该列应具有值。如果未指定,则默认为“NULL”。

让我们在表中插入几条记录并检查表的结果内容。

作者表内容

对于 SQL 查询的比较,我们可以使用“UNION、INTERSECT、EXCEPT”结构。我们可以一一检查

除了 :

SQL EXCEPT 的工作方式类似于数学中的“-”运算符。也就是说,它返回来自 Left Query 的记录,而这些记录不存在于来自 Right Query 的记录中。

示例 1:

SELECT * from Authors 
 EXCEPT
 SELECT * from Authors WHERE Skillsets like 'java%' 

输出 :

构建结果除外

解释 :



左侧查询生成表的所有 4 条记录,而右侧查询仅生成第 1 条和第 4 条记录。由于使用了“EXCEPT”构造,因此上述查询的结果将仅生成第二条和第三条记录(在第二条查询中不可用)。

“EXCEPT”构造等效于 oracle 中的“MINUS”构造。

示例 2:

SELECT * from Authors WHERE Skillsets like 'java%'  
 EXCEPT
 SELECT * from Authors 

你能确认这可能是什么输出吗?

是的,确切地说,没有输出,因为左查询只包含第 1 行和第 4 行,而右查询包含所有行,当应用“EXCEPT”时,我们只看到空白数据。

通常,“EXCEPT”用于找出查询的结果是否应该相同,当结果显示没有数据均值时,查询结果是相同的。

注意:只有当两个查询的结果输出相同时,才能在查询之间放置 EXCEPT。如果它们不同,我们不能应用“EXCEPT”

联合:

每当需要合并跨多个表的数据或合并从不同查询演变而来的单个表的数据时,我们都可以选择 UNION。这相当于数学中的“UNION”。

假设有另一个名为“Authors2021”的表,并且有如下几条记录:

Author2021 表格内容

示例 3:



SELECT AuthorName,Age,Skillsets,NumberOfPosts from Authors   
UNION
SELECT AuthorName,Age,Skillsets,NumberOfPosts from Authors2021

输出 :

两个表结果集的并集,这里的公共记录只显示一次从而避免重复

解释 :

如果您查看输出,则会将两个表中的数据组合在一起,因此我们可以看到上面的输出。

应用Union时,如果两张表有共同的记录,就会从一张表中取出数据,避免重复。因此 Union 的结果将是两个表中所有记录的组合。即第一次查询产生的结果集与第二次查询产生的结果集相结合。

如果我们检查输出,我们没有重复的记录。

用法:每当我们需要通过避免重复来显示累积输出时,我们可以选择 UNION。

联合所有:

这与 UNION 类似,但包括重复记录,因此可以看到重复记录

示例 4:

SELECT AuthorName,Age,Skillsets,NumberOfPosts from Authors    
UNION ALL
SELECT AuthorName,Age,Skillsets,NumberOfPosts from Authors2021

输出 :



如果您检查输出,在第 1 行和第 8 行中,检索到的列值是相同的。由于我们使用了“Union ALL”,因此结果来自两个表,包括重复项

应用“UNION”和“UNION ALL”时要考虑的重要注意事项

  1. 应该存在相同数量的列,并且它们的顺序也应该在选择语句中保持
  2. 每个选择查询都可以使用 Group By 和 Have 子句,但不能用于整个结果集
  3. Order By 不能用于每个单独的语句,但可以用于整个结果集。

相交:

此构造提供了两个选择查询之间经常出现的记录。这与 UNION 正好相反。 UNION 删除重复项并显示所有记录,但 INTERSECT 仅显示公共记录。所以,每当有显示普通记录的场景时,我们都可以使用INTERSECT

示例 5:

SELECT AuthorName,Age,Skillsets,NumberOfPosts from Authors    
INTERSECT
SELECT AuthorName,Age,Skillsets,NumberOfPosts from Authors2021

输出 :

解释 :

在比较 Author 和 Author2021 表内容时,对于像AuthorNameAgeSkillsetsNumberOfPosts这样的字段名,只有上面显示的数据是常见的,因此在输出中,我们看到了这一点。

结论 :

通过使用 UNION、UNION ALL、EXCEPT 和 INTERSECT,我们可以比较两个查询并根据我们的要求获得必要的输出。给定的示例很容易遵循,我们可以进行复杂的查询,并且可以在其中应用提到的构造并进行比较。