工会和工会之间的主要区别在于他们如何处理重复记录。
工会和工会都以不同的方式处理重复。工会将结合两个或多个选择的语句以删除重复项,而工会都不会删除重复项,而是将所有记录(包括重复项)串联。
目录:
什么是SQL联合?
这 联盟 在SQL中,将结合两个或多个选定语句的结果,但将滤除结果集中表中的所有重复值。
句法:
SELECT column1, column2, column3, ...
FROM table1
WHERE condition
UNION
SELECT column1, column2, column3, ...
FROM table2
WHERE condition;
例子:
CREATE TABLE customers (
id INT PRIMARY KEY,
name VARCHAR(100),
city VARCHAR(50)
);
CREATE TABLE suppliers (
id INT PRIMARY KEY,
name VARCHAR(100),
city VARCHAR(50)
);
INSERT INTO customers (id, name, city) VALUES
(1, 'Bahadhur', 'Kolkata'),
(2, 'Hema', 'Tamil Nadu'),
(3, 'Chahar', 'Delhi'),
(4, 'Dan', 'Kerala');
INSERT INTO suppliers (id, name, city) VALUES
(1, 'Supplier A', 'Kolkata'),
(2, 'Supplier B', 'Tamil Nadu'),
(3, 'Supplier C', 'Delhi'),
(4, 'Supplier D', 'Kerala');
SELECT city FROM customers
UNION
SELECT city FROM suppliers;
输出:

解释: 这 联盟 查询将两个数据表组合为一个。在此示例中,联合查询将两个表的城市组合在一起,删除了重复项,并显示了独特的价值。
SQL中的联盟是什么?
联盟全部 与工会相同的工作;它结合了从选择语句中的所有结果数据,但不会从结果集中的表中删除重复值。它将结合数据集中的结果值和重复值。
句法:
SELECT column1, column2, column3, ...
FROM table1
WHERE condition
UNION ALL
SELECT column1, column2, column3, ...
FROM table2
WHERE condition;
CREATE TABLE sales_2023 (
order_id INT PRIMARY KEY,
customer_id INT,
amount DECIMAL(10,2)
);
例子:
CREATE TABLE sales_2024 (
order_id INT PRIMARY KEY,
customer_id INT,
amount DECIMAL(10,2)
);
-- Insert sales data for 2023
INSERT INTO sales_2023 (order_id, customer_id, amount) VALUES
(101, 1, 150.75),
(102, 2, 220.50),
(103, 3, 340.00),
(104, 4, 180.25);
-- Insert sales data for 2024
INSERT INTO sales_2024 (order_id, customer_id, amount) VALUES
(201, 2, 200.00),
(202, 3, 400.75),
(203, 5, 120.50),
(204, 6, 310.90);
SELECT order_id, customer_id, amount, '2023' AS year FROM sales_2023
UNION ALL
SELECT order_id, customer_id, amount, '2024' AS year FROM sales_2024;
输出:

解释: 工会都将来自客户和销售的所有数据与重复的值结合在一起。
工会和工会之间的主要区别
联盟 | 联盟全部 |
从桌子上删除所有重复项。 | 不会从桌子上删除重复项。 |
性能较慢,因为它必须删除所有重复项。 | 性能更快,因为它不需要对重复项进行排序或删除。 |
它需要大量的内存使用,因为它需要排序。 | 它不需要高内存使用。 |
它产生独特的内容 | 它具有所有值,包括重复。 |

MySQL的联盟和工会规则
- 每个选择语句都必须返回相同数量的列
- 每列应具有相应的匹配数据类型。
- 工会将删除所有重复项。
- 工会将包括所有行,包括重复项。
- 订单应在选择语句之后放置。
- 工会的性能较慢,因为它必须处理重复项。
- 工会全部更快,因为它不需要处理重复。
- 零值在联盟和工会中始终被视为常规价值。
联盟和工会的真实例子
1。 使用工会与自由职业者合并职位:
这 联盟 将从各种来源合并工作位置,删除重复项并返回唯一的数据。
例子:
CREATE TABLE full_time_jobs (
id INT PRIMARY KEY,
job_title VARCHAR(100),
company VARCHAR(100),
location VARCHAR(50)
);
CREATE TABLE freelance_jobs (
id INT PRIMARY KEY,
job_title VARCHAR(100),
client VARCHAR(100),
remote BOOLEAN
);
-- Insert full-time job listings
INSERT INTO full_time_jobs (id, job_title, company, location) VALUES
(1, 'Software Engineer', 'ERV', 'Delhi'),
(2, 'Data Analyst', 'PQR', 'Srinagar'),
(3, 'Marketing Manager', 'ABC', 'Lucknow'),
(4, 'Software Engineer', 'XYZ', 'Hyderabad');
-- Insert freelance job listings
INSERT INTO freelance_jobs (id, job_title, client, remote) VALUES
(1, 'Software Engineer', ' Client A', TRUE),
(2, 'Graphic Designer', 'Client B', TRUE),
(3, 'Data Analyst', 'Client C', TRUE),
(4, 'SEO Specialist', 'Client D', TRUE);
SELECT job_title FROM full_time_jobs
UNION
SELECT job_title FROM freelance_jobs;
输出:

解释: 这 联盟 将工作位置与自由职业作业相结合,并从表中带有独特的值。
2。使用工会的医院记录:
医院数据库中存在的病房和ICU的患者的诊断, 联盟全部,将产生结合一般病房和ICU诊断的结果。
例子:
CREATE TABLE general_ward (
id INT PRIMARY KEY,
patient_name VARCHAR(100),
diagnosis VARCHAR(100)
);
CREATE TABLE icu_ward (
id INT PRIMARY KEY,
patient_name VARCHAR(100),
diagnosis VARCHAR(100)
);
-- Insert patient records in the General Ward
INSERT INTO general_ward (id, patient_name, diagnosis) VALUES
(1, 'Alex', 'Pneumonia'),
(2, 'Baskar', 'Diabetes'),
(3, 'Sneha', 'Hypertension'),
(4, 'Shekhar', 'Pneumonia'); -- Duplicate diagnosis
-- Insert patient records in ICU
INSERT INTO icu_ward (id, patient_name, diagnosis) VALUES
(1, 'Eric', 'COVID-19'),
(2, 'Bishnoi', 'Pneumonia'), -- Duplicate diagnosis
(3, 'Govind', 'Diabetes'), -- Duplicate diagnosis
(4, 'Hari', 'Cardiac Arrest');
SELECT diagnosis FROM general_ward
UNION ALL
SELECT diagnosis FROM icu_ward;
输出:

解释: 这给出了一般病房和ICU患者诊断的输出,包括重复值。
使用联盟和工会的最佳实践
- 使用 联盟 当您需要消除重复记录并维护数据完整性时。
- 选择 联盟全部 当重复物可以接受时,它可以通过避免排序和过滤的开销来提高性能。
- 确保所有选择的语句具有相同数量的列和兼容数据类型。
- 应用过滤器,例如单个选择语句中的子句,以在使用联合或联合所有工会之前减少数据集。
- 在最终查询中使用明确的列名,以清晰度和可维护性。
绩效注意事项:工会与工会全部
- 联盟 需要其他处理来分类和删除重复项,这可能会减慢性能,尤其是在大型数据集上。
- 联盟全部 通常会更快,因为它直接将结果结合在一起而无需过滤重复。
- 在大量数据方案中, 联盟全部 除非独特性是必不可少的,否则首选。
- 使用适当的索引和限制返回的行,具有限制或顶部等子句可以进一步提高性能。
- 分析查询执行计划以识别瓶颈并相应地进行优化。
工会和工会的用例
联盟:
- 工会的用例将是合并来自多个分支的客户列表,而无需任何重复。
- 它还可以帮助结合不同部门的员工记录。
- 它可以通过交易历史记录创建销售报告,而无需任何重复。
联盟全部:
- 它将从服务器中收集带有事件记录的重复项的所有日志。
- 它将结合全球每月的销售,并将所有活动的记录与重复关系保留。
结论
工会和工会都是SQL运营商,将结合两个精选查询。这 联盟 查询在删除重复项后返回唯一的值;工会所有人将保留桌面上的所有记录,包括重复。它们之间的主要区别是处理重复。工会维持代码冗余,但是由于分类,处理时间将比所有工会延迟。工会全部更快,因为它返回了所有记录。
常见问题解答
1。我什么时候应该使用联盟代替工会?
使用 联盟 当您想结合多个查询的结果并删除重复行时,确保每个记录在最终结果中仅出现一次。
2。联盟都会影响性能吗?
联盟全部 通常比 联盟 因为它没有检查重复记录,请减少处理时间,尤其是在大型数据集的情况下。
3。工会和工会都可以结合来自不同表的数据吗?
是的,只要列的数量及其数据类型匹配在组合查询中,两者都可以将结果组合起来。