①假设有选课表course_relation(student_id, course_id),其中student_id表示学号,course_id表示课程编号,如果小易现在想获取每个学生所选课程的个数信息,请问如下的sql语句正确的是(D )
解析:
获取学生所选课程的个数,可以通过以学生id作为分组,统计出课程编号的个数
select student_id, count(course_id)
from course_relation
group by stuent_id;
AB选项:统计的是课程id的和,比如语文-A,数学-B,英语-C,而sum(course_id)=A+B+C,并非题目所求
C选项只是统计出了课程id的总数。
②Mysql中表student_table(id,name,birth,sex),score_table(stu_id,subject_name,score),查询没有英语分数的学生明细记录,如下SQL正确的是(B)?
解析:
可以先把有英语分数的学生id查出来
select stu_id
from score_table
where subject_name =’英语’;
然后再进行排除已经查出来的学生
select *
from student_table
where id not in (
select stu_id
from score_table
where subject_name =’英语’;
)
假设score_table为下表:那么A选项先选出没有英语的还是会把张三选出来,最后结果还是会有张三
C选项:子查询是选没有英语的,主查询依然选不在里面的其他课程的,结果就为空了吧
D选项:查询的是只有英语分数的学生
③Mysql中表student_table(id,name,birth,sex),插入如下记录:
(‘1003′ ,’男生姓名’ , ‘2000-05-20’ , ‘男’);
(‘1004’ , ‘张三’ , ‘2000-08-06’ , ‘男’);
(‘1005’ , ‘李四’ , ‘2001-12-01’ , ‘女’);
(‘1006’ , ‘女生姓名’ , ‘2001-12-02’ , ‘女’);
删除符合条件的记录:是男生时删除name=’男生姓名’的记录,是女生时删除name=’女生姓名’的记录,如下SQL正确的是(B)?
解析:
case when的正确语法是: case when … then … when … then … else … end
A选项:删除时不能带关键字table;
C选项:缺少end;
D选项:缺少when;
④现在有一个学生表student,需要回收所有机器的nkw用户对学生表student所在数据库user的update和insert权限,则下列语句中能够实现这一功能的语句是(C)
解析:
回收表的操作功能语句revoke … on … from
授予权限用grant …to
题目要求是回收所有机器的nkw用户对user表的update和insert权限,而选项D是回收所有数据库的update和insert权限,user.* :表示user库里面的所有表。
⑤MySQL查询语句的正确执行顺序:
(1)首先运算的是FROM子句,根据FROM子句中指定的一个或多个表创建工作表;
(2)如果存在WHERE子句,则WHERE子句对步骤1获得的工作表进行条件筛选,删除不符合条件的记录;
(3)如果存在GROUP BY子句,则对步骤2生成的结果表按指定字段进行分组,生成一份新的结果表;
(4)如果存在HAVING子句,则对步骤3的结果表按指定条件进行筛选,删除掉不满足筛选条件的记录;
(5)执行SELECT子句,删除不包含在SELECT 字段名,所指定的字段。如果SELECT子句中包含关键字DISTINCT,则执行去重复运算……
(6)如果有ORDER BY子句,则按指定的排序规则对结果表进行排序操作;
(7)如果需要找前几名,用LIMIT名次。
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/289079.html