2020-07-30-mysql第三章作业练习

数据准备:

先创建student和score表,添加基本数据,用于查询演练(参考答案如下)

创建student表SQL代码如下:

create table student(

      id int(10) not null unique primary key,

      name varchar(20) not null,

      gender varchar(4),

      birth year,

      department varchar(20),

      address varchar(50)

);

创建score表SQL代码如下:

create table score(

      id int(10) not null unique primary key auto_increment,

      stu_id int(10) not null,

      c_name varchar(20),

      grade int(10)

);

向student表插入记录的insert语句如下:

insert into student values

( 901,'张老大','男',1985,'计算机系','北京市海淀区'),

( 902,'张老二', '男',1986,'中文系', '北京市昌平区'),

( 903,'张三', '女',1990,'中文系', '湖南省永州市'),

( 904,'李四', '男',1990,'英语系', '辽宁省阜新市'),

( 905,'王五', '女',1991,'英语系', '福建省厦门市'),

( 906,'王六', '男',1988,'计算机系', '湖南省衡阳市');

向score表插入记录的insert语句如下:

insert into score values

(NULL,901, '计算机',98),

(NULL,901, '英语', 80),

(NULL,902, '计算机',65),

(NULL,902, '中文',88),

(NULL,903, '中文',95),

(NULL,904, '计算机',70),

(NULL,904, '英语',92),

(NULL,905, '英语',94),

(NULL,906, '计算机',90),

(NULL,906, '英语',85);

关卡一

1、查询student表的所有记录

selec * from student;

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

select * from student limit 1,3;

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

select id,name,department from student;

4、从student表中查询计算机系和英语系的学生的信息

select * from student where department in ('计算机系','英语系');

5、从student表中查询年龄22~26岁的学生信息

select

id,

name,

gender,

year(now())-birth as age

department,

address

from student

where year(now())-birth >= 10 and year(now())-birth <= 40;

关卡二:继续用关卡一的数据表进行查询演练

1、从student表中查询每个院系有多少人

select department,count(1) from student group by department;

2、从score表中查询每个科目的最高分

select c_name,max(grade) from score group by c_name;

3、查询李四的考试科目(c_name)和考试成绩(grade)--什么叫行级和列级子查询?

select c_name,grade from score where score.stu_id= (select id from student where name='李四');

4、用连接的方式查询所有学生的信息和考试信息

select s.*,c.* from student as s left join score as c on s.id=c.stu_id;

5、查询每个学生的总成绩

select s.name,sum(c.grade) from student as s left join score as c on s.id = c.stu_id group by s.name;

6、查询每个考试科目的平均成绩

select c_name,round(avg(grade),1) from score group by c_name;

7、查询计算机成绩低于95的学生信息-子查询

select s.* from student as s inner join score as c on s.id = c.stu_id where c.c_name='计算机' and grade<95;

select * from student where id in (select stu_id from score where c_name='计算机'  and grade<95);

关卡三:

1、查询同时参加计算机和英语考试的学生的信息--一个表可以多次连接,如果需要筛选的条件为多个

select

stu.*

from student as stu

inner join score as s1

inner join score as s2

on stu.id = s1.stu_id

and stu.id = s2.stu_id

and s1.stu_id = s2.stu_id

where s1.c_name='计算机'

and s2.c_name='英语';

2、查询计算机考试成绩按从高到低进行排序

select stu_id,grade from score where c_name = '计算机' order by grade desc;

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

select s.name,s.department,c.c_name,c.grade from student as s left join score as c on s.id = c.stu_id where name like '张%' or name like '王%';

4、查询都是湖南的学生的姓名、年龄、院系和科目及成绩--计算的就不用在前面加上表的简称

select s.name,year(now())-birth as age,s.department,c.c_name,c.grade from student as s left join score as c on s.id = c.stu_id where address like '湖南%';

你可能感兴趣的:(2020-07-30-mysql第三章作业练习)