《數(shù)據(jù)庫實(shí)驗(yàn)3 數(shù)據(jù)查詢》由會(huì)員分享,可在線閱讀,更多相關(guān)《數(shù)據(jù)庫實(shí)驗(yàn)3 數(shù)據(jù)查詢(4頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、實(shí)驗(yàn)三 數(shù)據(jù)查詢
[實(shí)驗(yàn)?zāi)康腯
1. 掌握SQL的單表查詢操作
2. 掌握SQL的連接查詢操作
3. 掌握SQL的嵌套查詢操作
4. 掌握SQL的集合查詢操作
[實(shí)驗(yàn)時(shí)數(shù)] 2 學(xué)時(shí)
[實(shí)驗(yàn)內(nèi)容]
本實(shí)驗(yàn)的主要內(nèi)容是:
1. 簡(jiǎn)單查詢操作。包括投影、選擇條件表達(dá),數(shù)據(jù)排序,使用臨時(shí)表等。
2. 連接查詢操作。包括等值連接、自然連接、求笛卡兒積、一般連接、外連接、內(nèi)連接、左連接、右連接和自連接等。
3. 在SQL Server查詢分析器中,使用IN、比較符、ANY或ALL和EXISTS操作符進(jìn)行嵌套查詢操作。
4. 組合查詢與統(tǒng)計(jì)查詢。
(1)分組查詢實(shí)驗(yàn)。該實(shí)驗(yàn)包括
2、分組條件表達(dá)、選擇組條件的表達(dá)方法。
(2)使用函數(shù)查詢的實(shí)驗(yàn)。該實(shí)驗(yàn)包括統(tǒng)計(jì)函數(shù)和分組統(tǒng)計(jì)函數(shù)的使用方法。
(3)組合查詢實(shí)驗(yàn)。
(4)計(jì)算和分組計(jì)算查詢的實(shí)驗(yàn)。
[實(shí)驗(yàn)方法]
1. 將查詢需求用Transact-SQL語言表示。
2. 在SQL Server查詢分析器的輸入?yún)^(qū)中輸入Transact-SQL查詢語句。
3. 設(shè)置查詢分析器結(jié)果區(qū)為Standard Execute(標(biāo)準(zhǔn)執(zhí)行)或Execute to Grid方式。
4. 發(fā)布執(zhí)行命令,查看查詢結(jié)果;如果結(jié)果不正確,進(jìn)行修改,直到正確為止。
5. 查詢分析器及使用方法。查詢分析器是在開發(fā)數(shù)
3、據(jù)庫應(yīng)用系統(tǒng)時(shí)使用最多的工具。查詢分析器的主要作用是編輯Transact-SQL,將其發(fā)送到服務(wù)器,并將執(zhí)行結(jié)果及分析顯示出來(或進(jìn)行存儲(chǔ))。查詢分析功能主要是通過測(cè)試查詢成本,判斷該查詢是否需要增加索引以提高查詢速度,并可以實(shí)現(xiàn)自動(dòng)建立索引的功能。
圖5- Error! Bookmark not defined. SQL Server 2000查詢分析器
查詢分析器的界面如圖5- Error! Bookmark not defined.所示。在查詢生成器中的左邊窗口是對(duì)象瀏覽器,其中按樹結(jié)構(gòu)列出了數(shù)據(jù)庫對(duì)象;右上方是SQL代碼區(qū)域,用于輸入SQL的查詢語句;右下方為結(jié)果區(qū),用于顯
4、示查詢結(jié)果和分析結(jié)果。對(duì)于TSQL語句的其執(zhí)行結(jié)果,在結(jié)果區(qū)中可以有4種不同的輸出形式:標(biāo)準(zhǔn)執(zhí)行將結(jié)果直接顯示的結(jié)果區(qū);網(wǎng)格執(zhí)行將結(jié)果以表格形式顯示的結(jié)果區(qū);計(jì)劃執(zhí)行顯示執(zhí)行計(jì)劃;索引分析為在結(jié)果區(qū)中顯示查詢的索引情況。上述輸出形式,可以通過菜單或按鈕選擇。
[實(shí)驗(yàn)步驟]
1.基本操作實(shí)驗(yàn)
(1)簡(jiǎn)單查詢實(shí)驗(yàn)
1)Transact-SQL語句表示下列操作,在學(xué)生選課庫中實(shí)現(xiàn)其數(shù)據(jù)查詢操作:
? 求數(shù)學(xué)系學(xué)生的學(xué)號(hào)和姓名。
? 求選修了課程的學(xué)生學(xué)號(hào)。
? 求選修C1課程的學(xué)生學(xué)號(hào)和成績(jī),并要求對(duì)查詢結(jié)果按成績(jī)的降序排列,如果成績(jī)相同則按學(xué)號(hào)的升序排列。
? 求選修課程C1且成績(jī)
5、在80~90分之間的學(xué)生學(xué)號(hào)和成績(jī),并將成績(jī)乘以系數(shù)0.8輸出。
? 求數(shù)學(xué)系或計(jì)算機(jī)系姓張的學(xué)生的信息。
? 求缺少了成績(jī)的學(xué)生的學(xué)號(hào)和課程號(hào)。
2)在圖書借閱庫中實(shí)現(xiàn)其查詢操作:將計(jì)算機(jī)類的書存人永久的計(jì)算機(jī)圖書表,將借書日期在99年以前的借閱記錄存人臨時(shí)的超期借閱表。
(2)連接查詢實(shí)驗(yàn)
用Transact-SQL語句表示,并在學(xué)生選課庫中實(shí)現(xiàn)下列數(shù)據(jù)連接查詢操作。
? 查詢每個(gè)學(xué)生的情況以及他(她)所選修的課程。
? 求學(xué)生的學(xué)號(hào)、姓名、選修的課程名及成績(jī)。
? 求選修C1課程且成績(jī)?yōu)?0分以上的學(xué)生學(xué)號(hào)、姓名及成績(jī)。
? 查詢每一門課的間接先行課(即先行課的
6、先行課)。
(3)嵌套查詢實(shí)驗(yàn)
Transact-SQL語句表示,在學(xué)生選課庫中實(shí)現(xiàn)其數(shù)據(jù)嵌套查詢操作。
? 求選修了高等數(shù)學(xué)的學(xué)生學(xué)號(hào)和姓名。
? 求C1課程的成績(jī)高于張三的學(xué)生學(xué)號(hào)和成績(jī)。
? 求其他系中比計(jì)算機(jī)系某一學(xué)生年齡小的學(xué)生(即求年齡小于計(jì)算機(jī)系年齡最大者的學(xué)生)。
? 求其他系中比計(jì)算機(jī)系學(xué)生年齡都小的學(xué)生。
? 求選修了髓課程的學(xué)生姓名。
? 求沒有選修C2課程的學(xué)生姓名。
? 查詢選修了全部課程的學(xué)生的姓名。
? 求至少選修了學(xué)號(hào)為“S2”的學(xué)生所選修的全部課程的學(xué)生學(xué)號(hào)和姓名。
(4)組合查詢與統(tǒng)計(jì)查詢實(shí)驗(yàn)
在圖書借閱庫中實(shí)現(xiàn)其查詢操作。
? 查
7、找這樣的圖書類別:要求類別中最高的圖書定價(jià)不低于全部按類別分組的圖書平均 定價(jià)的2倍。
? 求機(jī)械工業(yè)出版社出版的各類圖書的平均定價(jià),用GROUP BY表示。
? 列出計(jì)算機(jī)類圖書的書號(hào)、名稱及價(jià)格,最后求出冊(cè)數(shù)和總價(jià)格。
? 列出計(jì)算機(jī)類圖書的書號(hào)、名稱及價(jià)格,并求出各出版社這類書的總價(jià)格,最后求出全部?jī)?cè)數(shù)和總價(jià)格。
? 查詢計(jì)算機(jī)類和機(jī)械工業(yè)出版社出版的圖書。
2.提高操作實(shí)驗(yàn)
(1)按下表的格式,建立職工部門庫和職工、部門表,并向表中輸入數(shù)據(jù)。
(2)Transact-SQL語句表示職工和部門之間的內(nèi)連接、左外部連接和右外部連接,在職工部門庫中實(shí)現(xiàn)其數(shù)據(jù)內(nèi)連接和各種外查詢
8、操作。
職工表 部門表
職工號(hào)
姓名
性別
年齡
所在部門
部門號(hào)
部門名稱
電話
1010
李勇
男
20
11
11
生產(chǎn)科
566
1011
劉晨
女
19
12
計(jì)劃科
578
1012
王敏
女
22
12
13
一車間
467
1014
張立
男
21
13
14
科研所
(3) 將自設(shè)計(jì)的數(shù)據(jù)庫應(yīng)用項(xiàng)目中的分組、統(tǒng)計(jì)、計(jì)算和組合查詢,用Transact-SQL語句表示,并通過SQL Se
9、rver查詢分析器實(shí)現(xiàn)其查詢操作。
[實(shí)驗(yàn)報(bào)告要求]
1. 分別用SQL和Transact-SQL寫出實(shí)驗(yàn)操作的查詢語句,對(duì)兩種語言進(jìn)行比較。
2. 實(shí)驗(yàn)步驟和實(shí)驗(yàn)結(jié)果。
3. 實(shí)驗(yàn)中的問題和提高。
[注意事項(xiàng)]
1. 查詢結(jié)果的幾種處理方式。
2. 內(nèi)連接、左外部連接和右外部連接的含義及表達(dá)方法。
3. 輸入SQL語句時(shí)應(yīng)注意,語句中均使用西文操作符號(hào)。
4. 子句WHERE<條件>表示元組篩選條件,子句HAVING<條件>表示組選擇條件。
5. 組合查詢的子句間不能有語句結(jié)束符。
6. 子句HAVING<條件>必須和GROUP BY<分組字段>子句配合使用。
[思考題]
1. 如何提高數(shù)據(jù)查詢和連接速度。
2. 對(duì)于常用的查詢形式或查詢結(jié)果,怎樣處理好?
3. 組合查詢語句是否可以用其他語句代替,有什么不同?
4. 使用GROUP BY<分組條件>子句后,語句中的統(tǒng)計(jì)函數(shù)的運(yùn)行結(jié)果有什么不同。