实验5数据查询

设计性实验
1、查询Student表中95031班的所有记录的sno,Sname 和Ssex列。
SELECT Sno, Sname, Ssex FROM student065 WHERE Class = '95031';

在这里插入图片描述

2、查询教师所有的单位即不重复的Depart列。
SELECT DISTINCT Depart FROM teacher065;

在这里插入图片描述

3、查询Score表中成绩在60到80之间的所有记录。
SELECT * FROM Score065 WHERE Degree BETWEEN 60 AND 80;

在这里插入图片描述

4、查询Score表中成绩为85,86或88的记录。
SELECT * FROM Score065 WHERE Degree IN (85, 86, 88);

在这里插入图片描述

5、查询Student表中“95031”班或性别为“女”的同学记录。
SELECT * FROM student065 WHERE Class = '95031' OR Ssex = '女';

在这里插入图片描述

6、以Cno升序、Degree降序查询Score表的所有记录。
SELECT * FROM Score065 ORDER BY Cno ASC, Degree DESC;

在这里插入图片描述

7、查询课程名中的第15个字符是‘理’课程信息。
SELECT * FROM Course065 WHERE SUBSTRING(Cname, 15, 1) = '理';
8、查询Student表中不姓“王”且姓名第二字为‘君’的同学记录。
SELECT * FROM student065 WHERE Sname NOT LIKE '王%' AND SUBSTRING(Sname, 2, 1) = '君';

在这里插入图片描述

9、查询Student表中每个学生的姓名和年龄。
SELECT Sname, DATEDIFF(YEAR, Sbirthday, GETDATE()) AS Age FROM student065;

在这里插入图片描述

10、查询Student表中最大和最小的Sbirthday日期值。
SELECT MAX(Sbirthday) AS MaxBirthday, MIN(Sbirthday) AS MinBirthday FROM student065;

在这里插入图片描述

11、以班号和年龄从大到小的顺序查询Student表中的全部记录。
SELECT *, DATEDIFF(YEAR, Sbirthday, GETDATE()) AS Age FROM student065 ORDER BY Class DESC, Age DESC;

在这里插入图片描述

12、查询Student表本月过生日同学的信息,包括学号,姓名,课程号,课程名,任课教师和成绩。
SELECT s.Sno, s.Sname, c.Cno, c.Cname, t.Tname, sc.Degree
FROM student065 s 
JOIN Score065 sc ON s.Sno = sc.Sno 
JOIN Course065 c ON c.Cno = sc.Cno
JOIN teacher065 t ON t.Tno = c.Tno
WHERE MONTH(s.Sbirthday) = MONTH(GETDATE());

在这里插入图片描述

13、查询选修课程名中含有%的信息,包括学号,姓名,课程号,课程名和成绩。
SELECT s.Sno, s.Sname, c.Cno, c.Cname, sc.Degree
FROM student065 s 
JOIN Score065 sc ON s.Sno = sc.Sno 
JOIN Course065 c ON c.Cno = sc.Cno
WHERE c.Cname LIKE '%[%]%'; -- 注意这里的百分号要用方括号转义

在这里插入图片描述

14、查询选修课程名中含有’[‘或’]’的信息,包括学号,姓名,课程号,课程名和成绩。
SELECT s.Sno, s.Sname, c.Cno, c.Cname, sc.Degree
FROM student065 s 
JOIN Score065 sc ON s.Sno = sc.Sno 
JOIN Course065 c ON c.Cno = sc.Cno
WHERE c.Cname LIKE '%[%]' OR c.Cname LIKE '%]%';

在这里插入图片描述

15、查询选修课程名中含有’[‘和’]’的课程信息,包括学号,姓名,课程号,课程名和成绩。
SELECT s.Sno, s.Sname, c.Cno, c.Cname, sc.Degree
FROM student065 s 
JOIN Score065 sc ON s.Sno = sc.Sno 
JOIN Course065 c ON c.Cno = sc.Cno
WHERE c.Cname LIKE '%[%' AND c.Cname LIKE '%]%';

在这里插入图片描述

16.查询所有学生信息,包括学号,姓名,课程号,课程名,任课教师和成绩(包括没上课的学生,没有选修的课程以及没上课的教师)。
SELECT s.Sno, s.Sname, c.Cno, c.Cname, t.Tname, sc.Degree
FROM student065 s 
LEFT JOIN Score065 sc ON s.Sno = sc.Sno 
LEFT JOIN Course065 c ON c.Cno = sc.Cno
LEFT JOIN teacher065 t ON t.Tno = c.Tno;
实验小结(实验中遇到的问题及解决过程、实验中产生的错误及原因分析、实验体会和收获)

这次数据库实验真的让我体会到了从理论到实践的差距。刚开始的时候,我以为按照文档一步步来就行了,但很快我就发现自己错了。
首先就是查询条件的摸索,在计算学生年龄时,我原本想用简单的年份差来做判断,结果发现这样根本不行,特别是在跨生日的情况下。后来改用DATEDIFF函数结合CASE语句才解决了这个问题。
然后就是一些小错误告诉我的大教训,一个印象深刻的地方就是SQL语法错误。有时候因为一个小小的标点符号(比如中文逗号)导致整个查询无法运行,这种低级错误真是让人后悔。不过,正是这些小错误让我养成了更加细心的习惯,现在每输入一个字符都会再三确认。
最让我有成就感的应该就是当多表查询结果运行出来的那一个,满满当当的表格给我的那种充实感,好像代表这自己的努力就展现在眼前这些方格子里的内容,之前的学习内容在查询时大多都是一次查询的内容较少,没有那种直接冲击力,并不能体会到数据库这个课程的学习魅力在哪,感觉肉眼反而能够更快的找出需要的数据,但是这次实验涉及到了好多查询内容都是比较难检索到的内容,单凭肉眼确实无法直接检索到,这时候我就感受到了数据库的魅力,通过代码就可以得到你想要的数据,这一点大大减少了我们在检索大量数据的时候所花费的时间。这次实验真的很有成就感!!!
总的来说,这次实验虽然遇到了不少困难,但也正是这些挑战让我学到了很多书本上学不到的东西。数据库管理不仅仅是敲几行代码那么简单,它涉及到逻辑思维、细致入微的态度以及解决问题的能力。通过这次实验,我对SQL有了更深的理解,也对自己有了更多的信心。未来面对更复杂的数据库任务时,我相信自己能够更加从容应对,不再惧怕遇到的问题。这不仅仅是一次技术上的提升,更是心态上的一次成长!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值