1.根据表的结构创建以下四个表
表一. student(学生表)
属性名 | 数据类型 | 可否为空 | 注 释 |
---|---|---|---|
Sno | vchar(20) | 否 | 学号(主键) |
Sname | varchar (20) | 否 | 学生姓名 |
Ssex | varchar (20) | 否 | 学生性别 |
Sbirthday | date | 可 | 学生出生年月 |
Class | varchar (20) | 可 | 学生所在班级 |
表二. teacher(教师表)
属性名 | 数据类型 | 可否为空 | 注 释 |
---|---|---|---|
Tno | varchar (20) | 否 | 教工编号(主键) |
Tname | varchar (20) | 否 | 教工姓名 |
Tsex | varchar (20) | 否 | 教工性别 |
Tbirthday | date | 可 | 教工出生年月 |
Prof | varchar (20) | 可 | 职称 |
Depart | varchar (20) | 否 | 教工所在部门 |
表三. course(课程表)
属性名 | 数据类型 | 可否为空 | 含 义 |
---|---|---|---|
Cno | varchar (20) | 否 | 课程号(主键) |
Cname | varchar (20) | 否 | 课程名称 |
Tno | varchar (20) | 否 | 教工编号(外键) |
表四. score(成绩表)
属性名 | 数据类型 | 可否为空 | 含 义 |
---|---|---|---|
Sno | varchar (20) | 否 | 学号(外键) |
Cno | varchar (20) | 否 | 课程号(外键) |
Degree | Decimal(4,1) | 可 | 成绩 |
2.分别向以上四个表中插入如下数据
Student表:
Sno | Sname | Ssex | Sbirthday | class |
---|---|---|---|---|
108 | 曾华 | 男 | 1977-09-01 | 95033 |
105 | 匡明 | 男 | 1975-10-02 | 95031 |
107 | 王丽 | 女 | 1976-01-23 | 95033 |
101 | 李军 | 男 | 1976-02-20 | 95033 |
109 | 王芳 | 女 | 1975-02-10 | 95031 |
103 | 陆君 | 男 | 1974-06-03 | 95031 |
Teacher表:
Tno | Tname | Tsex | Tbirthday | Prof | Depart |
---|---|---|---|---|---|
804 | 李诚 | 男 | 1958-12-02 | 副教授 | 计算机系 |
856 | 张旭 | 男 | 1969-03-12 | 讲师 | 电子工程系 |
825 | 王萍 | 女 | 1972-05-05 | 助教 | 计算机系 |
831 | 刘冰 | 女 | 1977-08-14 | 助教 | 电子工程系 |
Course表:
Cno | Cname | Tno |
---|---|---|
3-105 | 计算机导论 | 825 |
3-245 | 操作系统 | 804 |
6-166 | 数字电路 | 856 |
9-888 | 高等数学 | 831 |
Score表:
Sno | Cno | Degree |
---|---|---|
103 | 3-245 | 86 |
105 | 3-245 | 75 |
109 | 3-245 | 68 |
103 | 3-105 | 92 |
105 | 3-105 | 88 |
109 | 3-105 | 76 |
101 | 3-105 | 64 |
107 | 3-105 | 91 |
108 | 3-105 | 78 |
101 | 6-166 | 85 |
107 | 6-166 | 79 |
108 | 6-166 | 81 |
3.查询Student表中的所有记录的Sname、Ssex和Class列。
- select Sname,Ssex,Class from student;
-
4.查询Score表中成绩在60到80之间的所有记录。
- select * from score where Degree>60 and Degree<80;
-
5.查询Score表中成绩为85,86或88的记录。
- select * from score where Degree in (85,86,88);
-
6.查询Student表中“95031”班或性别为“女”的同学记录。
- select * from student where Class='95031' or Ssex='女';
-
7.以Class降序查询Student表的所有记录。
- select * from student order by Class desc;
-
8.以Cno升序、Degree降序查询Score表的所有记录。
- select * from score order by Cno,Degree desc;
-
9.查询所有学生的Sname、Cno和Degree列
- select Sname,Cno,Degree
- from student
- inner join score
- on student.Sno=score.Sno;
-
10.查询所有学生的Sno、Cname和Degree列
- select s.Sno,c.Cname,sc.Degree
- from student as s
- left join score as sc
- on s.Sno=sc.Sno
- left join course as c
- on sc.Cno=c.Cno;
-
11.查询所有学生的Sname、Cname和Degree列。
- select s.Sname,c.Cname,sc.Degree
- from student as s
- left join score as sc
- on s.Sno=sc.Sno
- left join course as c
- on sc.Cno=c.Cno;
-
12.查询选修“3-105”课程的成绩高于“109”号同学成绩的所有同学的记录。
- select student.Sno,Sname,Ssex,Sbirthday,Class
- from student inner join score
- on student.Sno=score.Sno
- and
- score.Cno='3-105'
- and
- score.Degree>(select Degree from score where Sno='109' and Cno='3-105');
-
13.查询成绩高于学号为“109”、课程号为“3-105”的成绩的所有记录。
- mysql> select * from score
- -> where Degree >
- -> (select Degree from score
- -> where Sno='109' and Cno='3-105');
-
14.查询“张旭“教师任课的学生成绩。
- mysql> select sc.Sno,sc.Cno,sc.Degree from score as sc
- -> inner join course as c
- -> on sc.Cno=c.Cno
- -> inner join teacher as t
- -> on c.Tno=t.Tno
- -> where t.Tname='张旭';
-
15.查询95033班和95031班全体学生的记录
- mysql> select * from student where Class in ('95033','95031');
-
16.查询出“计算机系“教师所教课程的成绩表。
- mysql> select sc.Sno,sc.Cno,sc.Degree from score as sc
- -> inner join course as c
- -> on sc.Cno=c.Cno
- -> inner join teacher as t
- -> on c.Tno=t.Tno
- -> where t.Depart='计算机系';
-
17.查询选修编号为“3-105”课程且成绩高于选修编号为“3-245”课程的同学的Cno、Sno和Degree.
- mysql> select Cno,Sno,Degree
- -> from score a
- -> where
- -> Cno='3-105'
- -> and
- -> (select Degree from score b where Cno='3-105' and a.Sno=b.Sno)
- -> >
- -> (select Degree from score c where Cno='3-245' and a.Sno=c.Sno);
-
18.查询选修编号为“3-105“课程且成绩至少高于选修编号为“3-245”课程的同学的Cno、Sno和Degree,并按Degree从高到低次序排序。
- mysql> select Cno,Sno,Degree
- -> from score as a
- -> where
- -> Cno='3-105'
- -> and
- -> (select Degree from score as b where Cno='3-105' and a.Sno=b.Sno)
- -> >=
- -> (select Degree from score as c where Cno='3-245' and a.Sno=c.Sno)
- -> order by Degree desc;
-
19. 查询Student表中不姓“王”的同学记录。
- mysql> select * from student where Sname not like '王%';
-
20.以班号和年龄从大到小的顺序查询Student表中的全部记录。
- mysql> select * from student order by Class desc,Sbirthday;
-
21.查询“男”教师及其所上的课程。
- mysql> select Tname,Cname from teacher as t,course as c where t.Tno=c.Tno and t.
- Tsex='男';(inner join简化版)
-
22.查询和“李军”同性别的所有同学的Sname.
- mysql> select Sname from student where Ssex=(select Ssex from student where Sname='李军') and Sname not in ('李军');
-
23.查询和“李军”同性别并同班的同学Sname.
- mysql> select Sname from student where
- -> Ssex=(select Ssex from student where Sname='李军')
- -> and
- -> Class=(select Class from student where Sname='李军')
- -> and
- -> Sname not in ('李军');
-
24.查询所有选修“计算机导论”课程的“男”同学的成绩表。
- mysql> select s.Sname,c.Cname,sc.Degree
- -> from student as s
- -> inner join course as c
- -> inner join score as sc
- -> where s.Sno=sc.Sno
- -> and sc.Cno=c.Cno
- -> and c.Cname='计算机导论'
- -> and s.Ssex='男'
- -> ;
-
25.给学生表中的姓名字段添加一个唯一索引
- mysql> alter table student add unique(Sname);
-
26.查看学生表的表结构
27.将外键全部删除
查看course表的外键名:
- show create from course\G;
-
删除course表的外键:
查看score表的外键名:
删除score表的两个外键:
28.将学生李军选修的计算机导论课程成绩改为99分。
- mysql> update score set Degree=99
- -> where
- -> Sno=
- -> (select Sno from student where Sname='李军')
- -> and
- -> Cno=
- -> (select Cno from course where Cname='计算机导论');
-
29.删除教师表的主键
- alter table teacher drop primary key;
-
30.删除学生表中的学生性别字段
- alter table student drop column Ssex;
-