MySQL实验五:设计性实验
实验五:设计性实验
Student 表的内容
字段名 | 字段描述 | 数据类型 | 主键 | 外键 | 非空 | 唯一 | 自增 |
---|---|---|---|---|---|---|---|
num | 学号 | INT(10) | 是 | 否 | 是 | 是 | 否 |
name | 姓名 | VARCHAR(20) | 否 | 否 | 是 | 否 | 否 |
sex | 性别 | VARCHAR(4) | 否 | 否 | 是 | 否 | 否 |
birthday | 出生年份 | DATETIME | 否 | 否 | 否 | 否 | 否 |
bumen | 院系 | VARCHAR(20) | 否 | 否 | 是 | 否 | 否 |
address | 家庭住址 | VARCHAR(50) | 否 | 否 | 否 | 否 | 否 |
score 表的内容
字段名 | 字段描述 | 数据类型 | 主键 | 外键 | 非空 | 唯一 | 自增 |
---|---|---|---|---|---|---|---|
id | 编号 | INT(10) | 是 | 否 | 是 | 是 | 否 |
c_name | 课程名 | VARCHAR(20) | 否 | 否 | 否 | 否 | 否 |
stu_id | 学号 | INT(10) | 否 | 是 | 是 | 否 | 否 |
grade | 成绩 | INT(10) | 否 | 否 | 否 | 否 | 否 |
初始化数据
创建数据库语句:
1 |
|
创建表语句:
1 |
|
1 |
|
插入数据语句:
1 |
|
1 |
|
按下列要求写出操作语句
- 查询 student 表的所有记录。
方法一:用”*“。
1
select * from student;
方法二:列出所有的列名。
1
select num,name,sex,birthday,bumen,address from student;
查询 student 表的第二条到第四条记录。
1
2select * from student limit 1,3;
#在 student 表中搜索全部记录 从第2条开始向后3条。从 student 表查询所有学生的学号、姓名和院系的信息。
1
select num,name,bumen from student;
查询计算机系和英语系的学生的信息。
方法一:使用 IN 关键字
1
select * from student where bumen in ('计算机系','英语系');
方法二:使用 OR 关键字
1
select * from student where bumen='计算机系' or bumen='英语系';
- 从 student 表中查询年龄为 18 到 22 岁的学生的信息。
方法一:使用 BETWEEN AND 关键字来查询
1
2
3
4select * from student where date_format(now(),'%y') - year(birthday) between 18 and 20;
#data_format()函数,参数为(data,格式)参数,返回date经所传格式格式化后的数据。
#now()函数,无参数,返回当前年月日时间。
#year()函数,参数类型为(date),返回所传参数的年份。方式二:使用 AND 关键字和比较运算符。
1
2
3
4
5
6
7
8
9select * from student where date_format(now(),'%Y')-year(birthday)>18 and date_format(now(),'%Y')-year(birthday)<20;
#data_format()函数,参数为(data,格式)参数(格式参数类似C语言),返回date经所传格式格式化后的数据。
#经测试发现格式里的%Y和%y不一样,Y表示完整年份,y表示年份的后两位
#即如果现在输入:
select date_format(now(),'%Y');
#结果为2021,如果输入:
select date_format(now(),'%y');
#结果为21
#now()函数,无参数,返回当前年月日时间。
student 表中查询每个院系有多少人,为统计的人数列取别名 sum_of_bumen。
1
select bumen,count(num) as sum_of_bumen from student group by bumen;
从 score 表中查询每个科目的最高分。
1
select c_name,max(grade) from score group by c_name;
查询李五一的考试科目(c_name)和考试成绩(grade)。
1
select c_name,grade from score where stu_id=(select num from student where name='李五一');
用连接查询的方式查询所有学生的信息和考试信息。
1
select * from student join score on student.num=score.stu_id;
计算每个学生的总成绩(需显示学生姓名)。
1
select name,sum(grade) from student join score on student.num=score.stu_id group by name;
计算每个考试科目的平均成绩。
1
select c_name,avg(grade) from score group by c_name;
查询计算机成绩低于 95 的学生的信息。
1
select * from student where num in (select stu_id from score where c_name='计算机' and grade<95);
查询同时参加计算机和英语考试的学生的信息。
1
select * from student where num in (select stu_id from score where c_name='计算机') and num in(select stu_id from score where c_name='英语');
将计算机成绩按从高到低进行排序。
1
select grade from score where c_name='计算机' order by grade desc;
从 student 表和 score 表中查询出学生的学号,然后合并查询结果。
1
select num from student union (select stu_id from score);
查询姓张或者姓王的同学的姓名、院系、考试科目和成绩
1
select name,bumen,c_name,grade from student join score on student.num=score.stu_id where name like'张%' or name like'王%';
查询都是湖南的同学的姓名、年龄、院系、考试科目和成绩。
1
select name,date_format(now(),'%Y') - year(birthday) as age,bumen,c_name,grade from student join score on student.num=score.stu_id where address like'湖南%';
MySQL实验五:设计性实验
https://www.sweethg.club/2021-10-22/mysql-test5-design/