首頁 資料庫 mysql教程 数据库实验报告

数据库实验报告

Jun 07, 2016 pm 03:57 PM
http 作者 地址 實驗 報告 資料庫

作者 : 卿笃军 原文地址:http://blog.csdn.net/qingdujun/article/details/29028363 使用SQL Server 开发服务器端应用程序 一、实验类别 综合型实验 二、实验目的 熟练掌握后台服务器端应用程序的开发。 三、实验环境 SQL Server 系列的数据库管理系统 四

作者 : 卿笃军

原文地址:http://blog.csdn.net/qingdujun/article/details/29028363

使用SQL Server 开发服务器端应用程序 一、实验类别
综合型实验
二、实验目的
熟练掌握后台服务器端应用程序的开发。
三、实验环境
SQL Server 系列的数据库管理系统
四、实验内容
对学生-课程数据库,编写存储过程,完成下面功能:
1.逐条(使用游标)浏览某个系的学生记录;
2.统计任意一门课程的成绩分布情况,即按照各分数段统计人数;
3.统计每个学生的平均成绩及排名;
4.将学生选课成绩从百分制改为等级制(即A、B、C、D、E)显示。
五、实验要求
提交源程序并标识必要的注释。保证程序能正确编译和运行,认真撰写实验报告。
六、实验过程
1.创建数据库及数据表……具体代码及创建后的结果如下图1 所示。
注:以下的3 个表,全部是可视化创建,表初始化内容如下(仿照课本输入的数值),关系
的主码加下划线表示。

学生表:Student(Sno,Sname,Ssex,Sage,Sdept)

\

课程表:Course(Cno,Cname,Ccredit)

\


学生课程表:SC(Sno,Cno,Grade)

\


2.创建存储过程1 完成……功能,具体代码及运行结果如下图R1 所示。

具体代码1:

--1.逐条(使用游标)浏览某个系的学生记录;
--DROP PROCEDURE lookDept --删除存储过程
-----------存储过程:如下----------------
CREATE PROCEDURE lookDept @dept nchar(20) --dept为参数
AS
DECLARE @sno nchar(15),@sname nchar(20),@sex nchar(2),@age int; --定义
DECLARE sp CURSOR FOR --说明游标
SELECT Sno,Sname,Ssex ,Sage FROM Student WHERE Sdept = @dept; --查询结果推入缓冲,此时不执行SELECT语句
OPEN sp; --打开游标,此时游标指向第一条记录
FETCH NEXT FROM sp INTO @sno,@sname ,@sex ,@age; --推进游标
WHILE @@fetch_status = 0 --注:= 0 表示执行成功
BEGIN
PRINT @sno+@sname+@sex+convert(nchar,@age)+@dept; --显示
FETCH NEXT FROM sp INTO @sno,@sname ,@sex ,@age; --推进游标
END
CLOSE sp; --关闭游标
DEALLOCATE sp; --删除游标
------------执行操作:如下----------------
EXEC lookDept 'CS'; --查询计算机系学生记录
登入後複製
执行结果如图R1:
\

图:R1

3.创建存储过程2 完成……功能,具体代码及运行结果如下图R2 所示。
具体代码2:

--2.统计任意一门课程的成绩分布情况,即按照各分数段统计人数;
--DROP PROCEDURE ScoreSec --删除存储过程
-----------存储过程:如下----------------
CREATE PROCEDURE ScoreSec @cname nchar(20) --cname为参数
AS
DECLARE @cno nchar(15); --定义变量
SELECT @cno=Cno --通过课程名,查找课程号
FROM Course
WHERE Cname=@cname
SELECT @cname 课程名,COUNT(CASE WHEN Grade<60 THEN 1 END) &#39;60分以下&#39;,
COUNT(CASE WHEN Grade>=60 AND Grade<70 THEN 1 END) &#39;60分-70分&#39;,
COUNT(CASE WHEN Grade>=70 AND Grade<80 THEN 1 END) &#39;70分-80分&#39;,
COUNT(CASE WHEN Grade>=80 AND Grade<90 THEN 1 END) &#39;80分-90分&#39;,
COUNT(CASE WHEN Grade>=90 THEN 1 END) &#39;90分以上&#39;
FROM SC
WHERE Cno = @cno
GROUP BY Grade;
------------执行操作:如下----------------
--EXEC ScoreSec &#39;数据库&#39;
登入後複製
执行结果如图R2:
\

图:R2

4.创建存储过程3 完成……功能,具体代码及运行结果如下图R3 所示。
具体代码3:

--3.统计每个学生的平均成绩及排名
--DROP PROCEDURE AvgRank --删除存储过程
-----------存储过程:如下----------------
CREATE PROCEDURE AvgRank
AS
SELECT Sname 姓名,Student.Sno 学号,AVG(Grade) 平均成绩
FROM SC,Student
WHERE SC.Sno = Student.Sno --名字查询
GROUP BY SC.Sno,Sname,Student.Sno --分组
ORDER BY 平均成绩DESC --降排名
------------执行操作:如下----------------
--EXEC AvgRank
登入後複製
执行结果如图R3:
\

图:R3

5.创建存储过程4 完成……功能,具体代码及运行结果如下图R4 所示
具体代码4:

--4.将学生选课成绩从百分制改为等级制(即A、B、C、D、E)显示。
--DROP PROCEDURE Rank100 --删除存储过程
-----------存储过程:如下----------------
CREATE PROCEDURE Rank100
AS
SELECT Sname 姓名,SC.Sno 学号,Cname 课程名,(CASE
WHEN Grade<60 THEN &#39;E&#39;
WHEN Grade>=60 AND Grade<70 THEN &#39;D&#39;
WHEN Grade>=70 AND Grade<80 THEN &#39;C&#39;
WHEN Grade>=80 AND Grade<90 THEN &#39;B&#39;
WHEN Grade>=90 THEN &#39;A&#39; END) 等级
FROM SC,Student,Course
WHERE SC.Sno = Student.Sno AND SC.Cno = Course.Cno --姓名,课程名查询
------------执行操作:如下----------------
--EXEC Rank100
登入後複製
执行结果如图R4:
\

图:R4

七、实验总结

这2 周来,一直忙忙碌碌于各种事物,数据库作业一直拖到今天早上才开始写。按照作业要求,踏踏实实,一步一步的,将功能全部实现了。功能实现期间,查阅了不少互联网资料,当然课本也来来回回的翻阅了好几遍,没办法,自己实在是弱的可以。期间,主要查阅的关键字SQL ,CASE, WHEN, AVG 当然还有游标。完成期间,主要遇到的问题主要是以下几个:
存储结构1:Print 不显示任何东西
解决:原来是我游标说明处的SELECT 语句写错了。
错误:

DECLARE sp CURSOR FOR --说明游标
SELECT @Sno,@Sname,@Ssex ,@Sage FROM Student WHERE Sdept = @dept; --查询结果推入缓冲,此时不执行SELECT 语句
登入後複製
正确:
DECLARE sp CURSOR FOR --说明游标
SELECT Sno,Sname,Ssex ,Sage FROM Student WHERE Sdept = @dept; --查询结果推入缓冲,此时不执行SELECT 语句
登入後複製
存储结构2:主要遇到的问题就是代码如何简化问题。我上网搜索了CASE WHEN等的用法。
主要学习到的内容:(注:以下参考eshizhan的博客园)
CASE 主要有2种表达形式
1)简单CASE函数:
CASE sex
WHEN &#39;1&#39; THEN &#39;男&#39;
WHEN &#39;2&#39; THEN &#39;女&#39;
ELSE &#39;其他&#39; END
登入後複製
2)CASE搜索函数:
CASE
WHEN sex = &#39;1&#39; THEN &#39;男&#39;
WHEN sex = &#39;2&#39; THEN &#39;女&#39;
ELSE &#39;其他&#39; END
登入後複製
存储结构3:主要是聚集函数,分组的问题。
由于我想显示姓名,学号,平均分,于是以下代码就出现了:
SELECT Sname 姓名,Student.Sno 学号,AVG(Grade) 平均成绩
登入後複製
问题出现了:分析语句没问题,但是执行语句的时候,老是提示这样的错误“选择列表中的列'Student.Sname' 无效,因为该列没有包含在聚合函数或GROUP BY 子句中。”
解决方法:
于是我分组的时候,将其全部包含进去了,机智啊。
GROUP BY SC.Sno,Sname,Student.Sno --分组
登入後複製
存储结构4:这个基本上没遇到什么问题,很容易。

设想与建议:其实,如果有时间,我想做一个界面版的查询~~~还是时间紧得很啊!!!只能等到课设的时候了。另外就是,由于我电脑上面安装的是wps,为了避免用office打开的时候,格式改变影响阅读,我将文档导成.pdf格式,便于阅读。

本报告SQL Server数据库下载:http://pan.baidu.com/s/1gdABS4N 密码:14io

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

iOS 18 新增「已復原」相簿功能 可找回遺失或損壞的照片 iOS 18 新增「已復原」相簿功能 可找回遺失或損壞的照片 Jul 18, 2024 am 05:48 AM

蘋果公司最新發布的iOS18、iPadOS18以及macOSSequoia系統為Photos應用程式增添了一項重要功能,旨在幫助用戶輕鬆恢復因各種原因遺失或損壞的照片和影片。這項新功能在Photos應用的"工具"部分引入了一個名為"已恢復"的相冊,當用戶設備中存在未納入其照片庫的圖片或影片時,該相冊將自動顯示。 "已恢復"相簿的出現為因資料庫損壞、相機應用未正確保存至照片庫或第三方應用管理照片庫時照片和視頻丟失提供了解決方案。使用者只需簡單幾步

在PHP中使用MySQLi建立資料庫連線的詳盡教學 在PHP中使用MySQLi建立資料庫連線的詳盡教學 Jun 04, 2024 pm 01:42 PM

如何在PHP中使用MySQLi建立資料庫連線:包含MySQLi擴充(require_once)建立連線函數(functionconnect_to_db)呼叫連線函數($conn=connect_to_db())執行查詢($result=$conn->query())關閉連線( $conn->close())

如何在PHP中處理資料庫連線錯誤 如何在PHP中處理資料庫連線錯誤 Jun 05, 2024 pm 02:16 PM

PHP處理資料庫連線報錯,可以使用下列步驟:使用mysqli_connect_errno()取得錯誤代碼。使用mysqli_connect_error()取得錯誤訊息。透過擷取並記錄這些錯誤訊息,可以輕鬆識別並解決資料庫連接問題,確保應用程式的順暢運作。

如何使用C++實作HTTP流傳輸? 如何使用C++實作HTTP流傳輸? May 31, 2024 am 11:06 AM

如何在C++中實現HTTP流傳輸?使用Boost.Asio和asiohttps客戶端程式庫建立SSL流套接字。連接到伺服器並發送HTTP請求。接收HTTP響應頭並列印它們。接收HTTP回應正文並列印它。

如何用 Golang 連接遠端資料庫? 如何用 Golang 連接遠端資料庫? Jun 01, 2024 pm 08:31 PM

透過Go標準庫database/sql包,可以連接到MySQL、PostgreSQL或SQLite等遠端資料庫:建立包含資料庫連接資訊的連接字串。使用sql.Open()函數開啟資料庫連線。執行SQL查詢和插入操作等資料庫操作。使用defer關閉資料庫連線以釋放資源。

如何在 Golang 中使用資料庫回呼函數? 如何在 Golang 中使用資料庫回呼函數? Jun 03, 2024 pm 02:20 PM

在Golang中使用資料庫回呼函數可以實現:在指定資料庫操作完成後執行自訂程式碼。透過單獨的函數新增自訂行為,無需編寫額外程式碼。回調函數可用於插入、更新、刪除和查詢操作。必須使用sql.Exec、sql.QueryRow或sql.Query函數才能使用回呼函數。

如何在 Golang 中將 JSON 資料保存到資料庫中? 如何在 Golang 中將 JSON 資料保存到資料庫中? Jun 06, 2024 am 11:24 AM

可以透過使用gjson函式庫或json.Unmarshal函數將JSON資料儲存到MySQL資料庫中。 gjson函式庫提供了方便的方法來解析JSON字段,而json.Unmarshal函數需要一個目標類型指標來解組JSON資料。這兩種方法都需要準備SQL語句和執行插入操作來將資料持久化到資料庫中。

如何使用C++處理資料庫連線和操作? 如何使用C++處理資料庫連線和操作? Jun 01, 2024 pm 07:24 PM

在C++中使用DataAccessObjects(DAO)函式庫連接和操作資料庫,包括建立資料庫連線、執行SQL查詢、插入新記錄和更新現有記錄。具體步驟為:1.包含必要的函式庫語句;2.開啟資料庫檔案;3.建立Recordset物件執行SQL查詢或操作資料;4.遍歷結果或依照特定需求更新記錄。

See all articles