ivy-xu

# 表结构部分

1 drop database if exists `SchoolExam`;
2 create database if not exists `SchoolExam`  default character set utf8 collate utf8_unicode_ci;
3 use SchoolExam;

# 创建Student表

 1 drop table if exists `Student`;
 2 create table if not exists `Student`(
 3     ID                INT(10)     not null    auto_increment comment \'学生学号\',
 4     `Name`         varchar(20) not null                      comment \'学生姓名\',
 5     Sex            char(4)                                 comment \'性别\',
 6     Birth        year                                    comment \'出生日期\',
 7     Department     varchar(20) not null                       comment \'院系\',
 8     Address        varchar(50)                            comment \'家庭住址\',
 9     primary key(ID),
10     unique(ID)
11 )engine=InnoDB charset=utf8;

# 创建Score表

1 drop table if exists `Score`;
2 create table if not exists `Score`(
3     ID         int(10)        not null    auto_increment    comment \'成绩编号\',
4     Stu_ID    int(10)        not null                    comment \'学生学号\',
5     C_name     VARCHAR(20)                                comment \'科目编号\',
6     Grade    int(10)                                    comment \'考试成绩\',
7     primary key(ID),
8     unique(ID)
9 )engine=InnoDB charset=utf8;

# 数据部分

 1 insert into Student values(901, \'张老大\',     \'\',  1985,  \'计算机系\',  \'北京市海淀区\');
 2 insert into Student values(902, \'张老二\',     \'\',  1986,  \'中文系\',  \'北京市昌平区\');
 3 insert into Student values(903, \'张三\',     \'\',  1990,  \'中文系\',  \'湖南省永州市\');
 4 insert into Student values(904, \'李四\',     \'\',  1990,  \'英语系\',  \'辽宁省阜新市\');
 5 insert into Student values(905, \'王五\',     \'\',  1991,  \'英语系\',  \'福建省厦门市\');
 6 insert into Student values(906, \'王六\',     \'\',  1988,  \'计算机系\',  \'湖南省衡阳市\');
 7 
 8 insert into Score values(null, 901,  \'计算机\', 98);
 9 insert into Score values(null, 901,  \'英语\', 80);
10 insert into Score values(null, 902,  \'计算机\', 65);
11 insert into Score values(null, 902,  \'中文\', 88);
12 insert into Score values(null, 903,  \'中文\', 95);
13 insert into Score values(null, 904,  \'计算机\', 70);
14 insert into Score values(null, 904,  \'英语\', 92);
15 insert into Score values(null, 905,  \'英语\', 94);
16 insert into Score values(null, 906,  \'计算机\', 90);
17 insert into Score values(null, 906,  \'英语\', 85);

#3.查询student表的所有记录

1 select * from Student;

#4.查询student表的第2条到4条记录

1 #limit 1,3--第2条到4条记录
2 select * from Student limit 1,3;

#5.从student表查询所有学生的学号(id)、姓名(name)和院系(department)的信息

1 select `id`,`name`,`department` from Student;

#6.从student表中查询计算机系和英语系的学生的信息

1 select * from Student where `department` in (\'计算机系\',\'英语系\');

#7.从student表中查询年龄18~22岁的学生信息

1 select * from Student where `Birth`<=\'1995\' and `Birth`>=\'1991\';
2 select id,`name`,sex,(2013-birth) AS age,department,address from Student where (2013-birth) between 18 and 22;
3 #select id,(date_format(from_days(to_days(now()) - to_days(birth)),\'%Y\') + 0) as 年龄 from Student;

#8.从student表中查询每个院系有多少人

select `department`院系, count(`id`)总人数 from Student group by `department`; 

#9.从score表中查询每个科目的最高分

select `C_name`科目, max(`Grade`)最高分 from Score group by `C_name`;

#10.查询李四的考试科目(c_name)和考试成绩(grade)

1 select `Name`,`C_name`, `Grade` from Score sc, Student st where sc.Stu_id=st.`Id` and st.`Name`=\'李四\';
2 #select`C_name`, `Grade` from Score where Stu_id=(select id from Student where `name`=\'李四\');

#11.用连接的方式查询所有学生的信息和考试信息

1 /*select * from Student inner join Score
2 on (Student.`Id`=Score.Stu_id);*/
3 select student.id,name,sex,birth,department,address,c_name,grade from Student,Score where Student.`Id`=Score.Stu_id;

#12.计算每个学生的总成绩

1 #select `Stu_id`,sum(`Grade`) from Score group by `Stu_id`;
2 select `Stu_id`,`name`,sum(`Grade`) from Student,Score where Student.`Id`=Score.Stu_id group by `Stu_id` ;

#13.计算每个考试科目的平均成绩

select `C_name`科目, avg(`Grade`)平均分 from Score group by `C_name`;

#14.查询计算机成绩低于95的学生信息

select * from Student where `id` in (select `Stu_id` from Score where `C_name`=\'计算机\' and Grade<95);

#15.查询同时参加计算机和英语考试的学生的信息

1 select * from Student where `id` in (select `Stu_id` from Score where `Stu_id` in (select `Stu_id` from Score where `C_name`=\'计算机\') and `C_name`=\'英语\');
2 /*select a.* from Student a,Score b,Score c
3 where a.id=b.stu_id and b.c_name=\'计算机\' and a.id=c.stu_id and c.c_name=\'英语\';*/

#16.将计算机考试成绩按从高到低进行排序

select * from Score where `C_name`=\'计算机\' order by Grade desc;

#17.从student表和score表中查询出学生的学号,然后合并查询结果

1 #union--合并字段,去掉重复
2 /*select * from Student
3 left join Score
4 on(Student.`id`=Score.Stu_id);*/
5 select id from Student union select stu_id from Score;

#18.查询姓张或者姓王的同学的姓名、院系和考试科目及成绩

1 /*select `Name`姓名, Department 院系,C_name 考试科目,Grade 成绩 from Student
2 left join Score
3 on(Student.`id`=Score.Stu_id)
4 where `Name` like \'张%\' or `Name` like \'王%\';*/
5 select `Name`姓名, Department 院系,C_name 考试科目,Grade 成绩 from Student,Score
6 where (`Name` like \'张%\' or `Name` like \'王%\') and Student.`id`=Score.Stu_id;

#19.查询都是湖南的学生的姓名、年龄、院系和考试科目及成绩

1 /*select `Name`姓名, Department 院系,C_name 考试科目,Grade 成绩 from Student
2 left join Score
3 on(Student.`id`=Score.Stu_id)
4 where `Address` like \'湖南%\' ;*/
5 select `Name`姓名,(select timestampdiff(year,Birth,now())) as 年龄, Department 院系,C_name 考试科目,Grade 成绩 from Student,Score
6 where `Address` like \'湖南%\' and Student.`id`=Score.Stu_id;

#20.统计分数低于60分,60分——70分,70分——80分,大于80分的学生人数。

1 #select stu_id,count(stu_id) from Score where Grade between 70 and 80 group by stu_id;
2 select
3 count(case when Grade<60 then 1 end ) as \'60分以下人数\',
4 count(case when Grade>=60 and Grade<70 then 1 end ) as \'60~70分人数\',
5 count(case when Grade>=70 and Grade<80 then 1 end ) as \'70~80分人数\',
6 count(case when Grade>=80 then 1 end ) as \'80分以上人数\'
7 from Score;

#21.统计平均成绩大于90分的学生,显示学号、姓名、总平均成绩。

1 select `Stu_id`,`name`,avg(Grade) from Score,Student where Student.`id`=Score.Stu_id group by `Stu_id`,`name` having avg(Grade)>90;
2 /*SELECT `Stu_id`,`name`,avg(Grade)
3 FROM Score,Student
4 WHERE Student.`id`=Score.Stu_id
5 GROUP BY `Stu_id`,`name`
6 HAVING AVG(GRADE)>=90;*/

 

分类:

技术点:

相关文章: