【数据库原理 实验报告5】数据查询的应用(连接)

上一篇:【数据库原理 实验报告4】数据查询的应用

目录

【实验目的】

【实验准备】

【实验要求】

实验心得


【实验目的】

掌握数据查询语言的使用,能独立按要求对数据库进行指定的查询操作。

【实验准备】

  1. 界面方式创建数据库student.在该数据库下完成本次实验题目。
  2. 在数据库student下,执行文件CREATETAB.sql
  1. 在数据库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;
  1. 查询选修'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;
  1. 查询所有学生的姓名及其选修课程的信息,需要返回学生姓名和课程号

截图:

代码:

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

截图:

代码:

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

截图:

代码:

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查询的练习,多思考不同查询方式的优化方法,提高自身的实操能力和问题解决能力。同时,我也会更加注重细节,培养严谨的学习态度,为后续学习更复杂的数据库知识打下坚实的基础。

总的来说,本次数据查询连接实验让我收获良多,不仅提升了实操技能,更深化了对数据库原理的理解。在今后的学习和实践中,我将把本次实验所学运用到实际中,不断提升自己的专业能力,为今后从事相关工作做好准备。

相关推荐
m0_7020365315 分钟前
mysql如何处理不走索引的OR查询_使用UNION ALL优化重写
jvm·数据库·python
代钦塔拉40 分钟前
Qt4 vs Qt5 带参数信号槽的连接方式详解
开发语言·数据库·qt
2401_8463395640 分钟前
MySQL在云环境如何选择存储类型_SSD与高性能云盘配置建议
jvm·数据库·python
zhaoyong2222 小时前
SQL如何统计每个用户的首次行为时间_MIN聚合与分组
jvm·数据库·python
2501_901006472 小时前
C#怎么实现配置热更新 C#如何在运行时动态刷新配置文件不需要重启程序【技巧】
jvm·数据库·python
m0_470857642 小时前
HTML怎么创建响应式图片备选方案_HTML srcset与sizes结构【详解】
jvm·数据库·python
lifewange2 小时前
PostgreSQL介绍
数据库·postgresql
oradh3 小时前
Oracle数据库中的Java概述
java·数据库·oracle·sql基础·oracle数据库java概述
2301_795099743 小时前
如何优化SQL中大批量数据的物理删除_分批次与间隔控制
jvm·数据库·python
2301_812539673 小时前
CSS如何引入CSS形状生成器_通过自定义属性实现图形化样式
jvm·数据库·python