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:合并两个查询结果。