牛客网-SQL专项训练15

①MySQL是一种(关系型)数据库管理系统。

关系型数据库的代表包括Oracle, Sql Server, MySQL。

②小李在创建完一张数据表后,发现少创建了一列,此时需要修改表结构,应该用哪个语句进行操作?C

 解析:

题目中说了需要修改表的结构, 故需要使用alter table

添加列: ALTER TABLE   表名   add 字段名
修改列:  ALTER TABLE   表名   modify 字段名
删除列:  ALTER TABLE   表名   drop 字段名
INSERT是插入语句,UPDATE是更新语句,修改表的数据,并不修改表的结构。

Mysql中表student_table(id,name,birth,sex),插入如下记录:
('1001' , '' , '2000-01-01' , '男');
('1002' , null , '2000-12-21' , '男');
('1003' , NULL , '2000-05-20' , '男');
('1004' , '张三' , '2000-08-06' , '男');
('1005' , '李四' , '2001-12-01' , '女');
查询2001年及之后出生的男生、女生总数,正确的SQL是:
解析:
题中所求的男生,女生的总数,故select sex count(*)
查询的表是student_table
条件的2001年及之后出生的
需要通过sex性别进行分组
select sex count(*)
from student_table
where birth >= '2001'
group by sex;
④有一张person表,主键是id,数据如下:

 同时还有一张任务表task,主键也是id:

请找出每个人的任务情况(注意:没有任务也要输出),结果按id降序排列,输出如下:

 

 下面正确的SQL查询语句是:A

 解析:

其实仔细观察每个选项的区别,就知道这道题主要考查的是JOIN连接的使用(LEFT JOIN 、JOIN、INNER JOIN、RIGHT JOIN)

观察结果表:
有两个Ming,一个Dong,且 Dong后面的content为null,就能看出来是以person表为主表,task为从表左连接,并以两个表的id相等作为条件连接,以id降序排列显示,这样就会显示左表的所有数据,右边没有与之匹配的久为空。A选项符合
B选项:只获取两表相匹配的数据,没有对应值的就会去掉,所以会漏掉没有任务的情况;
C选项:会获取task表的所有记录,会剔除掉Dong,和题意相反了;
D选择:同样错在会获取两个表中字段匹配关系的记录,漏掉没有任务的情况。
有一张学生成绩表sc(sno 学号,class 课程,score 成绩),示例如下:
可以查询出每个学生的英语、数学的成绩(行转列,一个学生输出一行记录,比如输出[1, 89, 90]的SQL语句?
select sno,
sum(if(class='english',score,0)) as english,
sum( if(class='math',score,0) ) as math
from sc
where class in('english','math')
group by sno
解析:
1.sum函数作用:不加的话就会导致 
 sno english math
  1       90        0
  1       0         85
而我们想要的结果是:
sno english math
  1      90      85 
将上面2条记录合并
2.group by作用:不加会导致所有学生英语成绩都加在一起,数学成绩也会加在一起
 
posted on 2022-09-17 15:49  我不想一直当菜鸟  阅读(202)  评论(0编辑  收藏  举报