MySQL 的内连接、左连接、右连接有什么区别?

MySQL 的内连接、左连接、右连接有什么区别?

在 MySQL 中,内连接(INNER JOIN)、左连接(LEFT JOIN 或 LEFT OUTER JOIN)和右连接(RIGHT JOIN 或 RIGHT OUTER JOIN)是用于合并两个或多个表中的数据的不同类型的连接操作。以下是它们之间的区别:

  1. 内连接(INNER JOIN):

    • 内连接返回两个表中匹配的行,即只返回在两个表中都存在的行。
    • 语法:SELECT * FROM table1 INNER JOIN table2 ON table1.column = table2.column;
  2. 左连接(LEFT JOIN 或 LEFT OUTER JOIN):

    • 左连接返回左表中的所有行,以及与右表中匹配的行。如果右表中没有匹配的行,返回的结果集中将包含 NULL 值。
    • 语法:SELECT * FROM table1 LEFT JOIN table2 ON table1.column = table2.column;
  3. 右连接(RIGHT JOIN 或 RIGHT OUTER JOIN):

    • 右连接返回右表中的所有行,以及与左表中匹配的行。如果左表中没有匹配的行,返回的结果集中将包含 NULL 值。
    • 语法:SELECT * FROM table1 RIGHT JOIN table2 ON table1.column = table2.column;

下面是一个简单的示例,演示了内连接、左连接和右连接的用法:

示例数据:

-- 表1:employees
CREATE TABLE employees (
    emp_id INT PRIMARY KEY,
    emp_name VARCHAR(50),
    department_id INT
);

-- 表2:departments
CREATE TABLE departments (
    department_id INT PRIMARY KEY,
    department_name VARCHAR(50)
);

-- 数据示例
INSERT INTO employees (emp_id, emp_name, department_id) VALUES (1, 'Alice', 101);
INSERT INTO employees (emp_id, emp_name, department_id) VALUES (2, 'Bob', 102);
INSERT INTO employees (emp_id, emp_name, department_id) VALUES (3, 'Charlie', 101);
INSERT INTO departments (department_id, department_name) VALUES (101, 'HR');
INSERT INTO departments (department_id, department_name) VALUES (102, 'IT');

内连接示例:

-- 内连接返回 employees 和 departments 中 department_id 匹配的行
SELECT employees.emp_id, employees.emp_name, departments.department_name
FROM employees
INNER JOIN departments ON employees.department_id = departments.department_id;

左连接示例:

-- 左连接返回所有 employees 行,以及与 departments 中 department_id 匹配的行
SELECT employees.emp_id, employees.emp_name, departments.department_name
FROM employees
LEFT JOIN departments ON employees.department_id = departments.department_id;

右连接示例:

-- 右连接返回所有 departments 行,以及与 employees 中 department_id 匹配的行
SELECT employees.emp_id, employees.emp_name, departments.department_name
FROM employees
RIGHT JOIN departments ON employees.department_id = departments.department_id;

在这个示例中,employees 表和 departments 表通过 department_id 列进行连接。不同类型的连接操作会返回不同的结果集,涉及到匹配行和 NULL 值的处理。

你可能感兴趣的:(mysql,数据库)