SQL练习题

1.建表

我们先不管外键、约束啥的,先把所有的表给建好!
但是主键还是要设置一下的,像id这种 我们直接给它弄成自动增长的
在这里插入图片描述
在这里插入图片描述
以此类推把剩下的表也建好!
在这里插入图片描述
在这里插入图片描述
将表全部建好之后我们可以将外键加上。
T_student表中的Classid 对应 T_class表中的cid 一个学生只属于一个教室
T_class表中的teacherid 对应 T_teacher表中的tid 一个课程就只有一个老师
T_score表中的sid 对应 T_student表中的sid 每一个成绩都对应一个学生
T_score subject 对应 T_class cid

以T_student表中的Classid 设置外键 T_class表中的cid为例子:

打开设计表-》外键 添加一个外键 (虽然名字可以随便取,但是最好用命名规则)命名规则是:
FK_ForeignTable_PrimaryTable_On_ForeignColumn
直白的翻译就是,ForeignTable在ForeignColumn列上引用了PrimaryTable的主键。
所以我们取名 FK_Tstudent_Tclass_Classid
栏位就是我们需要设置外键的列名字,所以是Classid 之后就是选择T_class表中的cid

在这里插入图片描述
表名 T_student 学生表
字段名 数据类型 说明
sid Int 学生编号
sname Nvarchar2(10) 学生姓名
gender Char(2) 性别
Classid int 班级编号

表名 T_teacher 老师表
字段名 数据类型 说明
tid Int 老师编号
tname Nvarchar2(10) 老师姓名
gender Char(2) 性别

表名 T_class 班级表
字段名 数据类型 说明
cid Int 班级编号
cname Nvarchar2(10) 班级名称
teacherid int 老师编号

表名 T_score 成绩表
字段名 数据类型 说明
scid Int 成绩编号
sid int 学生编号
subject Nvarchar2(10) 考试科目
score int 考试成绩

1、 查询T_Student表学号最大的前五位信息。
SELECT * from t_student LIMIT 5
2、 查询T_Score表中成绩在60到80之间的所有记录。
SELECT * from t_score where score<=80 AND score>=60
3、 查询T_Score表中成绩为85,86或88的记录。
SELECT * from t_score where score=85 or score=86 or score=88
4、 查询T_Student表中“2”班或性别为“女”的同学记录。
SELECT * from t_student where Classid=2 or gender = ‘女’
5、 以studentid升序、score降序查询T_Score表的所有记录。
SELECT * from t_score ORDER BY sid ASC, score DESC
6、查询T_Score表中的最高分的学生学号和科目名称。
方法1:SELECT sid,subject from t_score ORDER BY score DESC LIMIT 1
方法2:SELECT sid,subject from t_score where score = (select MAX(score) from t_score)
7、查询T_Score表中每个学生的所有科目成绩的平均分。
SELECT sid,AVG(score) from t_score GROUP BY sid
8、查询“张旭“教师任课的学生成绩。
SELECT sid,score from t_score where subject = (
SELECT cname from t_class where teacherid =
(
SELECT tid from t_teacher where tname=‘张旭’
)
)
9、查询选修某课程的同学人数多于5人的教师姓名。
教师和课程并没有关系,此题有问题!!
10、查询存在有85分以上成绩的课程Cno.
SELECT subject from t_score GROUP BY subject HAVING MAX(score) >=85
11、查询所有教师和同学的name、sex和birthday.
select tname,gender,tbirthday from teacher
union
select sname,gender,sbirthday from student;
12、查询所有“女”教师和“女”同学的name、sex和birthday.
select tname,gender,tbirthday from teacher where gender=’女’
union
select sname,gender,sbirthday from student where gender=’女’
13、查询成绩比该课程平均成绩低的同学的成绩表。
select sid,score from t_score GROUP BY subject HAVING score<AVG(score)
14、查询至少有2名男生的班号。
SELECT Classid FROM t_student
where gender=‘男’
group BY Classid
HAVING COUNT(*)>=2
15、查询T_Student表中不姓“王”的同学记录。
SELECT * FROM t_student
where sname not like ‘王%’
16、查询T_Student表中最大和最小的Sbirthday日期值。
错误!
17、查询“男”教师及其所上的课程。
错误!
18、查询最高分同学的Sno、Cno和Degree列。
SELECT * FROM t_score
where score = (SELECT MAX(score) from t_score)
19、查询和“李军”同性别的所有同学的Sname.
SELECT * FROM t_student
WHERE gender = (SELECT gender from t_student where sname = ‘李军’)
20、查询和“李军”同性别并同班的同学Sname.
SELECT * FROM t_student
WHERE gender = (SELECT gender from t_student where sname = ‘李军’)
AND Classid = (SELECT Classid from t_student where sname = ‘李军’)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值