數據庫實驗4實驗報告_第1頁
數據庫實驗4實驗報告_第2頁
數據庫實驗4實驗報告_第3頁
數據庫實驗4實驗報告_第4頁
數據庫實驗4實驗報告_第5頁
已閱讀5頁,還剩9頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、精選優質文檔-傾情為你奉上淮海工學院計算機工程學院實驗報告書課程名: 數據庫原理及應用 題 目: T-SQL高級應用 班 級: 軟件132 學 號: 姓 名: 孫瑩瑩 評語:成績: 指導教師: 批閱時間: 年 月 日專心-專注-專業一 目的與要求1. 掌握復雜查詢的使用方法;2. 掌握多表連接的方法;3. 掌握SELECT語句在多表查詢中的應用。4. 掌握數據匯總、外連接查詢的使用方法;5. 掌握事務定義的一般方法二 實驗內容1 給出教材14-16的程序運行結果。2 編寫程序,查詢“1033”班的最高分的學生的學號、姓名、班號、課程號和分數。3 編寫程序,創建一個新表,包含所有學生的姓名、課程

2、名和分數,并以姓名排序。4 編寫程序,輸出每個班最高分的課程名和分數。5 在上次實驗建立的factory數據庫的基礎上,完成如下各題:l 刪除factory數據庫上各個表之間建立的關系;l 顯示各職工的工資記錄和相應的工資小計。l 按性別和部門名的所有組合方式列出相應的平均工資。l 在worker表中使用以下語句插入一個職工記錄:insert into worker values(20,陳立,女,55/03/08,1,75/10/10,4),在depart表中使用以下語句插入一個部門記錄:insert into depart values(5,設備處)。再對worker和depart表進行全外

3、連接顯示職工的職工號,姓名和部門名。然后刪除這兩個插入的記錄。l 顯示最高工資的職工的職工號、姓名、部門名、工資發放日期和工資。l 顯示最高工資的職工所在的部門名。l 顯示所有平均工資低于全部職工平均工資的職工的職工號和姓名。l 先顯示worker表中的職工人數,開始一個事務,插入一個職工記錄,再顯示worker表中的職工人數,回滾該事務,最后顯示worker表中的職工人數。三 實驗步驟刪除factory數據庫上各個表之間建立的關系的操作步驟如下: 啟動SQL Server管理控制器。 在“對象資源管理器”中展開LCB-PC服務器節點。 展開“數據庫”節點。 選中,將其展開。 展開“數據庫關系

4、圖”節點。 選中dbo.Diagram_1,右擊,在出現的快捷菜單中選擇“修改”命令,如圖5.1所示。 在數據庫關系圖中,選擇表示要從關系圖中刪除的關系的連接線(對于兩條連線均進行的操作)。 右擊關系線,從快捷菜單中選擇“從數據庫中刪除關系”命令。 出現一個消息框,提示確認刪除。單擊“是”按鈕。 在出現的對話框中單擊“是”按鈕保存所做的修改。這樣就將worker表和depart表以及worker表和salary表之間的關系刪除了。四 測試數據與實驗結果第1-14題圖第1-15題圖第1-16題圖第2題圖第3題圖第4題圖圖5.1第5-2題圖第5-3題圖第5-4題圖第5-5題圖第5-6題圖第5-7題

5、圖第5-8題圖第5-9題圖第5-10題圖五 結果分析與實驗體會在FROM子句中指定連接條件,有助于將這些連接條件與WHERE子句中的其他搜索條件分開,指定連接時建議使用這種方法。如果某個表只出現在子查詢中而不出現在外部查詢中,那么該表中的列就無法包含在輸出中(外部查詢的選擇列表)。使用EXISTS引入的子查詢在以下幾方面與其他子查詢略有不同:lEXISTS關鍵字前面沒有列名,常量或其他表達式。l由EXISTS引入的子查詢的選擇列表通常都是由星號(*)組成。由于只是測試是否存在符合子查詢中指定條件的行,所以不必列出列名。六 源碼1use schoolselect 學號,課程號,分數from sc

6、orewhere 學號 in(103,105)order by 學號compute avg(分數) by 學號go2use schoolgoselect student.班號,course.課程名,avg(score.分數)as'平均分'from student,course,scorewhere student.學號=score.學號 and course.課程號=score.課程號group by student.班號,course.課程名 with cubego3use schoolgobegin transaction Mytran insert into teache

7、r values('999','張英','男','1960/03/05','教授','計算機系')save transaction Mytran insert into teacher values('888','胡麗','男','1982/08/04','副教授','電子工程系')rollback transaction Mytran commit transaction goselect * from

8、 teachergodelete teacher where 編號='999'go4use schoolselect student.學號,student.姓名,student.班號,score.課程號,score.分數from student,scorewhere 分數 in (select max(分數) from score where 班號='1033' and student.學號=score.學號)5USE schoolgoSELECT s.姓名,c.課程名,sc.分數INTO studFROM student s,course c,score sc

9、WHERE s.學號=sc.學號 and c.課程號=sc.課程號 and sc.分數 is not nullORDER BY s.姓名SELECT * FROM studGo6USE schoolGOSELECT 班號,課程名,MAX(分數) 分數FROM (SELECT s.學號,s.姓名,s.班號,c.課程名,sc.分數 FROM student s,course c,score sc WHERE s.學號=sc.學號 AND c.課程號=sc.課程號 AND 分數 IS NOT NULL) TGROUP BY 班號,課程名ORDER BY 班號GO7USE factoryGOSELEC

10、T worker.職工號,worker.姓名,salary.工資FROM worker,salaryWHERE worker.職工號=salary.職工號ORDER BY worker.職工號,worker.姓名COMPUTE SUM(salary.工資) BY worker.職工號 GO8USE factoryGOSELECT worker.性別,depart.部門名,AVG(salary.工資) AS '平均工資'FROM worker,depart,salaryWHERE worker.職工號=salary.職工號 AND worker.部門號=depart.部門號GRO

11、UP BY worker.性別,depart.部門名 WITH CUBE GO9USE factoryGOINSERT INTO worker VALUES('20','陳立','女','55/03/08',1,'75/10/10',4)GOINSERT INTO depart VALUES(5,'設備處')GOSELECT worker.職工號,worker.姓名,depart.部門名FROM worker FULL JOIN departON(worker.部門號=depart.部門號)ORDE

12、R BY worker.職工號GODELETE FROM worker WHERE 職工號='20'GODELETE FROM depart WHERE 部門號=5GO10USE factoryGOSELECT worker.職工號,worker.姓名,depart.部門名,salary.日期,salary.工資FROM worker,depart,salaryWHERE worker.部門號=depart.部門號 AND worker.職工號=salary.職工號AND salary.工資= (SELECT MAX(工資) FROM salary)GO11USE factor

13、yGOSELECT 部門名FROM departWHERE 部門號= (SELECT 部門號 FROM worker WHERE 職工號= (SELECT 職工號 FROM salary WHERE 工資= (SELECT MAX(工資) FROM salary) ) )GO12USE factoryGOSELECT 職工號,姓名FROM workerWHERE 職工號 IN (SELECT 職工號 FROM salary GROUP BY 職工號 HAVING AVG(工資)<(SELECT AVG(工資) FROM salary) GO13USE factoryGOSET NOCOU

14、NT ON-聲明變量DECLARE dname char(10)-聲明游標DECLARE d_cursor CURSOR FOR SELECT 部門名 FROM depart WHERE 部門號= (SELECT 部門號 FROM worker WHERE 職工號= (SELECT 職工號 FROM salary WHERE 工資= (SELECT MAX(工資) FROM salary) ) )-打開游標OPEN d_cursor-提取第一行數據FETCH NEXT FROM d_cursor INTO dname-打印表標題PRINT '部門名'PRINT '-&#

15、39;WHILE FETCH_STATUS = 0BEGIN -打印一行數據 PRINT dname -提取下一行數據 FETCH NEXT FROM d_cursor INTO dnameEND-關閉游標CLOSE d_cursor-釋放游標DEALLOCATE d_cursorGO14USE factoryGOSET NOCOUNT ON-聲明變量DECLARE no int,name char(10)-聲明游標DECLARE w_cursor CURSOR FOR SELECT 職工號,姓名 FROM worker WHERE 職工號 IN (SELECT 職工號 FROM salary

16、 GROUP BY 職工號 HAVING AVG(工資)<(SELECT AVG(工資) FROM salary)-打開游標OPEN w_cursor-提取第一行數據FETCH NEXT FROM w_cursor INTO no,name-打印表標題PRINT '職工號 姓名'PRINT '-'WHILE FETCH_STATUS = 0BEGIN -打印一行數據 PRINT CAST(no AS char(8)+name -提取下一行數據 FETCH NEXT FROM w_cursor INTO no,nameEND-關閉游標CLOSE w_cursor-釋放游標DEALLOCATE w_cursorGO15USE factoryGODECLARE num intSELECT num=COUNT(*) FROM workerPRINT '原職工人數:'+CAST(num AS CHAR(3) GODECLARE num intBEGIN TRANSACTION -啟動事務-插入一個職工記錄 INSERT INTO worker VALUES(20,'陳立','女','55/03/08

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論