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

备考刷题,请到

CDA认证小程序

数据库中有两张表,users表中有三个字段(user_id,user_name,create_at),orders表中有三个字段(order_id,user_id,amount)。 (1)查询users表中存在而orders表中不存在的user_id
A. select users.user_id from users left join orders on users.user_id=orders.user_id;
B. select users.user_id from users right join orders on users.user_id=orders.user_id;
C. select users.user_id from users left join orders on users.user_id=orders.user_id where orders.user_id is null;
D. select users.user_id from users right join orders on users.user_id=orders.user_id where users.user_id is null;
上一题
下一题
收藏
点赞
评论
题目解析
题目评论(0)

A以users为主表左连接,返回users表中所有的user_id。 B以orders为主表右连接,返回orders表中所有的user_id。 D以orders为主表右连接并筛选users表中user_id为空的记录,返回的是orders表中存在而users表中不存在的user_id。 而C以users为主表左连接并筛选orders表中user_id为空的记录,返回即是users表中存在而orders表中不存在的user_id。

正确答案是C: `select users.user_id from users left join orders on users.user_id=orders.user_id where orders.user_id is null;`

### 专业分析:

1. **LEFT JOIN** 和 **RIGHT JOIN** 的区别:
- **LEFT JOIN**: 返回左表中的所有记录,以及右表中连接字段相等的记录。如果右表中没有匹配的记录,则结果中包含左表中的记录和右表中的NULL值。
- **RIGHT JOIN**: 返回右表中的所有记录,以及左表中连接字段相等的记录。如果左表中没有匹配的记录,则结果中包含右表中的记录和左表中的NULL值。

2. **题目要求**:查询`users`表中存在而`orders`表中不存在的`user_id`。这意味着我们要找出`users`表中有但在`orders`表中没有匹配记录的`user_id`。

3. **分析选项**:
- A: `select users.user_id from users left join orders on users.user_id=orders.user_id;`
- 这个查询会返回左表`users`的所有记录以及右表`orders`中匹配的记录,但不会过滤出`orders`中没有匹配记录的那些`user_id`。

- B: `select users.user_id from users right join orders on users.user_id=orders.user_id;`
- 这个查询会返回右表`orders`的所有记录以及左表`users`中匹配的记录,这与题目要求不符。

- C: `select users.user_id from users left join orders on users.user_id=orders.user_id where orders.user_id is null;`
- 这个查询使用了`LEFT JOIN`,并且通过`where orders.user_id is null`过滤出了`orders`表中没有匹配记录的`user_id`。这正是题目要求的结果。

- D: `select users.user_id from users right join orders on users.user_id=orders.user_id where users.user_id is null;`
- 这个查询会返回`orders`表中存在但`users`表中不存在的`user_id`,与题目要求相反。

综上所述,选项C是正确的。