SQL设置操作员简介
#sql #database #datascience #分析

检索数据库中存储的数据是数据收集过程的一部分。许多组织已经将数据存储在数据库中,数据是在内部生成的,这消除了通过第三方机构,网络刮擦等进一步搜索数据的需求。

是分析师的责任,连接到组织数据库中存储的可用数据并在其上执行首选分析。

有时在数据库中存储的这些数据时,我们必须从两个或多个表中进行查询。我们希望将两个表的结果汇总到一个表格中。

不是从两个表通过SQL Join执行的两个表加入我们的数据集,而是垂直加入它们,使用SQL Set Operators使它们成为可能。

注意:我在这里使用两个表来简化概念,但是,您不仅限于要使用的表数。只需确保您不会过度使用它,以便保持理智。

可以实现此结果的SQL术语。
集合运算符是用于结合两个或多个查询结果的操作员。

这些包括:
联盟,联盟全部,相交,减,除

除外

此处显示的所有代码示例将使用mysql

编写

设置运算符语法

  SELECT select_query
  set_operator
  SELECT another_select_query

创建我们的桌子

create first table

create second table

创建了我们的表,将一些数据插入其中。

将记录插入我们的桌子

INSERT INTO `students1`(`id`, `first_name`, `last_name`,
`department`, `level`, `residence`)
VALUES (1,"John","Mark","Economics",300,"Hostel"),
(2,"Ikenna","Matthew","Psychology",100,"Hostel"),
(3,"Jones","Jessica","Chemistry",400,"Off_Campus"),
(4,"Sarah","Mary","Sociology",200,"Off_Campus"),
(5,"King", "James", "Social Work", 300, "Hostel")


INSERT INTO `students2`(`id`, `first_name`, `last_name`, `department`, `level`, `residence`)
VALUES (1,"John","Mark","Economics",300,"Hostel"),
(2,"Ikenna","Matthew","Psychology",100,"Hostel"),
(3,"James","Bill","Agric",200,"Hostel"),
(4,"Sarah","Mary","Sociology",200,"Off_Campus"),
(5,"Queen", "Sharon","English", 100, "Off_Campus")

设置运算符


联盟

此集合运算符用于结合两个选择语句的结果。
执行工会操作后获得的结果将消除重复的行。

SELECT id, first_name, last_name, department, level,residence 
FROM students1
UNION
SELECT id, first_name, last_name, department, level,residence 
FROM students2

sql result for union set operation

由于联合操作员消除了重复的值,因此将消除第一个表中已经存在的第二个表中的所有值。

联盟全部

此操作员结合了两个查询的所有记录。
执行所有操作后获得的结果将不会从获得的结果中取消。

SELECT id, first_name, last_name, department, level,residence 
FROM students1
UNION ALL
SELECT id, first_name, last_name, department, level,residence 
FROM students2

sql result for sql union all set operation

联合与联盟全部:您应该选择哪个?

联合和工会之间的区别差异是在两个表中都发现重复记录(行)时发生的事情。

使用联合操作员,删除/删除了重复记录。也就是说,如果第二个表中已经存在第二个表中的记录(行(行),则返回第一个表的行,但是第二个表中的行不会返回,因为已经存在了它的确切记录从第一张表。

联合操作员说,我已经扫描了您的桌子,并且在第一张表中似乎也出现在第二个表中的记录。现在将通过不返回第二个表中的相同记录来帮助您返回不同的记录。

与工会所有操作员一起,所有记录都会返回所有记录,而不论它们是否出现在第二个表中。
工会所有操作员都说,我不在乎是否有重复,这是您两张桌子中的所有记录。联盟中的所有内容都表示所有记录。

联合通常比联合所有人都慢,因为还有一个额外的操作可以删除重复值,这通常是一个昂贵的查询步骤。
联合所有人都不执行明显的查询,因此通常更快。

因此,您无意在结果中拥有唯一的记录,或者如果您确定表中的记录已经是唯一的,请全部使用Union。但是,如果您觉得自己的桌子将包含重复的值,请使用Union。

相交

返回从表和删除重复的记录。
请注意:它消除了重复。

SELECT id, first_name, last_name, department, level,residence 
FROM students1
INTERSECT
SELECT id, first_name, last_name, department, level,residence 
FROM students2

intersect query operation

减/除外

返回第一个查询结果中存在但不存在第二个查询结果中的行。

SELECT id, first_name, last_name, department, level,residence 
FROM students1
EXCEPT
SELECT id, first_name, last_name, department, level,residence 
FROM students2

except sql query result

除外,负和执行相同的查询操作。但是,负是Oracle关系数据库关键字。除其他关系数据库(例如MySQL和PostgreSQL。

注意的要点

1从两个表中选择列时,返回的列数需要在查询之间匹配。如果从第一个查询中选择了三列,则需要从第二个查询中选择三列。

2列的顺序必须相同。

SELECT id, first_name, last_name, department, level,residence 
FROM students1
UNION
SELECT id, last_name, department, first_name, level,residence 
FROM students2
ORDER BY  department

执行上述查询不会产生错误,但是结果会导致障碍。

showing result of a misplaced sql query

3每列的数据类型需要与两个表兼容。如果第一个表中名为first_name的列的数据类型是字符串,则在第二个表中命名为first_name的列的数据类型也应为字符串。

4如果您想订购查询结果,则必须在上次查询的末尾写下订单

SELECT id, first_name, last_name, department, level,residence
FROM students1
UNION
SELECT id, first_name, last_name, department, level,residence 
FROM students2
ORDER BY  department

如果将订单放在第一个查询中,它将生成错误。您可以自己尝试。
5对于最终结果集,分配给列的别名名是从第一个查询中的列的名称中获取的。因此,在第二个查询中的混叠列名不会有用。

SELECT id AS studentID, first_name, last_name, department, level, residence AS location FROM students1
UNION
SELECT id as id_of_student, first_name, last_name, department,level, residence AS address FROM students2

sql query result

在这里,我们使用两个表进行了查询操作。重要的是要注意,我们还可以在设置操作中添加更多表。只需确保您不会添加更多的桌子,从而难以跟踪操作。

结论

尽管SQL中的一个未充分利用概念,但是当我们想将多个表与相同结构组合到单个表中时,设置运算符可能很有用。

在本教程中,我们学会了:

什么是设置运算符
使用集合操作员的原因
设置运算符的类型
关于设置运算符的要点

我确实希望您发现本教程可用于帮助您了解SQL Set Operators
有任何疑问或反馈吗?请在下面评论。

Linkedin Twitter

上与我联系