合并SQL中的两个表
在SQL中,表合并是指根据公共列或标准将给定数据库中两个独立表中的数据合并为单个单元的过程。是的,如果它听起来像一张桌子,那它就是一张桌子。
表连接或表合并是关系数据库的一个著名特性,它非常强大。它允许我们整合来自多个来源的信息,以创建更连贯和有意义的数据见解。它还允许关系数据库具有高度可伸缩性(而不是灵活性),因为我们可以将数据分解成更小的、可管理的块,以便以后引用。
在本教程中,我们将介绍表连接或表合并的基础知识。让我们看一下真实的表示例来巩固我们的知识。
样表
在我们进入表连接的世界之前,让我们先设置一些基本的表,我们将使用这些表进行演示。
考虑包含雇员和工资信息的两个表,如下面的查询示例所示:
创建表employees
INT AUTO_INCREMENT主键,
first_name VARCHAR (50),
last_name VARCHAR (50),
部门VARCHAR (50)
);
然后,我们可以将示例数据插入到员工的表中,如下面的查询所示:
INSERT INTO employees (first_name, last_name, department) VALUES
(《爱丽丝》《史密斯》《人力资源》),
(“鲍勃”、“约翰逊”、“市场部”),
(《查理》、《威尔逊》、《金融》),
(“David”,“Brown”,“Sales”),
('Eva', 'Davis', 'Engineering');
让我们继续创建一个新表来存储工资信息,如下所示:
创建薪金表(
INT AUTO_INCREMENT主键,
employee_id INT,
salary DECIMAL(10,2),
start_date日期,
end_date日期,
外键(employee_id)引用雇员(employee_id)
);
将插入样例数据添加到表中,如下所示:
INSERT INTO salary (employee_id, salary, start_date, end_date) VALUES
(1,600.00, '2023-01-01', '2023-12-31'),
(2,55000.00, '2023-01-01', '2023-12-31'),
(3,65000.00, '2023-01-01', '2023-12-31'),
(4,58000.00, '2023-01-01', '2023-12-31'),
(5,70000.00, '2023-01-01', '2023-12-31');
这将为我们提供两个表,它们可以帮助我们演示SQL中的表连接/合并概念。
SQL表合并/表连接
让我们探索一下可以进行的各种类型的表合并。我们将涵盖基本的,因为我们进展到更先进的。
内连接
SQL中第一种也是最常见的表连接类型是INNER join。INNER JOIN允许我们根据特定条件组合来自两个表的行。然后,此类型仅返回表之间存在匹配的行。
让我们以前面创建的“雇员”和“工资”表为例。要在SQL中执行INNER JOIN,我们使用INNER JOIN子句如下:
选择
e.employee_id,
e.first_name,
e.last_name,
e.department,
s.salary
从
员工e
内连接薪水是ON的
e.p employee_id = s.p employee_id;
在给定的示例查询中,我们使用INNER JOIN合并存在于两个表中的“employee_id”列上的“employees”和“salary”表。结果集只包含两个表中匹配的行。
使用示例输出如下:
左外连接
我们还有一个LEFT OUTER JOIN,它将来自左表的所有行和来自右表的匹配行组合在一起。如果在正确的表中没有匹配,则连接使用NULL值。
选择
e.employee_id,
e.first_name,
e.last_name,
e.department,
s.salary
从
员工e
左加入工资
在
e.p employee_id = s.p employee_id;
在本例中,我们执行LEFT OUTER JOIN来合并“employees”和“salary”表。包括“employees”表中的所有行,并添加“salary”表中的匹配行。但是,对于不匹配的行,“salary”列中包含NULL值。
SQL联盟
在SQL中连接表的另一种方法是使用UNION操作符。该操作符允许我们将两个或多个选择语句的结果组合成单个结果集。
每个SELECT语句中的列必须具有相同的数据类型,才能应用联合。
示例如下:
SELECT employee_id, first_name, last_name, department, NULL作为salary
来自员工
联盟
SELECT employee_id, NULL作为first_name, NULL作为last_name, NULL作为department, salary
从薪水;
在这种情况下,UNION合并了“雇员”和“薪水”表。然后,我们在每个SELECT语句中创建NULL列,以确保两个表具有相似的列数。
union在技术上是常见的,但是当您需要合并具有不同结构的表时,它们可能很有用。
结论
在本教程中,我们探讨了将两个表连接/合并为单个结果集的基础知识。请记住,在这篇文章中讨论了很多更高级的连接。