mysql习题04

1、比赛结果result表内容如下:
Date                     Win
2017-07-12               胜
2017-07-12               负
2017-07-15               胜
2017-07-15               负
如果要生成下列结果, 正确的sql语句是:(      )
比赛日期            胜     负
2017-07-12          1      1
2017-07-15          1      1

A、select Date As 比赛日期, (case when Win='胜' then 1 else 0 end) 胜, (case when Win='负' then 1 else 0 end) 负 from result group by Date;

B、select Date As 比赛日期, SUM(case when Win='胜' then 1 else 0 end) 胜, SUM(case when Win='负' then 1 else 0 end) 负 from result;

C、select Date As 比赛日期, SUM( when Win='胜' then 1 else 0 end) 胜, SUM( when Win='负' then 1 else 0 end) 负 from result group by Date;

D、select Date As 比赛日期, SUM(case when Win='胜' then 1 else 0 end) 胜, SUM(case when Win='负' then 1 else 0 end) 负 from result group by Date;

2、运动会比赛信息的数据库,有如下三个表:
运动员ATHLETE(运动员编号 Ano,姓名Aname,性别Asex,所属系名 Adep), 项目 ITEM (项目编号Ino,名称Iname,比赛地点Ilocation), 成绩SCORE (运动员编号Ano,项目编号Ino,积分Score)。
写出目前总积分最高的系名及其积分,SQL语句实现正确的是:(      )

A、SELECT Adep,SUM(Score)

FROM ATHLETE,SCORE

WHERE ATHLETE.Ano=SCORE.Ano

GROUP BY Adep

HAVING SUM(Score)>=ANY (

                                                  SELECT SUM(Score)

                                                  FROM ATHLETE,SCORE

                                                  WHERE ATHLETE.Ano=SCORE.Ano

                                                  GROUP BY Adep

                                                  );

B、SELECT Adep,SUM(Score)

FROM ATHLETE,SCORE

WHERE ATHLETE.Ano=SCORE.Ano

GROUP BY Adep

HAVING SUM(Score)>=SOME (

                                                        SELECT SUM(Score)

                                                        FROM ATHLETE,SCORE

                                                        WHERE ATHLETE.Ano=SCORE.Ano

                                                        GROUP BY Adep

                                                        );

C、SELECT Adep,SUM(Score)

FROM ATHLETE,SCORE

WHERE ATHLETE.Ano=SCORE.Ano

GROUP BY Adep

HAVING SUM(Score) IN (

                                        SELECT SUM(Score)

                                        FROM ATHLETE,SCORE

                                        WHERE ATHLETE.Ano=SCORE.Ano

                                        GROUP BY Adep

                                        );

D、SELECT Adep,SUM(Score)

FROM ATHLETE,SCORE

WHERE ATHLETE.Ano=SCORE.Ano

GROUP BY Adep

HAVING SUM(Score)>=ALL (

                                                SELECT SUM(Score)

                                                FROM ATHLETE,SCORE

                                                WHERE ATHLETE.Ano=SCORE.Ano

                                                GROUP BY Adep

                                                );

3、某高校采取电子化考试,便于查询学生对应考场号创建视图,已知student表(学号sid,姓名sname,考号s_test_id),room表(考场号rid,座位号rseat,考号s_test_id),下列语句错误的是()

A、CREATE VIEW view_room (sname,s_test_id,rid,rseat) AS

SELECT student.sname, student.s_test_id, room.rid, room.rseat

FROM student,room WHERE student.s_test_id=room.s_test_id;

B、CREATE ALGORITHM={TEMPTABLE} VIEW view_room AS

SELECT student.sname, student.s_test_id, room.rid, room.rseat

FROM student,room WHERE student.s_test_id=room.s_test_id;

C、CREATE VIEW view_room AS

SELECT student.sname, student.s_test_id, room.rid, room.rseat

FROM student,room WHERE student.s_test_id=room.s_test_id;

D、CREATE VIEW view_room AS (rid,rseat,sname,s_test_id)

SELECT student.sname, student.s_test_id, room.rid, room.rseat

FROM student,room WHERE student.s_test_id=room.s_test_id;

答案:DDD

解析:

1、由题意得,需要行转列按日期分组并对列求和,因此需要group by Date, sum(...胜/负)。

A中无sum,错;

B中无group by,错;

C中case when ... then ... else ... end用法不正确,错;

选D

2、本题主要考察多行比较操作符

IN:等于列表的任意一个

ANY:需要和单行比较操作符一起使用,和子查询返回的某一个值比较

ALL:需要和单行比较操作符一起使用,和子查询返回的所有值比较

SOME:实际上是ANY的别名,作用相同,一般常使用ANY

3、所有选项都是在多表上建立视图,AD选项在视图中重命名了选取列的列名,但是D选项的列名与选取列内容不一致,后续对于视图的操作很容易引起歧义,且指定列名和AS颠倒了位置,错误;B选项增加了将视图存入临时表的操作,然后用临时表来执行语句;C选项未重命名,但是并不影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值