牛客网-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的区别:
③要求删除商品表中价格大于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注入的关键是单引号的闭合
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)