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

mysql数据库操作练习

上一篇:MySql的用法总结-2


下一篇:创建自己的RSA密钥来保护web.config 加密数据库连接字符串