训练数据库mysql_mysql数据库操作练习

mysql数据库练习题

温馨提示:多刷新表!

​ 多刷新表!!!

​ 多刷新表!!!!!

1查询每个 学生成绩大于60且成绩总和小于200的班级编号以及成绩和并根据成绩和降序

update sg set sumgrade = chinese+math+english+biology+geography+physic+chemistry;

/*

更新每个学生的总成绩

*/

select classid,grade where grade>60 and sum(grade)<200 order by grade desc;

2创建一个表:student sid sname sage sex score sclass sbirthday

create table student (sid int,

sname varchar(20),

sage int,

sex varchar(5),

score double(5,2),

sclass int,

sbirthday DATE )

3 插入20条数据: 其中sage随机 sex随机 score随机

-- 初版 存储过程 insert20 无语法错误 但是没有对表student插入

delimiter $$

create PROCEDURE insert20( n INT)

BEGIN

declare n int default 0;

while n<20 do

insert into student(sage,sex,score )values(

round(RAND() * 100),

if(floor (RAND()*2)<1,'是','否'),

-- SUBSTR(sexrand (round(RAND() * 100)%2 FOR 1)

round(RAND() * 100)

) ;

set n=n+1 ;

END while ;

end $$

--然后发现参数没卵用。。性别写错了 修改

delimiter $$

create PROCEDURE insert20()

BEGIN

declare n int default 0;

while n<20 do

insert into student(sage,sex,score )values(

round(RAND() * 100),

if(floor (RAND()*2)<1,'男','女'),

-- SUBSTR(sexrand (round(RAND() * 100)%2 FOR 1)

round(RAND() * 100)

) ;

set n=n+1 ;

END while ;

end $$

/*注意事项

1 begin end之间算是代码块语句后要有 分号;

2 delimiter $$ end $$写在开头和结尾,因为结束符号默认是分号;与代码块中冲突,所以要用delimiter

3 二选一赋值用if简单,要是多的话建议用substr(设定好的字符串,随机大数求余,长度) 来赋值

4 基本语法一定要写对,要记牢,本例涉及while do,if,insert into,round(),rand(),及基本存储过程语法等

5 当然 性别 这个或许并不合适 设计性别一般也不是非男即女,懂的都懂

*/

--执行语句

/*删除存储结构*/DROP PROCEDURE IF EXISTS insert20

/*清空表数据*/delete from student

/*调用存储结构*/call insert20()

4 获取所有年龄小于18 并且 名字中有妹的 所有女生的信息

SELECT * FROM student WHERE sage<18 AND sname like '%妹%'

5 获取所有学生的总人数 平均分 最低分 最高分

select count(*) as '总人数'from student;

select avg(score) as '平均分' from student;

select min(score) as'最低分'from student;

select max(score) as'最高分'from student;

--整合--

select count(*) as '总人数',

avg(score) as '平均分',

min(score) as'最低分',

max(score) as'最高分'

from student ;

6获取所有参加考试的学生的总人数和参加考试学生的平均分 和 所有学生的平均分

select count(score) as '总人数',

avg(score) as '平均分',

min(score) as'最低分',

max(score) as'最高分'

from student

--ps: count(*)会计算含null的字段,因为此行其他字段不为空

7 获取所有学生的自我介绍信息:我叫xxx,今年xxx岁,明年xx岁,考了xx分,我是成年人/未成年人

SELECT CONCAT('我叫',

sname,

'今年',

sage,

'岁,明年',

sage+1 ,

'岁,考了',

score ,

'分,我是',

if(sage<18,'未成年人','成年人')

)as SelfIntroduce

FROM student

8 获取5月份生日的学生的个数

SELECT * FROM student where MONTH(sbirthday) =5

9 获取本月生日的学生的个数

SELECT count(*) FROM student where MONTH(sbirthday) =MONTH(CURDATE())

10 获取年龄在18到22岁之间的学生的信息

select * from student where sage>=18 and sage <=22

11 获取第6-10条的所有学生的信息

select * from student limit 5,5; --从第五行结束 开始,查五行

12 把所有女生 并且年龄<20的学生分数+1

select *from student where sex='女'

13 把所有成绩为null的学生 分数设置为100

UPDATE student set score=100 where ISNULL(score);

14 删除sclass列

alter TABLE student DROP COLUMN sclass

15 添加sgrade列 列类型固定长度4的字符串

alter table student add sgrade varchar(4);

16 修改列名sgrade为grade

alter table student change sgrade grade varchar(4);

17 修改grade列类型为char(4)

ALTER table student change grade grade char(4);

18 修改表名为stu1

rename table student to stu1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值