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;
[callout class=“danger” title=“”] 解析: C、order by 与 where 的先后顺序不对,先写where子句再写order by子句。 [/callout] 2、(单选)以下关于distinct的描述,正确的是:
- A.distinct的作用是分组
- B.distinct的查询结果一定是从小到大排序的
- C.distinct可以和函数结合使用,如count(distinct col)
- D.sql语句里使用了distinct,就不能使用group by或者order by
[callout class=“danger” title=“”] 解析: A、分组是group by,distinct是列出唯一的不同值 [/callout] 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 ;
2
这个sql错误的地方是:
- A.order by 后面跟group by语句
- B.album没有出现在select语句中
- C.在having条件中使用了count(*)
- D.这个sql没有问题
[callout class=“danger” title=“”] 解析: A、order by子句不能在group by的前面。 B、题干要求查询专辑,所以album需要select出来。 [/callout] 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的表。
[callout class=“danger” title=“”] 解析: B、对于update,5.5版本只能在before和after update的时候各自建一个触发器。 C、触发器不能更新自身表的数据。 D、可以的,只要有权限。 [/callout] 7、(单选)一个班级有N个学生,每个学生有M门课程的成绩,假设成绩表结构为(学生ID,课程,成绩),要查询出总成绩最高的前K名学生,不需要用到的SQL关键字有:
- A.HAVING
- B.GROUP BY
- C.SUM
- D.ORDER BY
[callout class=“danger” title=“”] 解析: A、总成绩,需要sum;根据学生分组,需要group by;最高的,需要order by select 学生id,sum(成绩) from table group by 学生id order by sum(成绩) desc limit K [/callout] 8、(单选)下面这个语句有什么问题?
SELECT
* FROM Orders WHERE OrderID = (SELECT OrderID FROM OrderItems WHERE ItemQty
> 50)
2
3
- 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)
[callout class=“danger” title=“”] 解析: C、可能是第一高的,因为第一高可能有2个人是一样的。 [/callout] 10、(多选)能被select * from tbl where col like ‘%b%e%’ 查询出来的条件有:
- A.ecbd
- B.abcde
- C.eedbe
- D.cdde
除特别注明外,本站所有文章均为 Windcoder网 原创,转载请注明出处来自: mysqlshujukuduixiangyuyingyong-mysqljinjiesqlyingyongdanyuanceyan

No Data