SQL词汇中row set和row的含义是否有区别?附考题场景验证
术语含义区分
首先明确两个术语在不同场景的定义:
- 严格的计算机理论(关系代数)场景下:row set 指符合集合论要求的元组集合,默认去重,元素唯一;单独提及 rows 时指SQL查询返回的原始结果行,属于允许多个重复元素的多重集合。
- 日常开发、考试题目场景下:二者没有强制区分,
x rows in set这类数据库客户端提示里的set只是对查询结果的统称,没有去重含义,大多数情况下row set和rows都指代未去重的原始查询结果。
你提到的同行争议本质是场景差异,没有绝对的对错,完全要看语境,你给出的这道GATE考题默认按「row set指代未去重的原始结果」理解即可,这也是官方参考答案的默认前提。
题目选项分析
先重申表结构前提:
enrolled(student, course):主键为(student, course),同一学生可以选多门课,student字段允许重复paid(student, amount):主键为student,每个学生最多一条记录,student字段唯一
四个查询的逻辑差异
- Query1:从
enrolled表筛选出在paid表存在缴费记录的学生,因为enrolled允许同一学生有多条选课记录,返回结果可能存在重复的学生值 - Query2:从
paid表筛选出在enrolled表存在选课记录的学生,因为paid的student唯一,返回结果不会有重复 - Query3:对
enrolled和paid做等值连接,返回匹配的学生值,同一学生有多少条选课记录就返回多少行,行数大于等于Query2的行数 - Query4:用
exists语法实现的逻辑和Query2完全等价,返回结果和Query2完全一致
选项判断
- A错误:Query1返回结果可能有重复,和Query2、Query4的结果不可能完全一致
- B正确:Query2和Query4逻辑完全等价,任意数据库下返回结果都相同;当同一学生选多门课时,Query1会返回重复的学生行,和Query2的结果不同
- C错误:Query3的行数最少等于Query2的行数(每个符合条件的学生只选一门课的场景),不可能更少
- D错误:题目明确说明不存在外键等约束,且查询为只读操作,不可能触发完整性约束违反
内容的提问来源于stack exchange,提问作者Abhishek Ghosh
相关产品推荐
相关产品推荐

