join:用于将多张表的数据根据相关联的列连接起来。
-
内连接(INNER JOIN):只返回两个表中匹配的记录。
-- 查询的是两张表中 dept_id 相同的结果 SELECT employees.name, departments.dept_name FROM employees INNER JOIN departments ON employees.dept_id = departments.dept_id;
-
外连接:
-
左外连接(LEFT JOIN):返回左表中的所有记录,以及右表中匹配的记录。如果右表中没有匹配记录,则结果中右表的列会显示为NULL。
SELECT employees.name, departments.dept_name FROM employees LEFT JOIN departments ON employees.dept_id = departments.dept_id;
-
右外连接(RIGHT JOIN):返回右表中的所有记录,以及左表中匹配的记录。如果左表中没有匹配记录,则结果中左表的列会显示为NULL。
SELECT employees.name, departments.dept_name FROM employees RIGHT JOIN departments ON employees.dept_id = departments.dept_id;
-
全外连接(FULL JOIN):MySQL暂不支持,返回两个表中的所有记录。对于没有匹配的记录,结果中的另一表的列会显示为NULL。
SELECT employees.name, departments.dept_name FROM employees FULL JOIN departments ON employees.dept_id = departments.dept_id;
-
-
交叉连接(CORSS JOIN):用于返回两个表的笛卡尔积,即将左表的每一行与右表的每一行组合起来。
SELECT Products.name AS Product, Colors.color AS Color FROM Products CROSS JOIN Colors; -- 这个查询结果是将 Products 表中的每一个产品与 Colors 表中的每一种颜色配对,共有3×3=9种组合。
-
自连接(SELF JOIN):用于将一个表与自身连接,常用于查找表中满足某种关系的行。
SELF JOIN
其实不是SQL中的一个特定关键词,而是一个概念用语,表示在SQL查询中把同一个表进行连接。换句话说,自连接(SELF JOIN)指的是将一个表与自己连接起来,但在SQL语句中并没有特定的关键词SELF JOIN
需要使用。-- 假设我们有一个 Employees 表,其中存储了员工和他们的直接经理。 +-------------+---------+------------+ | employee_id | name | manager_id | +-------------+---------+------------+ | 1 | John | NULL | | 2 | Jane | 1 | | 3 | Alice | 1 | | 4 | Bob | 2 | | 5 | Charlie | 2 | +-------------+---------+------------+ -- 我们想要找到每个员工及其经理的名字 SELECT e1.name AS Employee, e2.name AS Manager FROM Employees e1 LEFT JOIN Employees e2 ON e1.manager_id = e2.employee_id; -- 结果如下 +----------+---------+ | Employee | Manager | +----------+---------+ | John | NULL | | Jane | John | | Alice | John | | Bob | Jane | | Charlie | Jane | +----------+---------+