数据库中的JOIN用于将两个或多个表中的数据基于关联字段组合起来,形成新的结果集。常见JOIN类型及用法如下:
1. INNER JOIN(内连接)
只返回两表中匹配的记录。
示例:查询员工及其部门信息(仅返回有部门的员工)
```sql
SELECT e.name, d.dept_name
FROM employees e
INNER JOIN departments d ON e.dept_id = d.id;
```
2. LEFT JOIN(左连接)
返回左表所有记录,右表无匹配则填充NULL。
示例:查询所有员工及其部门(包含无部门的员工)
```sql
SELECT e.name, d.dept_name
FROM employees e
LEFT JOIN departments d ON e.dept_id = d.id;
```
3. RIGHT JOIN(右连接)
返回右表所有记录,左表无匹配则填充NULL。
示例:查询所有部门及其员工(包含无员工的部门)
```sql
SELECT e.name, d.dept_name
FROM employees e
RIGHT JOIN departments d ON e.dept_id = d.id;
```
4. FULL JOIN(全连接)
返回两表所有记录,无匹配则填充NULL(部分数据库如MySQL不直接支持,需用UNION模拟)。
示例:查询所有员工和所有部门(包含无关联记录)
```sql
-- MySQL模拟写法
SELECT e.name, d.dept_name
FROM employees e
LEFT JOIN departments d ON e.dept_id = d.id
UNION
SELECT e.name, d.dept_name
FROM employees e
RIGHT JOIN departments d ON e.dept_id = d.id
WHERE e.id IS NULL;
```
5. CROSS JOIN(交叉连接)
返回两表笛卡尔积(无关联条件)。
示例:生成员工和部门的全部组合
```sql
SELECT e.name, d.dept_name
FROM employees e
CROSS JOIN departments d;
```
腾讯云相关产品推荐:
- 关系型数据库:TencentDB for MySQL/PostgreSQL
- 分布式数据库:TDSQL-C(兼容MySQL)
- 云原生数据库:TencentDB for TDSQL(支持分布式事务)... 展开详请