📜  如何在 MySQL 中关系查询两个不同的表(1)

📅  最后修改于: 2023-12-03 15:24:17.479000             🧑  作者: Mango

如何在 MySQL 中关系查询两个不同的表

MySQL 是一种关系型数据库管理系统,可以通过 SQL 语句进行数据的存储、查询、更新和删除等操作。在实际开发中,我们经常需要查询两个或多个不同的表之间的关系,比如说两个表之间的联合查询、内连接、左连接、右连接和全连接等操作。本文将介绍在 MySQL 中如何进行关系查询两个不同的表。

准备工作

在开始关系查询两个不同的表之前,我们需要先准备好两个表,这里以员工表和部门表为例。假设我们已经创建了两个表 employeedepartment,并且这两个表中都包含了一个字段 department_id,用来表示员工所属的部门编号。我们的目标是查询员工表和部门表之间的关系,以获取每个员工所属的部门信息。

下面是创建 employeedepartment 表的 SQL 语句:

CREATE TABLE employee (
  id INT PRIMARY KEY,
  name VARCHAR(50),
  gender VARCHAR(10),
  age INT,
  department_id INT,
  salary FLOAT
);

CREATE TABLE department (
  id INT PRIMARY KEY,
  name VARCHAR(50),
  manager VARCHAR(50)
);
联合查询

联合查询(UNION)是将两个表中的数据合并成一个结果集的查询操作。需要注意的是,联合查询要求两个表中的字段数量和数据类型必须一致。

下面是一个简单的例子,使用联合查询获取部门表和员工表中的所有数据:

SELECT id, name, NULL AS manager FROM department
UNION
SELECT id, name, NULL AS manager FROM employee;

可以看到,上述查询结果中包含了两个表中的所有数据。如果要去掉重复的数据,可以使用 UNION ALL操作符。

内连接

内连接(INNER JOIN)是根据两个表之间的关联条件将符合条件的数据进行联合查询的操作。内连接只返回两个表中都存在的记录。

下面是一个简单的例子,使用内连接查询部门表和员工表中的数据:

SELECT e.name, d.name FROM employee e INNER JOIN department d ON e.department_id = d.id;

上述查询结果中,只返回了两个表中都存在的员工姓名和部门名称。

左连接

左连接(LEFT JOIN)是以左表为基础,将左表中所有的记录和右表中符合条件的数据进行联合查询的操作。如果右表中的数据不存在,则以 NULL 填充。

下面是一个简单的例子,使用左连接查询部门表和员工表中的数据:

SELECT e.name, d.name FROM employee e LEFT JOIN department d ON e.department_id = d.id;

上述查询结果中,返回了左表中的所有员工姓名和对应的部门名称。如果员工所属的部门不存在,则使用 NULL 填充。

右连接

右连接(RIGHT JOIN)是以右表为基础,将右表中所有的记录和左表中符合条件的数据进行联合查询的操作。如果左表中的数据不存在,则以 NULL 填充。

下面是一个简单的例子,使用右连接查询部门表和员工表中的数据:

SELECT e.name, d.name FROM employee e RIGHT JOIN department d ON e.department_id = d.id;

上述查询结果中,返回了右表中的所有部门名称和对应的员工姓名。如果员工所属的部门不存在,则使用 NULL 填充。

全连接

全连接(FULL OUTER JOIN)是返回两个表中的所有记录,如果某个表中的数据不存在,则以 NULL 填充。

MySQL 不支持全连接操作,但可以使用 UNION ALL 操作符模拟全连接。

下面是一个简单的例子,使用 UNION ALL 操作符模拟全连接查询部门表和员工表中的数据:

SELECT e.name, d.name FROM employee e LEFT JOIN department d ON e.department_id = d.id
UNION ALL
SELECT e.name, d.name FROM employee e RIGHT JOIN department d ON e.department_id = d.id
WHERE e.department_id IS NULL;

上述查询结果中,返回了两个表中的所有员工和部门名称。如果员工或部门不存在,则使用 NULL 填充。

总结

在 MySQL 中,可以通过联合查询、内连接、左连接、右连接和全连接等操作实现关系查询两个不同的表之间的关系。在实际开发中,根据情况选择不同的操作,可以轻松地实现复杂的查询功能。