-- 示例表结构
CREATE TABLE employees (
id INT PRIMARY KEY,
name VARCHAR(100),
department_id INT
);
CREATE TABLE departments (
id INT PRIMARY KEY,
name VARCHAR(100)
);
-- 插入示例数据
INSERT INTO employees (id, name, department_id) VALUES
(1, 'Alice', 1),
(2, 'Bob', 2),
(3, 'Charlie', 1);
INSERT INTO departments (id, name) VALUES
(1, 'HR'),
(2, 'Engineering');
-- 使用 INNER JOIN 查询员工及其所属部门
SELECT e.name AS employee_name, d.name AS department_name
FROM employees e
INNER JOIN departments d ON e.department_id = d.id;
-- 解释说明:
-- 上述 SQL 语句使用了 INNER JOIN,它会返回两个表中满足连接条件的记录。
-- 在这个例子中,只有那些在 employees 表中有对应的 department_id 的记录才会被返回。
-- 如果某个员工没有对应的部门(即 department_id 为空或不存在于 departments 表中),则该员工不会出现在结果集中。
-- 使用 LEFT JOIN 查询所有员工及其所属部门(即使没有对应部门)
SELECT e.name AS employee_name, d.name AS department_name
FROM employees e
LEFT JOIN departments d ON e.department_id = d.id;
-- 解释说明:
-- 上述 SQL 语句使用了 LEFT JOIN,它会返回左表(employees)中的所有记录,即使右表(departments)中没有匹配的记录。
-- 对于没有匹配的记录,结果集中对应右表的字段将为 NULL。
-- 使用 RIGHT JOIN 查询所有部门及其员工(即使没有对应员工)
SELECT e.name AS employee_name, d.name AS department_name
FROM employees e
RIGHT JOIN departments d ON e.department_id = d.id;
-- 解释说明:
-- 上述 SQL 语句使用了 RIGHT JOIN,它会返回右表(departments)中的所有记录,即使左表(employees)中没有匹配的记录。
-- 对于没有匹配的记录,结果集中对应左表的字段将为 NULL。
-- 使用 FULL OUTER JOIN 查询所有员工和部门(无论是否有匹配)
-- 注意:MySQL 不直接支持 FULL OUTER JOIN,但可以通过 UNION 实现类似效果
SELECT e.name AS employee_name, d.name AS department_name
FROM employees e
LEFT JOIN departments d ON e.department_id = d.id
UNION
SELECT e.name AS employee_name, d.name AS department_name
FROM employees e
RIGHT JOIN departments d ON e.department_id = d.id;
-- 解释说明:
-- 上述 SQL 语句通过 UNION 模拟了 FULL OUTER JOIN 的效果,返回左表和右表中的所有记录,无论是否有匹配。
-- 对于没有匹配的记录,结果集中对应另一表的字段将为 NULL。
上一篇:mysql格式化日期的函数
下一篇:mysql取整数
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站