1.查询至少参加两个项目的职工编号及参与项目数的SQL语句:select 职工编号,count(项目编号) from 职工项目 group by 职工编号( );
A. having sum(项目编号)>=2
B. having sum(项目编号)<=2
C. having count(项目编号)>=2
D. having count(项目编号)<=2

正确选项:C
解析:使用having子句对分组统计的结果进行筛选,至少参加两个项目是项目数>=2


2.实现“查询学生1001所选课程的课程号和成绩,按成绩降序排列”的SELECT语句为( )。
A. SELECT Cno, Grade FROM SC ORDER BY Grade WHERE Sno='1001'
B. SELECT Cno, Grade FROM SC ORDER BY Grade WHERE Sno='1001'
C. SELECT Cno, Grade FROM SC WHERE Sno='1001' ORDER BY Grade DESC
D. SELECT Cno, Grade FROM SC WHERE Sno='1001' ORDER BY Grade

正确选项:C
解析:select ..from..where ...order by,这是一个SELECT语句中正确的顺序,order by不会在where子句前面,如果需要分组,group by应该在order by 前面。降序关键字是desc


3.实现“查询先行课为6的课程总数”的SELECT语句为( )。
A. SELECT COUNT(*) FROM Course WHERE Cpno='6'
B. SELECT AVG(*) FROM Course WHERE Cpno='6'
C. SELECT MIN(*) FROM Course WHERE Cpno='6'
D. SELECT SUM(*) FROM Course WHERE Cpno='6'

正确选项:A
解析:课程总数是计数,一行是一门课程数据,用count(*)统计多少行就是多少门课程。只有count()函数可以用号做参数,其他聚合函数只能用列名做参数


4,实现“查询已有学生选修的课程的课程总数”的SELECT语句为( )。
A. SELECT SUM(Cno) FROM SC
B. SELECT SUM(DISTINCT Cno) FROM SC
C. SELECT COUNT(Cno) FROM SC
D. SELECT COUNT(DISTINCT Cno) FROM SC

正确选项:D
解析:计数应该用count()函数,一门课程被多名学生选应该只计一个,所以需要用distinct去除重复


5.实现“查询每个学生选课总数”的SELECT语句为( )。
A. SELECT Sno, SUM(Cno) FROM SC ORDER BY Sno
B. SELECT Sno, COUNT(Cno) FROM SC ORDER BY Sno
C. SELECT Sno, SUM(Cno) FROM SC GROUP BY Sno
D. SELECT Sno, COUNT(Cno) FROM SC GROUP BY Sno

正确选项:D
解析:“每个学生选课总数”应该分组计数,按学号分组,group by 是分组,order by 是排序


6.实现“查询选课总数超过两门的学生的学号及选课总数”的SELECT语句为( )。
A. SELECT Sno, SUM(Cno) FROM SC ORDER BY Sno HAVING COUNT(Cno)>2
B. SELECT Sno, COUNT(Cno) FROM SC ORDER BY Sno HAVING COUNT(Cno)>2
C. SELECT Sno, COUNT(Cno) FROM SC GROUP BY Sno HAVING COUNT(Cno)>2
D. SELECT Sno, SUM(Cno) FROM SC GROUP BY Sno HAVING COUNT(Cno)>2

正确选项:C
解析:对聚合函数计算结果进行筛选需要用having子句,having子句一定配合group by子句使用,在group by子句后面。


7.有关系模式stu(学号,姓名,性别,类别,身份证号) tea(教师号,姓名,性别,身份证号,工资),查询在读研究生教师的平均工资、最高与最低工资之间差值的SQL语句是:
select( ) from stu, tea where stu.身份证号=tea.身份证号 And 类别=‘研究生’
A. AVG(工资) AS 平均工资 ,MAX(工资) - MIN(工资) AS 差值
B. 平均工资 AS AVG(工资) ,差值 AS MAX(工资) - MIN(工资)
C. AVG(工资) ANY 平均工资 ,MAX(工资) - MIN(工资) ANY 差值
D. 平均工资 ANY AVG(工资) ,差值 ANY MAX(工资) - MIN(工资)

正确选项:A
解析:给列重新定义别名有三种方法:别名=列名; 列名 AS 别名;列名 别名 ,没有加ANY字样的


8.设A、B两个表的记录数分别为3和5,对两个表执行交叉连接查询,查询结果中最多可获得( )条记录。
A. 3
B. 4
C. 12
D. 15

正确选项:D
解析:交叉连接就是笛卡尔乘积,结果是两个记录数的乘积


9.假定学生关系是S(S#,SNAME,SEX,AGE),课程关系是C(C#,CNAME,TEACHER),学生选课关系是SC(S#,C#,GRADE)。要查找选修“COMPUTER”课程的“女”学生姓名,将涉及到关系( )。
A. S
B. SC,C
C. S,SC
D. S,C,SC

正确选项:D
解析:课程名在课程关系C中,性别在学生关系S中,哪名学生选修了哪门课程的信息是记录在选课关系SC中,所以涉及三张表。


10.有学生表S(S#,SN,SEX,AGE,DEPT)和选课表SC(S#,C#,GRADE),其中:S#为学号,SN为姓名,SEX为性别,AGE为年龄,DEPT为系别,C#为课程号,GRADE为成绩。检索学生姓名及其所选修课程的课程号和成绩,正确的SELECT语句是( )。
A. SELECT S.SN,SC.C#,SC.GRADE FROM S WHERE S.S#=SC.S#
B. SELECT S.SN,SC.C#,SC.GRADE FROM SC WHERE S.S#=SC.GRADE
C. SELECT S.SN,SC.C#,SC.GRADE FROM S,SC WHERE S.S#=SC.S#
D. SELECT S.SN,SC.C#,SC.GRADE FROM S,SC

正确选项:C
解析:学生姓名在S表中,课程号和成绩在SC表中,两个表都要放在from后面做内连接,然后在where子句中写明两个表的连接条件


11.实现“查询学生及其选课情况(基于左外连接)”的SELECT语句为()。
A. SELECT S.*,SC.* FROM Student S JOIN SC ON S.Sno=SC.Sno
B. SELECT S.*,SC.* FROM Student S, SC WHERE S.Sno=SC.Sno
C. SELECT S.*,SC.* FROM Student S LEFT JOIN SC ON S.Sno=SC.Sno
D. SELECT S.*,SC.* FROM Student S OUTER JOIN SC ON S.Sno=SC.Sno

正确选项:C
解析:LEFT (outer) JOIN是左外连接的关键字。用逗号分隔两个表是内连接,连接条件写在WHERE子句中,用join连接两个表也是内连接,但需要用on子句表示两个表的连接条件。


12.实现“查询所有女生的选课情况, 显示姓名、课程号(基于连接查询)”的SELECT语句为()。
A. SELECT Sname, Cno FROM Student S,SC WHERE S.Sno=SC.Sno OR Ssex='女'
B. SELECT Sname, Cno FROM Student S,SC WHERE Ssex='女'
C. SELECT Sname, Cno FROM Student S JOIN SC ON Ssex='女'
D. SELECT Sname, Cno FROM Student S JOIN SC ON S.Sno=SC.Sno WHERE Ssex='女'

正确选项:D
解析:A选项错在where子句用了or而不是and,不是同时满足两个条件;B选项错在没有写两个表的连接条件,出现笛卡尔积效果;C选项ON后面应该是两个表的连接条件,其他条件写在where子句中。


13.实现“查询学生表和课程表的笛卡尔积”的SELECT语句为()。
A. SELECT * FROM Student S,SC WHERE S.Sno=SC.Sno
B. SELECT * FROM Student CLASS JOIN SC
C. SELECT * FROM Student CROSS JOIN IN SC
D. SELECT * FROM Student,SC

正确选项:D
解析:两个或多个表的连接查询,却没有写表之间的关联条件,就会出现笛卡尔积的效果。选项A是正确的连接查询语句。


14.现有书目表book,包含字段:price (float); 现在查询一条书价最高的书目的详细信息,以下语句正确的是( )。
A. select top 1 * from book order by price asc
B. select top 1 * from book order by price desc(降序)
C. select * from book where price= max(price)
D. select top 1 * from book where price= max(price)

正确选项:B
解析:按价格降序排列的第一个就是价格最高的,降序关键字是desc。函数max()必须用在select 子句中。


15.有学生表S(S#,SN,SEX,AGE,DEPT),其中:S#为学号,SN为姓名,SEX为性别,AGE为年龄,DEPT为系别。检索所有比“王华”年龄大的学生姓名、年龄和性别。正确的SELECT语句是( )。
A. SELECT SN,AGE,SEX FROM S WHERE AGE>(SELECT AGE FROM S WHERE SN=“王华”)
B. SELECT SN,AGE,SEX FROM S WHERE SN='王华'
C. SELECT SN,AGE,SEX FROM S WHERE AGE>(SELECT AGE WHERE SN='王华')
D. SELECT SN,AGE,SEX FROM S WHERE AGE>王华.AGE

正确选项:A
解析:主查询中嵌套一个子查询,两个查询都是完整的select…from…where形式。B选项查询的是“王华”的信息,C选项子查询缺少from子句,D选项“王华.AGE”错误,只有“表名.列名”的写法,不能写“某个值.列名”,A选项写法正确。


16.在SQL语言中,子查询是()。
A. 选取单表中字段子集的查询语句
B. 返回单表中数据子集的查询语句
C. 嵌入到另一个查询语句之中的查询语句
D. 返回多表中字段子集的查询语句

正确选项:C
解析:子查询是嵌入到另一个查询语句之中的查询语句


17.实现“查询与刘晨同系的学生信息(基于带EXISTS的查询)”的语句为:SELECT * FROM Student s WHERE ()。
A. EXISTS (SELECT * FROM Student t WHERE t.Sname='刘晨' AND t.Sdept=s.Sdept)
B. NOT EXISTS (SELECT * FROM Student t WHERE t.Sname='刘晨' OR t.Sdept=s.Sdept)
C. EXISTS (SELECT * FROM Student t WHERE t.Sname='刘晨' OR t.Sdept=s.Sdept)
D. NOT EXISTS (SELECT * FROM Student t WHERE t.Sname='刘晨' AND t.Sdept=s.Sdept)

正确选项:A
解析:主查询与子查询都用到student表,分别起别名s和t。这是相关子查询,子查询要受主查询所在系制约。查询过程:主查询取出一行记录,将所在系传入子查询,子查询查找“所在系=主查询传入的系 同时 姓名=’刘晨’”,如果能找到,EXISTS 子句结果为真,显示主查询查询到的记录,如果找不到,EXISTS 子句结果为假,则不显示主查询查询到的记录。主查询再取下一行,重复此过程,直至student表数据全部取出。


18.实现“查询年龄比刘晨小的学生的信息(基于嵌套)”的语句为:
SELECT * FROM Student WHERE ()
A. Sage>刘晨.Sage
B. Sage<刘晨.Sage
C. Sage>(SELECT Sage FROM Student WHERE Sname = '刘晨')
D. Sage<(SELECT Sage FROM Student WHERE Sname = '刘晨')

正确选项:D
解析:主查询中嵌套一个子查询,两个查询都是完整的select...from...where形式。只有“表名.列名”的写法,不能写“某个值.列名”,“刘晨.Sage”写法错误。


19.实现“查询每个学生比刘晨大多少岁(基于嵌套)”的语句为:
SELECT Sname,( ) FROM Student
A. Sage-(SELECT Sage FROM Student WHERE Sname = '刘晨')
B. Sage-刘晨.Sage
C. Sage+(SELECT Sage FROM Student WHERE Sname = '刘晨')
D. Sage+刘晨.Sage

正确选项:A
解析:嵌套查询不仅可以将子查询嵌入where子句,也可以嵌入select 子句。“刘晨.Sage”写法错误,只有“表名.列名”的写法,不能写“某个值.列名”


20.实现“查询与刘晨同系的学生信息(基于嵌套)”的语句为SELECT * FROM Student ()。
A. WHERE Sname IN (SELECT Sdept FROM Student WHERE Sname='刘晨')
B. WHERE Sdept IN (SELECT Sdept FROM Student WHERE Sname='刘晨')
C. WHERE Sdept > (SELECT Sdept FROM Student WHERE Sname='刘晨')
D. WHERE Sdept IN (SELECT Sname FROM Student WHERE Sname='刘晨')

正确选项:B
解析:“同系”就应该用表示系的列名sdept做条件,嵌套的子查询select 子句中也必须是sdept,要相匹配。


21.实现“查询年龄比IS系所有学生都大的学生信息(基于嵌套)”的语句为:SELECT * FROM Student WHERE ()
A. Sage>ALL(SELECT Sage FROM Student WHERE Sdept = 'IS')
B. Sage>ANY IS.Sage
C. Sage>ANY(SELECT Sage FROM Student WHERE Sdept = 'IS')
D. Sage>ALL IS.Sage

正确选项:A
解析:大于所有语句是“>ALL(查询语句)”,ALL是用在子查询前面,后面不能直接加列名,大于所有也可以写为大于最大值。


22.(多选题)实现“查询所有学生都选的课程”的思路包括()。
A. 给定学生s, 如果s选修s的课程数等于课程总数,则s选修了全部课程
B. 给定课程s, 寻找没有选修s的学生,如果不存在这样的学生,则所有学生都选了s
C. 给定学生s, 寻找s没有选修的课程,如果不存在这样的课程,则s选修了全部课程
D. 给定课程s, 如果选修s的学生人数等于学生总数,则所有学生都选了s

正确选项:BD
解析:最终是选出课程,所以应该给定课程,找满足条件的课程。


23.(多选题)在下列查询中,()属于含“全部”的查询。
A. 查询所有学生都选修的课程
B. 查询选修了2号课程的所有学生
C. 查询选修了所有课程的学生
D. 查询95001选修的全部课程

正确选项:AC
解析:A和C选项是“除”运算的思想,B和D选项是简单查询


24.(多选题)在SQL语言中,可以嵌入子查询的子句包括()。
A. HAVING子句
B. FROM子句
C. WHERE子句
D. SELECT子句

正确选项:ABCD
解析:嵌入子查询中可以有这个四个子句,当然也可以有group by 子句,having 子句是在group by 子句后面的。子查询语句格式是:select ... from ... where ...group by...having,其中select和from子句是必须的,其他是可选。


25.实现“查询IS系年龄不大于19岁的学生(基于集合查询)”的语句为:
SELECT * FROM Student WHERE Sdept='IS' ( ) SELECT * FROM Student WHERE Sage!>19
A. EXCEPT
B. INTERSECT
C. ALL
D. UNION

正确选项:B
解析:EXCEPT是做差操作;UNION是并操作,合并后的结果自动去除重复行;INTERSECT是求交集的操作,取两个查询结果的交集。本题目要求两个条件同时满足,应该做“交”运算


26.实现“查询选修了1号课程但没有选修2号课程的学生学号(基于集合查询)”的语句为:
SELECT Sno FROM SC WHERE Cno='1' ( ) SELECT Sno FROM SC WHERE Cno='2'
A. EXCEPT
B. ALL
C. INTERSECT
D. UNION

正确选项:A
解析:EXCEPT是做差操作;UNION是并操作,合并后的结果自动去除重复行;INTERSECT是求交集的操作。本题目应该是“差”运算


27.实现“查询CS系的学生学号或选修了1号课程的学生学号(基于集合查询)”的语句为:
SELECT Sno FROM Student WHERE Sdept='CS' ( ) SELECT Sno FROM SC WHERE Cno='1'
A. EXCEPT
B. UNION
C. INTERSECT
D. ALL

正确选项:B
解析:EXCEPT是做差操作;UNION是并操作,合并后的结果自动去除重复行;INTERSECT是求交集的操作。本题目是“并”运算,集合运算要求两个select查询结果列数相同,对应列类型相同(同质)。


28.在SQL语言中,UNION操作后的ALL关键字的作用为()。
A. 将两个子查询的目标列合并在一起
B. 不消除结果表中的重复行
C. 将两个子查询的所有相关信息混合显示
D. 将两个子查询的所有行混合显示

正确选项:B
解析:并操作UNION自动去掉重复行,UNION ALL则显示所有结果,不去除重复行


29.参与集合操作的两个子查询须满足:1)目标列总数相同,并按顺序一一对应;2)对应列的数据类型和长度相同。( )
A. 对
B. 错

正确选项:A
解析:无


30.集合查询指用集合操作将多个子查询的结果集合并为一个。( )
A. 对
B. 错

正确选项:A
解析:无


3.4 SQL--多表查询分组排序相关推荐

  1. sql多表查询分组最大值

    问题描述:有三张表:学生表Student(id,name),id为主键:课程表Subject(id,name),id为主键:分数表score(studentid,subjectid,score),其中 ...

  2. 窥探SQL: 2.基础查询与排序

    窥探SQL: 2.基础查询与排序 基础查询 语句 关键词 SELECT WHERE FROM, As, DISTINCT 基本法则 运算符 算术运算符 比较运算符 逻辑运算符 NOT AND 和 OR ...

  3. Oracle 查询技巧与优化(一) 单表查询与排序

    前言 作为一个程序员在写SQL时往往注重结果而忽略了本该应用的技巧和更优性能的选择(之前本人一直也是这样),当公司没有一个DBA(据我了解大多数中小公司都是没有的)为我们做SQL优化时那我们理应将SQ ...

  4. sql多表查询之一:Where 和 On的秘密

    原文 sql多表查询之一:Where 和 On的秘密 对于还在SQL初级阶段的朋友来说,sql多表查询问题是一个比较有趣也容易出错的技术.什么时候会用到sql多表查询呢?是在两张或两张以上表单中通过某 ...

  5. php sql查询两个表语句,sql多表查询语句与方法

    sql多表查询有很多种方法,如有自然连接 INNER JOIN,外边查询LEFT JOIN,交叉查询JOIN,交叉连接JOIN等join on left on 等多的是哦. sql多表查询语句与方法 ...

  6. SQL语句详解(四)——SQL联表查询

    今天我们继续给大家介绍MySQL相关知识,本文主要内容是SQL联表查询. 一.SQL联表查询简介 在前文SQL语句详解(三)--SQL子查询中,我们给大家介绍了SQL子查询的相关知识和使用示例.实际上 ...

  7. SQL 多表查询之 where和INNER JOIN

    SQL多表查询之 where和INNER JOIN[基础查询和效率分析] 转载Michaelwubo 最后发布于2018-07-05 10:40:47 阅读数 18057  收藏 https://bl ...

  8. ORACLE SQL 多表查询

    ORACLE SQL 多表查询 开发工具与关键技术:Oracle sql*plus PLSQL Developer SQL 撰写时间:2019年05月08日 说明:顾名思义,多表就是多个表连接起来进行 ...

  9. 第五天 继续SQL多表查询

    SQL多表查询 #给表名别名 SELECT st.class_num,cl.class_name FROM student st,class cl #连接查询 查询出每个学生的班级名称 #以左边的表为 ...

  10. sql多表查询效率提升实战

    建索引,下面是我的性能对比:我的SQL语句为,多表查询,查询600多个 select count(*) from wp_ccnu_user,wp_ccnu_student where wp_ccnu_ ...

最新文章

  1. c mysql存储过程实例_MySQL存储过程实例
  2. Oracle RESETLOGS 和 NORESETLOGS 区别说明
  3. 递归时间/空间复杂度的分析(斐波那契为例)
  4. PCB电流和线宽的关系(通俗易懂)
  5. 利用arcgis将execl数据可视化(点)
  6. airpods pro连接安卓声音小_airpods pro 麦克风声音小
  7. 赋予mysql用户触发器权限_MYSQL设置触发器权限问题的解决方法
  8. Heartbeat(v1、v2、pacemaker)集群组件概述
  9. 高效程序员秘籍(9):快速查找硬盘上的文件和目录
  10. RHEL6/7 下安装 devtoolset-3/4
  11. 春天最美的成语,都在古诗词里!
  12. 线性渐变 `-webkit-linear-gradient`
  13. Redis 6 入门到入坟 详细教程 @学习笔记
  14. fetch bulk collect limt 学习
  15. PHP智云全能API接口源码V1.3
  16. 无法为表空间 某某XX 中的段创建 INITIAL区
  17. Cookies的封装
  18. 二分法的算法及应用场景(只更新了一种)
  19. 利用状态机及Astar插件实现dots下寻路
  20. 逗号表达式java_9_三目运算符和逗号表达式

热门文章

  1. 线性表的定义和基本操作
  2. oracle11g安装卡在94,winserver2008R2 安装64位 oracle 11G R2 卡在2%,求解
  3. 从博弈论看高薪行业岗位
  4. qq出示测试软件语音聊天,QQ语音时语音测试时可以听到声音,播放测试语音时听不到,也听不到好友发来的语音,请问怎么处理...
  5. ContextCapture | 无人机倾斜摄影技术在农村不动产确权中的应用
  6. 创建、清除interval定时器/interval定时器无法清除/判断定时器是否存在
  7. 用while循环 从1加到100
  8. 3D Photography using Context-aware Layered Depth Inpainting-论文主要内容翻译
  9. 超详细的Mac重装系统教程!让重装系统变得简单起来!
  10. 3533: 黑白图像