数据库实例练习

1.根据表的结构创建以下四个表

表一. student(学生表)

属性名数据类型可否为空注 释
Snovchar(20)学号(主键)
Snamevarchar (20)学生姓名
Ssexvarchar (20)学生性别
Sbirthdaydate学生出生年月
Classvarchar (20)学生所在班级

表二. teacher(教师表)

属性名数据类型可否为空注 释
Tnovarchar (20)教工编号(主键)
Tnamevarchar (20)教工姓名
Tsexvarchar (20)教工性别
Tbirthdaydate教工出生年月
Profvarchar (20)职称
Departvarchar (20)教工所在部门

表三. course(课程表)

属性名数据类型可否为空含 义
Cnovarchar (20)课程号(主键)
Cnamevarchar (20)课程名称
Tnovarchar (20)教工编号(外键)

表四. score(成绩表)

属性名数据类型可否为空含 义
Snovarchar (20)学号(外键)
Cnovarchar (20)课程号(外键)
DegreeDecimal(4,1)成绩

2.分别向以上四个表中插入如下数据

Student表:

SnoSnameSsexSbirthdayclass
108曾华1977-09-0195033
105匡明1975-10-0295031
107王丽1976-01-2395033
101李军1976-02-2095033
109王芳1975-02-1095031
103陆君1974-06-0395031

Teacher表:

TnoTnameTsexTbirthdayProfDepart
804李诚1958-12-02副教授计算机系
856张旭1969-03-12讲师电子工程系
825王萍1972-05-05助教计算机系
831刘冰1977-08-14助教电子工程系

Course表:

CnoCnameTno
3-105计算机导论825
3-245操作系统804
6-166数字电路856
9-888高等数学831

Score表:

SnoCnoDegree
1033-24586
1053-24575
1093-24568
1033-10592
1053-10588
1093-10576
1013-10564
1073-10591
1083-10578
1016-16685
1076-16679
1086-16681

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;

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孜孜孜孜不倦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值