MySQL 连接类型介绍
MySQL 连接类型介绍
MySQL 支持多种表连接方式,主要包括内连接(INNER JOIN)、左连接(LEFT JOIN)和右连接(RIGHT JOIN)。这些连接方式用于根据关联条件合并两个或多个表中的数据。
内连接(INNER JOIN)
内连接返回两个表中满足连接条件的行。如果某行在其中一个表中没有匹配,则该行不会出现在结果中。
语法示例:
SELECT 列名
FROM 表1
INNER JOIN 表2 ON 表1.列 = 表2.列;
示例:
假设有两个表 employees
和 departments
,查询员工及其所属部门:
SELECT employees.name, departments.department_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.id;
左连接(LEFT JOIN)
左连接返回左表(FROM 子句中的表)的所有行,即使右表中没有匹配。如果右表中没有匹配,结果中右表的列将显示为 NULL。
语法示例:
SELECT 列名
FROM 表1
LEFT JOIN 表2 ON 表1.列 = 表2.列;
示例:
查询所有员工及其所属部门(包括未分配部门的员工):
SELECT employees.name, departments.department_name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.id;
右连接(RIGHT JOIN)
右连接返回右表(JOIN 子句中的表)的所有行,即使左表中没有匹配。如果左表中没有匹配,结果中左表的列将显示为 NULL。
语法示例:
SELECT 列名
FROM 表1
RIGHT JOIN 表2 ON 表1.列 = 表2.列;
示例:
查询所有部门及其员工(包括没有员工的部门):
SELECT employees.name, departments.department_name
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.id;
连接类型对比
连接类型 | 描述 | 是否保留未匹配行 |
---|---|---|
INNER JOIN | 仅返回匹配的行 | 不保留 |
LEFT JOIN | 返回左表所有行,右表未匹配为 NULL | 保留左表 |
RIGHT JOIN | 返回右表所有行,左表未匹配为 NULL | 保留右表 |
实际应用建议
- 需要同时匹配两个表的数据时使用内连接。
- 需要保留主表(如员工表)所有记录时使用左连接。
- 需要保留关联表(如部门表)所有记录时使用右连接。
通过合理选择连接类型,可以高效地获取所需数据,同时避免信息丢失。