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