考试报名
考试报名
考试内容
考试大纲
在线客服
返回顶部

备考刷题,请到

CDA认证小程序

使用“select * from 表 1 inner join 表 2 on 表 1.员工 id = 表 2.员工id”语句对下边两个表进行查询, 查询结果中应有几行数据
A. 2
B. 3
C. 4
D. 5
上一题
下一题
收藏
点赞
评论
题目解析
题目评论(7)

当两个的对应关系为多对多的关系,即在连接两表的字段都有重复值时,内连接的结果只显示两表中满足条件的记录。

**正确答案是 C(4行)**

#### **表1(客户信息表)**
| **客户id** | **客户姓名** | **员工id** |
|------------|--------------|------------|
| C01 | 林一 | a001 |
| C02 | 钱二 | a002 |
| C03 | 张三 | a001 |

#### **表2(订单信息表)**
| **订单id** | **订单金额** | **员工id** |
|------------|--------------|------------|
| o1 | 40 | a001 |
| o2 | 50 | a001 |
| o3 | 60 | a003 |

---

### **SQL查询解析**
执行以下 **INNER JOIN** 查询:
```sql
SELECT * FROM 表1 INNER JOIN 表2 ON 表1.员工id = 表2.员工id
```

#### **INNER JOIN 匹配规则**
1. 遍历 **表1** 的每一行,检查 **表2** 中是否有 `员工id` 匹配的行。
2. 如果匹配成功,则合并两表的行,输出到结果中。
3. **不匹配的行会被丢弃**(INNER JOIN 的特性)。

---

### **逐步匹配过程**
1. **表1中 `a001`(林一、张三)的匹配**:
- 表1有 **2行** `a001`(C01-林一, C03-张三)。
- 表2有 **2行** `a001`(o1, o2)。
- **匹配结果**:
- (C01-林一-a001) + (o1-40-a001) → 1行
- (C01-林一-a001) + (o2-50-a001) → 1行
- (C03-张三-a001) + (o1-40-a001) → 1行
- (C03-张三-a001) + (o2-50-a001) → 1行
- **小计:4行**。

2. **表1中 `a002`(钱二)的匹配**:
- 表1有 **1行** `a002`(C02-钱二)。
- 表2中 **没有** `a002` 的订单(只有a001和a003)。
- **匹配结果**:0行(丢弃)。

3. **表1中其他 `员工id` 的匹配**:
- 表1没有其他 `员工id`,无需处理。

---

### **查询结果的行数**
- 仅 `a001` 的匹配成功,共生成 **4行** 结果。
- `a002` 和 `a003` 无匹配,不包含在结果中。

---

### **验证结果**
最终的查询结果如下(逻辑展示):

| 客户id | 客户姓名 | 表1.员工id | 订单id | 订单金额 | 表2.员工id |
|--------|----------|------------|--------|----------|------------|
| C01 | 林一 | a001 | o1 | 40 | a001 |
| C01 | 林一 | a001 | o2 | 50 | a001 |
| C03 | 张三 | a001 | o1 | 40 | a001 |
| C03 | 张三 | a001 | o2 | 50 | a001 |

---

### **为什么不是其他选项?**
- **A(2行)**:可能误认为只匹配表1和表2的首次对应行,忽略了所有组合。
- **B(3行)**:可能漏计了表1中 `a001` 的第二行(C03-张三)的匹配。
- **D(5行)**:可能错误地纳入了 `a003` 的订单(但 `a003` 不在表1中,无法匹配)。

---

### **最终答案**
**正确答案是 C(4行)**。

用户147565
3行吧
用户135513
内连接,左边两个1对应右边两个1,因此4行
用户126480
应该是3行
用户93463
是4个,左表的2个a01分别对应右表的2个a01,拼起来4行
用户93463
答案错了吧?
用户103101
正确答案是啥
用户87602
答案有错误