牛客网-SQL专项训练6

①要将employee 的表名更改为 employee_info,下面MySQL语句正确的是(A)

 解析:

RENAME用于表的重命名:RENAME  <NAME>(修改表名或索引名) 或  RENAME  TO  <NAME>(修改列名,不更改定义)

MODIFY用于字段类型的修改:MODIFY  COLUMN   <列名>  <类型>(只改字段定义,不改名字)

ALTER用于对字段类型、默认值的修改:ALTER  COLUMN  <列名>  <类型>    SET  DEFULT  <更改值>
CHANGE用于对列名及类型的修改:CHANGE  COLUMN  <旧列名>  <新列名>  <类型>(既可改字段定义又可改名字)
知识点:MySQL中ALTER TABLE命令的用法
②查询语句select stuff('lo ina',3, 1, 've ch')结果为:love china
解析:

STUFF(原字符, 开始位置, 删除长度, 插入字符):从指定的起点处开始删除指定长度的字符,并在此处插入另一组字符

故这里:原字符为lo ina,从第三个位置删除1个字符,即删除lo后面的空格,然后插入ve ch,结果为:love china

知识点:STUFF()函数

③快件信息表waybillinfo(id, waybillno, zonecode, optype, update_time)中存储了快件的所有操作信息,请找出在'中山公园'网点,异常派送(optype='异常派件')次数超过3次的快件(waybillno),正确的sql为:

 解析:

本题需要找到在'中山公园'网点,异常派送次数 > 3的快件,不需要查次数故需要以快件进行分组,找到次数大于3的快件。不需要查次数就可以排除SELECT中含有的count(*)的选项ABC,其次where 后面是不能跟聚合函数的(A错),B选项用的order by。

④有一张persons表包含如下信息:

 现要选取居住地址Address以'C'或'h'开头 或以 'et' 结尾的所有数据,结果显示为:

下列MySQL查询语句正确的是:C

 解析:

MySQL 中使用 REGEXP 来操作正则表达式的匹配。

其中
  • ^ 该符号表示匹配输入字符串的开始位置;
  • $表示匹配输入字符串的末尾位置;
  • [...] 表示匹配所包含的任意一个字符;
  • [^...]表示不能匹配括号内的任意单个字符;
  • x|y 这条竖线表示匹配x 或匹配y。

A选项:'[^Ch]|et$' :表示不能匹配C,h任意一个字符或者与et结尾的字符相匹配;

B选项:'^[Ch]et$':表示匹配以C或h开头的字符串并且以et结尾的字符串(缺少 |);

C选项:'^[Ch]|et$':表示匹配以C或h开头的字符串或以et结尾的字符串;(符合条件);

D选项:'^[Ch]|[et]$':表示匹配以C或h开头的字符串或者有e、t任意一个字母结尾的字符串(与题中以et两个连着的结尾不符);

知识点:MySQL中正则表达式的匹配规则

⑤Mysql中表student_table(id,name,birth,sex),查询男生、女生人数分别最多的3个姓氏及人数,正确的SQL是:

解析:

A选项:是分别找出男生女生姓氏最多的三个,而A选项男生女生一共只有三条记录;

B选项:需要使用子查询

C和D选项的区别,在于D选项中having c1 >= 3,查询的是人数大于等于3,而题目要求的是前三的数据。C正确。

 在mysql中,group by中可以使用别名;where中不能使用别名;

length(name) >= 1:确保名字非空,空值无法进行计算会报错

 

posted on 2022-09-11 11:01  我不想一直当菜鸟  阅读(170)  评论(0编辑  收藏  举报