文章為作者原創,未經許可,禁止轉載。 -Sun Yat-sen University 馮興偉
實驗1.1 數據庫定義
(1)實驗目的
理解和掌握數據庫DDL語言,能夠熟練地使用SQL DDL語句創建、修改和刪除數據庫、模式和基本表。
(2)實驗內容和要求
理解和掌握SQL DDL語句的語法,特別是各種參數的具體含義和使用方法;使用SQL語句創建、修改和刪除數據庫、模式和基本表。掌握SQL語句常見語法錯誤的調試方法。
(3)實驗重點和難點
實驗重點:創建數據庫、基本表。
實驗難點:創建基本表時,為不同的列選擇合適的數據類型,正確創建表級和列級完整性約束,如列值是否允許為空、主碼和外碼等。注意:數據完整性約束,可以在創建基本表時定義,也可以先創建表然后定義完整性約束;由於完整性約束的限制,被引用的表要先創建。
(4)實驗過程
a. 創建名為university的數據庫:
b. 刪除名為university的數據庫:
c. 定義名為university的模式:
注:后續各個實驗項目基於當前創建的university數據庫
university數據庫模式由(課程專業表)course、(系表)department、(教師表)instructor、(課程安排表)section、(學生名單表)student、(學生選課表)takes和(教師上課表)teaches組成。
d. 在university 數據庫中創建上述各表,為不同的列選擇合適的數據類型以及做好表的完整性約束:
e. 在建立好各個表后,進行數據庫的刪除,插入和更新操作:
為不冗余復述,以department表為例,其余各表操作類似。
刪除操作:
插入操作:
更新數據后department表的結果:
f. 同理對其余各表進行插入數據以及更新操作,為方便后續檢查,得到各表格結果如下:
instructor表:
course表:
section表:
teaches表:
student表:
takes表:
實驗1.2 數據基本查詢
(1)實驗目的
掌握SQL程序設計基本規范,熟練運用SQL語言實現數據基本查詢,包括單表查詢、分組統計查詢和連接查詢。
(2)實驗內容和要求
針對TPC-H數據庫設計各種單表查詢SQL語句、分組統計查詢語句;設計單個表針對自身的連接查詢,設計多個表的連接查詢。理解和掌握SQL查詢語句各個子句的特點和作用,按照SQL程序設計規范寫出具體的SQL查詢語句,並調試通過。
說明:簡單地說,SQL程序設計規范包含SQL關鍵字大寫、表名、屬性名、存儲過程名等標示符大小寫混合、SQL程序書寫縮進排列等編程規范。具體內容參見參考文獻3。
(3)實驗重點和難點
實驗重點:分組統計查詢、單表自身連接查詢、多表連接查詢。
實驗難點:區分元組過濾條件和分組過濾條件;確定連接屬性,正確設計連接條件。
(4)實驗過程
a. 單表查詢(實現投影操作)
查詢教師的編號,姓名和所在系。
查詢結果:
b. 單表查詢(實現選擇操作)
查詢所有在computer science系並且工資超過70000美元的教室的姓名。
查詢結果:
c. 不帶分組過濾條件的分組統計查詢
查詢找出每個系的平均工資。
查詢結果:
d. 帶分組過濾條件的分組統計查詢
查詢平均工資超過42000美元的系及其平均工資。
查詢結果:
e. 單表自身連接查詢
查詢工資至少比Biology系某個老師工資要高的所有老師姓名
查詢結果:
f. 兩表連接查詢
查詢大學中所有講授課程的教師的名字以及所講述的所有課程標識。
查詢結果:
g. 三表連接查詢
查詢教師的名字以及他們所講授課程的名稱。
查詢結果:
實驗1.3 數據高級查詢
(1)實驗目的
掌握SQL嵌套查詢和集合查詢等各種高級查詢的設計方法等。
(2)實驗內容和要求
針對TPC-H數據庫,正確分析用戶查詢要求,設計各種嵌套查詢和集合查詢。
(3)實驗重點和難點
實驗重點:嵌套查詢。
實驗難點:相關子查詢、多層EXIST嵌套查詢。
(4)實驗過程
a. in 嵌套查詢
查詢2009年秋季和2010年春季學期同時開課的所有課程。
查詢結果:
b. 單層EXIST嵌套查詢
查詢2009年秋季和2010年春季學期同時開課的所有課程。
查詢結果:
c. FROM子句中的嵌套查詢
查詢平均工資超過42000美元的系及其平均工資。
查詢結果:
d. 由於MySQL沒有交集和差集運算,只進行集合並集的查詢
查詢2009年秋季開課,或者2010年春季開課或兩個學期都開課的所有課程。
查詢結果:
實驗1.4 數據更新
(1)實驗目的
熟悉數據庫的數據更新操作,能夠使用SQL語句對數據庫進行數據的插入、修改、刪除操作。
(2)實驗內容和要求
針對TPC-H數據庫設計單元組插入、批量數據插入、修改數據和刪除數據等SQL語句。理解和掌握INSERT、UPDATE和DELETE語法結構的各個組成成分,結合嵌套SQL子查詢,分別設計幾種不同形式的插入、修改和刪除數據的語句,並調試成功。
(3)實驗重點和難點
實驗重點:插入、修改和刪除數據的SQL。
實驗難點:與嵌套SQL子查詢相結合的插入、修改和刪除數據的SQL語句;利用一個表的數據來插入、修改和刪除另外一個表的數據。
(4)實驗過程
a. INSERT基本語句
在student表中插入一條學生記錄。
插入結果:
b. UPDATE語句
更新剛才插入的名字屬性值為我的名字拼音Feng Xingwei
更新結果:
c. DELETE基本語句
刪除剛才插入和修改過的那條編號為11111的記錄。
刪除后結果:
實驗1.5 視圖
(1)實驗目的
熟悉SQL語言有關視圖的操作,能夠熟練使用SQL語句來創建需要的視圖,定義數據庫外模式,並能使用所創建的視圖實現數據管理。
(2)實驗內容和要求
針對給定的數據庫模式,以及相應的應用需求,創建視圖、創建帶WITH CHECK OPTION的視圖,並驗證視圖WITH CHECK OPTION選項的有效性。理解和掌握視圖消解執行原理,掌握可更新視圖和不可更新視圖的區別。
(3)實驗重點和難點
實驗重點:創建視圖。
實驗難點:可更新的視圖和不可更新的視圖之區別, WITH CHECK OPTION的驗證。
(4)實驗過程
a. 創建視圖
創建一個視圖history_instructors,用於列出所有教師中那些歸屬為歷史系的教師信息
b. 使用視圖進行操作
操作結果:
c. 不帶WITH CHECK OPTION對視圖進行更新操作
操作結果:
結論:所以不加WITH CHECK OPTION時可以更新
刪除剛才加進來的記錄。
d. 帶WITH CHECK OPTION對視圖進行更新操作
刪除之前創建的不帶WITH CHECK OPTION的history_instructors視圖,重新創建帶WITH CHECK OPTION的同名視圖,並進行插入操作,代碼如下。
實驗結果:
插入操作不被允許,原因在於系名為Comp.Sci而不是History所以不允許更新,因此WITH CHECK OPTION得到驗證。