目录
【实验目的】
掌握数据查询语言的使用,能独立按要求对数据库进行指定的查询操作。
【实验准备】
- 界面方式创建数据库student.在该数据库下完成本次实验题目。
- 在数据库student下,执行文件CREATETAB.sql

- 在数据库student下,执行文件INSERTTAB.sql

【实验要求】
第一部分:练习第3章第3节例3.12和例3.13(P88)。
第二部分:
2 查询全体学生选课情况,即学号、姓名、课程号、成绩
截图:

代码:
sql
SELECT S.S#, S.SName, SC.C#, SC.SCORE
FROM S
JOIN SC ON S.S# = SC.S#;
3 查询成绩大于80分的学生的学号、姓名,年龄、课程号、成绩
截图:

代码:
sql
SELECT S.S#, S.SName, S.Age, SC.C#, SC.SCORE
FROM S
JOIN SC ON S.S# = SC.S#
WHERE SC.SCORE > 80;
- 查询选修'DBA'课程并且该门课程成绩在96分以上的学生姓名。
截图:

代码:
sql
SELECT S.SName
FROM S
JOIN SC ON S.S# = SC.S#
JOIN C ON C.C# = SC.C#
WHERE C.CName = 'DBA' AND SC.SCORE > 96;
5 查询选修了C1课程或C2课程学生的学号、姓名、课程号、成绩
截图:

代码:
sql
SELECT S.S#, S.SName, SC.C#, SC.SCORE
FROM S
JOIN SC ON S.S# = SC.S#
WHERE SC.C# IN ('C1', 'C2');
6 查询至少选修两门课程的学生学号 (提示:自身连接查询)
截图:

代码:
sql
SELECT S.S#
FROM S
JOIN SC ON S.S# = SC.S#
GROUP BY S.S#
HAVING COUNT(SC.C#) >= 2;
- 查询所有学生的姓名及其选修课程的信息,需要返回学生姓名和课程号
截图:

代码:
sql
SELECT S.SName, SC.C#
FROM S
LEFT JOIN SC ON S.S# = SC.S#;
- 查询所有学生的学号及其选课门数。
截图:

代码:
sql
SELECT S.S#, COUNT(SC.C#) AS Course_Count
FROM S
LEFT JOIN SC ON S.S# = SC.S#
GROUP BY S.S#;
- 利用集合操作,显示没有选修过课程的学生的学号
截图:

代码:
sql
SELECT S.S#
FROM S
EXCEPT
SELECT SC.S#
FROM SC;
实验心得
本次数据库原理课程设计实验,围绕数据查询的连接操作展开,通过实际操作练习,我不仅巩固了SQL查询语言的应用,更深刻理解了连接查询的核心原理与实际价值,也在实践中发现了自身的不足,收获颇丰。
实验开始前,我们按照要求创建了student数据库,并执行相关SQL文件完成表的创建与数据插入,为后续查询操作做好了准备。此次实验分为两部分,第一部分对教材中的实例进行练习,帮助我们快速回顾连接查询的基础语法;第二部分则是针对性的实操题目,涵盖了内连接、左连接、自身连接以及集合操作等多种查询方式,每一道题目都对应着不同的应用场景,考验我们对连接查询的灵活运用能力。
在实操过程中,我逐渐掌握了不同连接方式的区别与适用场景。内连接通过匹配两个表中的共同字段,只返回满足条件的记录,这在查询学生选课情况、成绩大于80分的学生信息等题目中发挥了重要作用。例如,查询全体学生选课情况时,通过将学生表与选课表进行内连接,精准关联学号字段,成功获取了学号、姓名、课程号和成绩等所需信息。而左连接则不同,它会返回左表中的所有记录,即使右表中没有匹配的记录也会显示,这在查询所有学生的选课信息、选课门数时尤为关键,确保了即使没有选课的学生也能被统计到,避免了数据遗漏。
本次实验中,最具挑战性的是自身连接和集合操作的应用。查询至少选修两门课程的学生学号时,起初我未能理解自身连接的思路,尝试多次后才明白,通过将选课表与自身关联,结合分组统计和筛选条件,才能准确筛选出符合要求的学生。而利用集合操作查询没有选修过课程的学生学号时,通过EXCEPT关键字排除掉有选课记录的学生,简洁高效地得到了结果,这让我意识到集合操作在数据筛选中的便捷性。
实验过程中,我也遇到了一些问题。比如在多表连接查询时,偶尔会出现字段名冲突的情况,后来通过指定表的别名(如S、SC、C),明确每个字段所属的表,成功解决了这一问题。此外,在使用GROUP BY分组统计时,也曾因忘记添加HAVING子句而无法筛选出符合条件的结果,经过反复检查和修改,逐渐掌握了分组查询的语法规范。这些问题让我明白,SQL查询虽然语法看似简单,但细节至关重要,稍有疏忽就会导致查询结果错误,必须严谨细致、认真对待每一个步骤。
通过本次实验,我不仅熟练掌握了连接查询的多种方法,更深刻认识到理论与实践相结合的重要性。课堂上学习的连接查询原理,只有通过实际操作才能真正理解和掌握,才能灵活运用到实际问题中。同时,我也意识到数据库查询在实际应用中的广泛用途,无论是学生信息管理、成绩统计,还是各类数据的筛选与分析,都离不开高效的查询操作。
此次实验也让我看到了自身的不足,比如对复杂查询的逻辑梳理不够清晰,遇到问题时解决效率有待提高。在今后的学习中,我将加强SQL查询的练习,多思考不同查询方式的优化方法,提高自身的实操能力和问题解决能力。同时,我也会更加注重细节,培养严谨的学习态度,为后续学习更复杂的数据库知识打下坚实的基础。
总的来说,本次数据查询连接实验让我收获良多,不仅提升了实操技能,更深化了对数据库原理的理解。在今后的学习和实践中,我将把本次实验所学运用到实际中,不断提升自己的专业能力,为今后从事相关工作做好准备。