type
status
date
slug
summary
tags
category
icon
password
1. 内连接(INNER JOIN)
功能:
INNER JOIN 是最常用的连接方式,它只返回两个表中满足连接条件的匹配记录(交集部分)。语法:
示例:
假设有两张表:
表1:employees
emp_id  | name  | dept_id  | 
1  | Alice  | 101  | 
2  | Bob  | 102  | 
3  | Charlie  | 103  | 
表2:departments
dept_id  | dept_name  | 
101  | HR  | 
102  | IT  | 
104  | Finance  | 
查询员工及其所在部门的名称:
结果:
name  | dept_name  | 
Alice  | HR  | 
Bob  | IT  | 
2. 左连接(LEFT JOIN 或 LEFT OUTER JOIN)
功能:
LEFT JOIN 会返回左表中的所有记录,即使右表中没有匹配的记录。对于没有匹配的记录,右表的字段会显示为 NULL。语法:
示例:
查询所有员工及其部门名称(即使某些员工没有被分配到部门):
结果:
name  | dept_name  | 
Alice  | HR  | 
Bob  | IT  | 
Charlie  | NULL  | 
3. 右连接(RIGHT JOIN 或 RIGHT OUTER JOIN)
功能:
RIGHT JOIN 与 LEFT JOIN 相反,它会返回右表中的所有记录,即使左表中没有匹配的记录。语法:
示例:
查询所有部门及其员工(即使某些部门没有员工):
结果:
name  | dept_name  | 
Alice  | HR  | 
Bob  | IT  | 
NULL  | Finance  | 
4. 全连接(FULL OUTER JOIN)
功能:
FULL OUTER JOIN 会返回两个表中的所有记录,无论是否有匹配。对于没有匹配的记录,未匹配表的字段会显示为 NULL。语法:
示例:
返回所有员工和所有部门的信息,无论是否有匹配:
结果:
name  | dept_name  | 
Alice  | HR  | 
Bob  | IT  | 
Charlie  | NULL  | 
NULL  | Finance  | 
5. 交叉连接(CROSS JOIN)
功能:
CROSS JOIN 会返回两个表的笛卡尔积,即两个表中每一行的所有组合。通常用于生成所有可能的组合。语法:
示例:
查询所有员工与所有部门的组合:
结果:
name  | dept_name  | 
Alice  | HR  | 
Alice  | IT  | 
Alice  | Finance  | 
Bob  | HR  | 
Bob  | IT  | 
Bob  | Finance  | 
Charlie  | HR  | 
Charlie  | IT  | 
Charlie  | Finance  | 
6. 自连接(SELF JOIN)
功能:
自连接是指一张表与自身进行连接,通常用于对表中具有层级关系的数据进行查询。
语法:
示例:
假设有一个员工表,记录了每个员工的直属上级:
表:employees
emp_id  | name  | manager_id  | 
1  | Alice  | NULL  | 
2  | Bob  | 1  | 
3  | Charlie  | 1  | 
4  | David  | 2  | 
查询每个员工及其直属上级的姓名:
结果:
employee_name  | manager_name  | 
Alice  | NULL  | 
Bob  | Alice  | 
Charlie  | Alice  | 
David  | Bob  | 
7. 子查询(Subquery)
功能:
子查询是将一个查询的结果作为另一个查询的条件或数据来源。可以用于过滤、聚合或复杂查询。
语法:
示例:
查询属于部门名称为 "IT" 的所有员工:
8. 联合查询(UNION 和 UNION ALL)
功能:
UNION 和 UNION ALL 用于合并多个查询的结果集。UNION会去掉重复的记录。
UNION ALL不会去掉重复记录。
语法:
示例:
查询两个不同表中的所有员工:
9. 使用多表的复杂查询
通常可以综合使用多种连接和子查询来完成复杂查询。例如:
查询部门中有多少员工,并显示部门名称,即使部门没有员工:
总结
- INNER JOIN:匹配两表中满足条件的记录(交集)。
 
- LEFT JOIN:返回左表所有记录,没有匹配的用 
NULL填充。 
- RIGHT JOIN:返回右表所有记录,没有匹配的用 
NULL填充。 
- FULL OUTER JOIN:返回两表的并集,匹配不到的部分填 
NULL。 
- CROSS JOIN:笛卡尔积,返回所有组合。
 
- SELF JOIN:表自身连接,用于层级结构。
 
- 子查询:嵌套查询,用于复杂过滤。
 
- UNION/UNION ALL:合并两个查询结果。