牛客网-SQL专项训练19

①下列哪个语句是授予用户SQLTest对数据库Sales的CUSTOMERS表的列cid、cname的查询权限(C)

 解析:

授予权限的语法:

GRANT <权限> ON 表名(列名) TO 用户名

②在STUDENT表中按class_type统计数据行数分组情况后,筛选出数据行数为大于10行的组:A

 解析:

需要显示的数据为class_type以及它的行数,需要按class_type进行分组,然后进行筛选行数 > 10的数据。

select的语法结构:

SELECT [DISTINCT] 字段名

FROM 表名

[WHERE] 条件筛选

[GROUP BY] 分组

[HAVING] 分组筛选

[ORDER BY] 排序

[LIMIT] 名次或分页

运算执行顺序:

(1)首先运算的是FROM子句,根据FROM子句中指定的一个或多个表创建工作表;

(2)如果存在WHERE子句,则WHERE子句对步骤1获得的工作表进行条件筛选,删除不符合条件的记录;

(3)如果存在GROUP BY子句,则对步骤2生成的结果表按指定字段进行分组,生成一份新的结果表;

(4)如果存在HAVING子句,则对步骤3的结果表按指定条件进行筛选,删除掉不满足筛选条件的记录;

(5)执行SELECT子句,删除不包含在SELECT 字段名,所指定的字段。如果SELECT子句中包含关键字DISTINCT,则执行去重复运算

(6)如果有ORDER BY子句,则按指定的排序规则对结果表进行排序操作;

(7)如果需要找前几名,用LIMIT名次。

where和having的区别:

WHERE不能接聚合函数(MAX、MIN、COUNT、SUM、AVG等);HAVING后可以接聚合函数;
WHERE用在GROUP BY前,先过滤后分组;
HAVING用在GROUP BY之后,先分组后过滤,且使用HAVING一定要用到GRUOP BY,但用到GROUP BY 不一定有HAVING。

③要求删除商品表中价格大于3000的商品,下列SQL语句正确的是(A)

 删除操作语法为:DELETE FROM <表名> [WHERE <条件>];故A选项正确,B选项delete后面不应有*,即语法错误,而C选项,删除表中的全部数据,忽略了题中的限定条件。

修改操作的格式为UPDATE<表名> SET <列名>=<值表达式>[<列名>=<值表达式>]...[WHERE<条件>]

④Mysql中表student_table(id,name,birth,sex),score_table(stu_id,subject_name,score),查询每个学生的分数最高的学科以及对应分数、学生明细记录,如下SQL正确的是(D)?

 

 解析:

先观察四个选项第一个子查询

A:select stu_id,max(score) as c1 from score_table group by stu_id order by c1 desc limit 1

从score_table表里查询每个学生的成绩的最高分并以stu_id进行分组,并且最高分降序排序,只筛选出一条数据。问题就在于这样会去掉同为最高分,但是只取了一条数据,就会漏掉同科目同为最高分的其他同学,故A错;

B、C、D:select stu_id,max(score) as c1 from score_table group by stu_id

从score_table表里查询每个学生的成绩的最高分并以stu_id进行分组;

在观察BC选项和D选项的区别在于这个筛选条件:on t1.stu_id = t2.stu_id and t1.c1 = t2.score 或者  on t1.c1 = t2.score 

当然是既需要id一致也需要分数一致才能筛选出来。

 ⑤下面哪些字符最可能会导致sql注入?  A

 解析:

单引号作为MySQL中的字段值封装方式,最容易被用作注入攻击。SQL注入的关键是单引号的闭合

posted on 2022-09-21 15:20  我不想一直当菜鸟  阅读(107)  评论(0编辑  收藏  举报