题目
52. (1.5分) 在健康体检登记表 checklist(cname char(10), csex char(1), cage int, cno char(6), ctjrq date, cunit varchar(20), dno char(4))中,查询各单位参加体检的女职工人数在1000人以上的单位及人数的SQL语句为()A. SELECT cunit 单位, csex 性别, count(*) 人数数 FROM checklistgroup by cunit having count(*) >=1000 and csex='女'B. SELECT cunit 单位, csex 性别, count(*) 人数FROM checklist where csex='女'group by cunit having count(*) >=1000C. SELECT cunit 单位, csex 性别, count(*) 人数数 FROM checklistgroup by cunit, csex having count(*) >=1000 and csex='女'D. SELECT cunit 单位, csex 性别, count(*) 人数数 FROM checklistgroup by cunit having count(*) >=1000 where csex='女'
52. (1.5分) 在健康体检登记表 checklist(cname char(10), csex char(1), cage int, cno char(6), ctjrq date, cunit varchar(20), dno char(4))中,查询各单位参加体检的女职工人数在1000人以上的单位及人数的SQL语句为()
A. SELECT cunit 单位, csex 性别, count(*) 人数 数 FROM checklistgroup by cunit having count(*) >=1000 and csex='女'
B. SELECT cunit 单位, csex 性别, count(*) 人数 FROM checklist where csex='女' group by cunit having count(*) >=1000
C. SELECT cunit 单位, csex 性别, count(*) 人数 数 FROM checklistgroup by cunit, csex having count(*) >=1000 and csex='女'
D. SELECT cunit 单位, csex 性别, count(*) 人数 数 FROM checklistgroup by cunit having count(*) >=1000 where csex='女'
题目解答
答案
B. SELECT cunit 单位, csex 性别, count(*) 人数
FROM checklist where csex='女'
group by cunit having count(*) >=1000
解析
本题考查 SQL 查询语句的使用,特别是 WHERE 子句、GROUP BY 子句和 HAVING 子句的正确运用。解题的关键在于明确各子句的作用和执行顺序,以筛选出符合条件的数据。
- 确定筛选条件:题目要求查询各单位参加体检的女职工人数在 1000 人以上的单位及人数。所以首先要筛选出性别为女的记录,这可以通过
WHERE子句来实现。 - 分组统计:筛选出女职工记录后,需要按照单位进行分组,统计每个单位的女职工人数,使用
GROUP BY子句按cunit字段分组。 - 筛选分组结果:对分组后的结果进行筛选,只保留人数大于等于 1000 的组,使用
HAVING子句来实现。
下面对各选项进行分析:
- A选项:
- 原语句
SELECT cunit 单位, csex 性别, count(*) 人数数 FROM checklist group by cunit having count(*) >=1000 and csex='女'。 - 此选项先进行分组,再在
HAVING子句中筛选。但GROUP BY cunit只按单位分组,没有对性别进行分组,HAVING子句中csex='女'无法准确筛选出每个单位的女职工人数,因为分组后性别信息丢失,所以该选项错误。
- 原语句
- B选项:
- 原语句
SELECT cunit 单位, csex 性别, count(*) 人数 FROM checklist where csex='女' group by cunit having count(*) >=1000。 - 首先使用
WHERE csex='女'筛选出所有女职工的记录。 - 然后使用
GROUP BY cunit按单位对女职工记录进行分组。 - 最后使用
HAVING count(*) >=1000筛选出每个单位女职工人数大于等于 1000 的组,符合题目要求,该选项正确。
- 原语句
- C选项:
- 原语句
SELECT cunit 单位, csex 性别, count(*) 人数数 FROM checklist group by cunit, csex having count(*) >=1000 and csex='女'。 - 虽然按单位和性别进行了分组,但
HAVING子句中csex='女'是多余的,因为分组已经按性别区分,而且题目只需要统计女职工人数,不需要同时显示性别,所以该选项不符合要求。
- 原语句
- D选项:
- 原语句
SELECT cunit 单位, csex 性别, count(*) 人数数 FROM checklist group by cunit having count(*) >=1000 where csex='女'。 - SQL 语句的执行顺序是先执行
WHERE子句,再执行GROUP BY子句,最后执行HAVING子句。此选项将WHERE子句放在GROUP BY子句之后,语法错误,所以该选项错误。
- 原语句