full join 为横向连接,保留两张表的全部信息。union all 为纵向连接,且不去除重复记录。
### 正确答案为 **C(full join)** 和 **D(union all)**
**解析:**
题目要求:**保留被连接两表的全部信息**(即不丢失任何原始数据记录)。以下是关键分析:
1. **✅ `FULL JOIN`(C)**
- **横向连接**:通过关联键合并两表,生成包含两表所有列的结果集。
- **保留所有记录**:
- 匹配成功 → 合并为一行
- 匹配失败 → 独有记录用 `NULL` 填充
- **符合要求**:严格保留两表所有行和列的信息(如两表各有5条记录 → 结果可能为5~25条)。
2. **✅ `UNION ALL`(D)**
- **纵向堆叠**:将两表记录上下合并(需列数相同)。
- **保留所有记录**:
- 两表记录**100%完整保留**(如两表各有5条记录 → 结果必为10条)。
- 不依赖关联键,无匹配丢失风险。
- **符合要求**:以独立行的形式保留两表全部原始数据。
---
### 排除其他选项的原因:
3. **❌ `LEFT JOIN`(B)**
- 仅保留**左表全部记录** + **右表匹配记录**。
- **右表独有记录丢失**(如右表有5条未匹配记录 → 结果中这5条消失)。
- *示例*:`表A(1,2)` 与 `表B(2,3)` → 结果丢失右表的 `3`。
4. **❌ `INNER JOIN`(A)**
- 仅保留**两表匹配的记录**,两表独有记录均丢失。
---
#### 关键对比:
| 操作 | 保留左表 | 保留右表 | 保留列结构 |
|--------------|--------------|--------------|------------|
| **`FULL JOIN`** | ✅ | ✅ | 两表合并列 |
| **`UNION ALL`** | ✅ | ✅ | 单表相同列 |
| `LEFT JOIN` | ✅ | ❌ | 两表合并列 |
> **结论**:
> - 若强调 **横向连接且不丢失记录** → 仅 `FULL JOIN` 达标。
> - 若仅要求 **保留所有原始数据记录** → `FULL JOIN` 和 `UNION ALL` 均达标。
> **题目中“保留全部信息”更侧重数据完整性**,因此 **C 和 D 正确**。