sql命令_2_左连接/右连接/等值连接/不等连接
在MySQL中,内连接、左连接和右连接都是用来从两个或多个表中根据某些关联条件检索数据的方式,它们的主要区别在于返回结果集的规则不同。
下面通过具体案例来说明这些区别:
假设有两个表:
employees
(员工表): 包含员工ID (emp_id
) 和姓名 (name
)。departments
(部门表): 包含部门ID (dept_id
) 和部门名称 (dept_name
)。并且假设不是每个员工都有明确的部门分配。
内连接 (INNER JOIN)
内连接只返回两个表中匹配的行。如果在一边的表中没有匹配项,那么这些行就不会出现在结果集中。
SQL 示例:
SELECT employees.name, departments.dept_name
FROM employees
INNER JOIN departments ON employees.emp_id = departments.dept_id;
结果: 仅显示那些在employees
表中有对应部门ID的员工及其部门名称。
左连接 (LEFT JOIN 或 LEFT OUTER JOIN)
左连接返回左表(employees
)的所有行,即使在右表中没有匹配。如果右表中没有匹配项,则结果集中右表的部分将为NULL。
SQL 示例:
SELECT employees.name, departments.dept_name
FROM employees
LEFT JOIN departments ON employees.emp_id = departments.dept_id;
结果: 显示所有员工的姓名,即使某些员工没有分配到部门(这些员工的dept_name
字段值为NULL)。
右连接 (RIGHT JOIN 或 RIGHT OUTER JOIN)
右连接与左连接相反,它返回右表(departments
)的所有行,即使在左表中没有匹配。如果左表中没有匹配项,则结果集中左表的部分将为NULL。
SQL 示例:
SELECT employees.name, departments.dept_name
FROM employees
RIGHT JOIN departments ON employees.emp_id = departments.dept_id;
结果: 显示所有部门名称,即使某些部门还没有任何员工分配(这些行的name
字段值为NULL)。
总结
- 内连接:返回两个表中匹配的记录。
- 左连接:返回左表的所有记录,加上右表中匹配的记录,右表没有匹配的记录以NULL填充。
- 右连接:返回右表的所有记录,加上左表中匹配的记录,左表没有匹配的记录以NULL填充。