MySQL 联合查询的使用教程

 更新时间:2025年04月27日 09:59:06   作者:2401_89793006  
联合查询(JOIN)通过将两个或更多表根据一定条件连接起来,从而形成一个虚拟的结果集,本文将详细介绍 MySQL 联合查询的使用,帮助你掌握不同类型的联接及其应用场景,感兴趣的朋友一起看看吧

MySQL 联合查询教程

在 MySQL 中,联合查询用于从多个表中检索数据,常用于关联表中的信息。联合查询(JOIN)通过将两个或更多表根据一定条件连接起来,从而形成一个虚拟的结果集。MySQL 支持多种类型的联合查询,包括 INNER JOINLEFT JOINRIGHT JOINFULL OUTER JOIN 等。

本文将详细介绍 MySQL 联合查询的使用,帮助你掌握不同类型的联接及其应用场景。

一、基本的联合查询

1.1 INNER JOIN(内连接)

INNER JOIN 是最常见的一种连接方式,它返回的是两个表中匹配的记录。如果某一表中的行没有与另一表中的行匹配,则这行数据不会出现在结果集中。

语法:

SELECT column_names
FROM table1
INNER JOIN table2
ON table1.column_name = table2.column_name;

示例:

假设有两个表 employees(员工表)和 departments(部门表):

employees 表:

idnamedepartment_id
1Alice1
2Bob2
3Charlie1

departments 表:

idname
1HR
2IT

查询 employeesdepartments 表中的匹配记录,返回员工名称和所属部门名称:

SELECT employees.name AS employee_name, departments.name AS department_name
FROM employees
INNER JOIN departments
ON employees.department_id = departments.id;

结果:

employee_namedepartment_name
AliceHR
BobIT
CharlieHR

1.2 LEFT JOIN(左连接)

LEFT JOIN 返回左表的所有记录,以及右表中匹配的记录。如果右表没有匹配的记录,则返回 NULL

语法:

SELECT column_names
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name;

示例:

SELECT employees.name AS employee_name, departments.name AS department_name
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.id;

结果:

employee_namedepartment_name
AliceHR
BobIT
CharlieHR

假设我们在 employees 表中增加了一个没有对应部门的员工:

INSERT INTO employees (name, department_id) VALUES ('David', NULL);

查询结果会是:

employee_namedepartment_name
AliceHR
BobIT
CharlieHR
DavidNULL

1.3 RIGHT JOIN(右连接)

RIGHT JOIN 返回右表的所有记录,以及左表中匹配的记录。如果左表没有匹配的记录,则返回 NULL

语法:

SELECT column_names
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;

示例:

SELECT employees.name AS employee_name, departments.name AS department_name
FROM employees
RIGHT JOIN departments
ON employees.department_id = departments.id;

结果:

employee_namedepartment_name
AliceHR
BobIT
CharlieHR

如果 departments 表中增加了一个没有员工的部门:

INSERT INTO departments (id, name) VALUES (3, 'Finance');

查询结果会是:

employee_namedepartment_name
AliceHR
BobIT
CharlieHR
NULLFinance

1.4 FULL OUTER JOIN(全连接)

FULL OUTER JOIN 返回左表和右表中的所有记录。如果某一表中的行没有与另一表中的行匹配,则返回 NULL。MySQL 本身不直接支持 FULL OUTER JOIN,但可以通过 UNION 来模拟。

语法:

SELECT column_names
FROM table1
LEFT JOIN table2
ON table1.column_name = table2.column_name
UNION
SELECT column_names
FROM table1
RIGHT JOIN table2
ON table1.column_name = table2.column_name;

示例:

SELECT employees.name AS employee_name, departments.name AS department_name
FROM employees
LEFT JOIN departments
ON employees.department_id = departments.id
UNION
SELECT employees.name AS employee_name, departments.name AS department_name
FROM employees
RIGHT JOIN departments
ON employees.department_id = departments.id;

结果:

employee_namedepartment_name
AliceHR
BobIT
CharlieHR
DavidNULL
NULLFinance

二、基于多个条件的联合查询

2.1 使用多个条件进行连接

可以在 ON 子句中使用多个条件进行联合查询,多个条件之间使用 ANDOR 进行连接。

示例:

SELECT employees.name AS employee_name, departments.name AS department_name
FROM employees
INNER JOIN departments
ON employees.department_id = departments.id
AND employees.age > 25;

该查询返回部门中年龄大于 25 岁的员工名称。

2.2 使用 USING 关键字

如果两个表中有相同的列名,可以使用 USING 来简化查询语句。USING 关键字自动将相同的列名作为连接条件。

示例:

SELECT employees.name AS employee_name, departments.name AS department_name
FROM employees
INNER JOIN departments
USING (department_id);

三、联合查询中的排序与限制

3.1 排序查询结果

可以在联合查询中使用 ORDER BY 来对结果进行排序。排序可以基于一个或多个列进行。

示例:

SELECT employees.name AS employee_name, departments.name AS department_name
FROM employees
INNER JOIN departments
ON employees.department_id = departments.id
ORDER BY employees.name;

3.2 限制查询结果

可以使用 LIMIT 语句限制联合查询返回的记录数。

示例:

SELECT employees.name AS employee_name, departments.name AS department_name
FROM employees
INNER JOIN departments
ON employees.department_id = departments.id
LIMIT 5;

四、总结

本文介绍了 MySQL 中常用的联合查询类型,包括:

  • INNER JOIN:返回两个表中匹配的记录。
  • LEFT JOIN:返回左表的所有记录以及右表中匹配的记录。
  • RIGHT JOIN:返回右表的所有记录以及左表中匹配的记录。
  • FULL OUTER JOIN:返回两个表中的所有记录,使用 UNION 模拟。
  • 多个条件连接:可以使用 ANDOR 等多个条件进行连接查询。

掌握这些联合查询的使用方法,能够帮助你更加灵活地操作 MySQL 数据库,获取需要的结果。如果你希望深入了解更多内容,可以参考 MySQL 官方文档。

到此这篇关于MySQL 联合查询教程的文章就介绍到这了,更多相关mysql 联合查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL最大连接数限制的修改步骤

    MySQL最大连接数限制的修改步骤

    针对一些访问量比较大的网站,Mysql默认的最大连接数可能不够用,需要进行相应的修改,下面这篇文章主要给大家介绍了关于MySQL最大连接数限制的修改步骤,需要的朋友可以参考下
    2022-07-07
  • 深入解析Linux下MySQL数据库的备份与还原

    深入解析Linux下MySQL数据库的备份与还原

    以下是对Linux下MySQL数据库的备份与还原进行了详细的分析介绍。需要的朋友可以过来参考下
    2013-08-08
  • 基于proxysql实现MySQL读写分离的实现实例

    基于proxysql实现MySQL读写分离的实现实例

    这篇文章主要介绍了基于proxysql实现MySQL读写分离,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-11-11
  • MySQL处理重复数据的学习笔记

    MySQL处理重复数据的学习笔记

    在本篇文章里小编给大家分享的是一篇关于MySQL处理重复数据的学习笔记,需要的朋友们可以参考下。
    2020-03-03
  • MySQL数据库中删除重复记录简单步骤

    MySQL数据库中删除重复记录简单步骤

    这篇文章主要给大家介绍了关于MySQL数据库中删除重复记录的相关资料,在使用数据库时,出现重复数据是常有的情况,但有些情况是允许数据重复的,而有些情况是不允许的,当出现不允许的情况,我们就需要对重复数据进行删除处理,需要的朋友可以参考下
    2023-08-08
  • Mysql数据库的导入导出方式(各种情况)

    Mysql数据库的导入导出方式(各种情况)

    这篇文章主要介绍了Mysql数据库的导入导出方式(各种情况),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-03-03
  • mysql 8.0.16 Win10 zip版本安装配置图文教程

    mysql 8.0.16 Win10 zip版本安装配置图文教程

    这篇文章主要为大家详细介绍了mysql 8.0 Win10 zip版本安装配置图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • mysql 5.7.17 安装图文教程(windows)

    mysql 5.7.17 安装图文教程(windows)

    这篇文章主要介绍了windows下mysql 5.7.17 安装图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-03-03
  • mysql 8.0.17 解压版安装配置方法图文教程

    mysql 8.0.17 解压版安装配置方法图文教程

    这篇文章主要为大家详细介绍了mysql 8.0.17 解压版安装配置方法图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-09-09
  • 如何解决mysql无法关闭的问题

    如何解决mysql无法关闭的问题

    在本篇文章里小编给大家整理的是一篇关于解决mysql无法关闭的问题的相关内容,需要的朋友们可以参考下。
    2020-08-08

最新评论