数据库 ·

MySQL数据库对象与应用-MySQL进阶SQL应用单元测验

MySQL数据库对象与应用-MySQL进阶SQL应用单元测验

1、(单选)有表 song(id,song_name,album,play_count,fav_count)分别表示歌曲的主键id、歌曲名、专辑名、播放次数和收藏次数以下与order by相关的sql错误的是

  • A.select * from song order by play_count asc;
  • B.select * from song order by (play_count + fav_count) asc;
  • C.select * from song order by fav_count desc where play_count > 5;
  • D.select * from song order by id,play_count asc,fav_count desc;

解析:  C、order by 与 where 的先后顺序不对,先写where子句再写order by子句。

 

2、(单选)以下关于distinct的描述,正确的是:

  • A.distinct的作用是分组
  • B.distinct的查询结果一定是从小到大排序的
  • C.distinct可以和函数结合使用,如count(distinct col)
  • D.sql语句里使用了distinct,就不能使用group by或者order by

解析:  A、分组是group by,distinct是列出唯一的不同值

 

3、(多选)有表 song(id,song_name,album,play_count,fav_count)分别表示歌曲的主键id、歌曲名、专辑名、播放次数和收藏次数。要求查询超过两首歌的专辑与其歌曲数,并且按专辑名排序;有同学给出如下sql语句:

select id,count(*) from song order by album group by album having
count(*)>2 ;

这个sql错误的地方是:

  • A.order by 后面跟group by语句
  • B.album没有出现在select语句中
  • C.在having条件中使用了count(*)
  • D.这个sql没有问题

解析:  A、order by子句不能在group by的前面。  B、题干要求查询专辑,所以album需要select出来。

 

4、(单选)结合《SQL语言进阶篇》课程中介绍的歌单表play_list,下面这个sql实现了何种功能:

select userid from play_list group by userid having max(trackcount) > 10;
  • A.创建有超过10个歌单的用户列表。
  • B.创建有超过10首歌的歌单的用户列表。
  • C.创建歌单歌曲数超过10首歌的歌单列表。
  • D.创建歌单最大歌曲数超过10的歌单列表。

 

5、(单选)delimiter在MySQL中的作用是:

  • A.标识存储过程开始执行。
  • B.标识存储过程结束。
  • C.重置MySQL的命令结束符。
  • D.删除当前的MySQL分隔符。

 

6、(单选)下列关于触发器的说法,正确的是:

  • A.table表上有一个insert相关的触发器,即使 insert into table执行失败了,触发器仍然会触发执行。
  • B.MySQL 5.5上一张表上最多只能建两个update相关的触发器。
  • C.可以在一个t1表的before update触发器中执行update t1 的sql语句。
  • D.MySQL中的触发器不能更新其他database的表。

解析:  B、对于update,5.5版本只能在before和after update的时候各自建一个触发器。  C、触发器不能更新自身表的数据。  D、可以的,只要有权限。

 

7、(单选)一个班级有N个学生,每个学生有M门课程的成绩,假设成绩表结构为(学生ID,课程,成绩),要查询出总成绩最高的前K名学生,不需要用到的SQL关键字有:

  • A.HAVING
  • B.GROUP BY
  • C.SUM
  • D.ORDER BY

解析:  A、总成绩,需要sum;根据学生分组,需要group by;最高的,需要order by

select 学生id,sum(成绩) from table group by 学生id order by sum(成绩) desc limit K

 

 

8、(单选)下面这个语句有什么问题?

SELECT
* FROM Orders WHERE OrderID = (SELECT OrderID FROM OrderItems WHERE ItemQty
> 50)
  • A.’=’应该改成’IN’。
  • B.子查询不应该用圆括号括起。
  • C.子查询中OrderID应该用*代替。
  • D.上面所有都不正确。

 

9、(单选)有表tab(name varchar(20), id int, sal int)分别表示员工姓名、员工号、薪水,如何查找出薪水第二高的员工的薪水?

  • A.select max(sal) from tab where sal <max(select sal from tab)
  • B.select min(sal) from (select sal from tab order by sal limit 2)
  • C.select sal from tab order by sal desc limit 1 offset 1
  • D.select max(sal) from tab where sal not in (select max(sal) from tab)

解析:  C、可能是第一高的,因为第一高可能有2个人是一样的。

 

10、(多选)能被select * from tbl where col like '%b%e%' 查询出来的条件有:

  • A.ecbd
  • B.abcde
  • C.eedbe
  • D.cdde

参与评论