數據庫實驗指導書+實驗報告(2015)

預備實驗(選做)

實驗名稱:SQL Server 2005的安裝與系統設置

 

實驗目的和要求:掌握SQL Server 2005的安裝和配置方法,熟悉SQL Server的系統環境,主要是對“查詢分析器”和“企業管理器”的熟悉和使用。

實驗設備:

(1) 操作系統爲WINDOWS xp/ 2003 server的計算機一臺;

(2) SQL Server 2005標準版安裝軟件;

實驗內容和步驟:

安裝SQL Server 2005:將安裝光盤放入CDROM ,SQL Server 2005的安裝光盤共有2張,先打開第一張,點“服務器組件、工具、聯機叢書和示例(C)

         

                                                          

                                                      

                                           

此步驟系統配置檢查很重要,14個項目裏面如果有1項有錯誤或者警告,整個SQL Server 2005都將不正常。

 

安裝SQL Server 2005:將安裝光盤放入CDROM,或者從互聯網下載SQL Server 2005 開發版安裝程序,雙擊servers目錄下的setup.exe程序,按提示進行安裝,一般需要人工進行干預的有:

 

選擇安裝類型和安裝路徑:安裝類型有:典型安裝、最小安裝、和自定義安裝。安裝路徑是指SQL Server的系統文件和數據文件的安裝位置。默認情況下“安裝類型”是典型安裝,“安裝路徑”是操作系統設定的“Program Files”文件夾。你可以自行改變,初次安裝最好不要改變他,按默認情況使用;

點擊“高級”按鈕,可以進行手工選擇:

 


配置啓動服務的帳號:有兩類用戶帳號:一類是與Windows操作系統的集成帳號,一類是混合帳號。選擇第一類帳號進行安裝;

1. 配置服務器端網絡庫:SQL Server支持多種網絡庫,這些網絡庫必須與操作系統的網絡協議共同工作,才能實現客戶機與數據庫服務器的通信。安裝完成後,可以通過操作系統的開始菜單操作:“開始”―》SQL Server”-》“數據庫服務器網絡配置”進行配置;

2. 配置客戶端網絡庫:客戶機要與數據庫服務器通信,必須安裝有與服務器網絡庫一樣的網絡庫。可以通過操作系統的開始菜單操作:“開始”―》SQL Server”-》“客戶端網絡配置”進行配置;

3. 使用SQL Server 2005管理平臺(SQL Server Management Studio,它包含了SQL Server 2000企業管理器(Enterprise Manager),以及查詢分析器(Query Analyzer)等方面的功能。(1)瞭解管理器的界面、菜單結構以及各項功能;(2)瞭解“數據庫服務器”的屬性配置;(3)瞭解“數據庫”的屬性配置;(4)初步瞭解數據庫、表、視圖、用戶、安全管理,複製等概念;(5)怎樣選擇不同的數據庫;(3)怎樣查看數據庫的結構;(3)查詢分析器的初步使用。

實驗思考:

(1) 假如服務器端網絡庫設置“TCP/IP”協議的端口爲:2866,那麼在客戶端的網絡庫中應該怎樣設置TCP/IP 端口?

(2) 管理平臺(SQL Server Management Studio)的作用是什麼?

 


實驗一 SQL數據定義

實驗名稱:SQL數據定義


實驗目的和要求:

(1)使用管理平臺(SQL Server Management Studio)用CREATE、DROP、ALTER語句創建和刪除數據庫,創建、刪除、更新基本表等。

(2)通過實驗,熟練掌握SQL數據定義語言。

(3)認真書寫實驗報告,如實填寫各項實驗內容。

實驗內容和步驟:

1利用管理平臺(SQL Server Management Studio)創建學生課程數據庫。

用鼠標單擊“開始”後,將鼠標分別指向程序/Microsoft SQL server 2005,在Microsoft SQL server 2005下單擊SQL Server Management Studio進入管理平臺;點擊工具欄上的“新建查詢”,在右邊窗口中鍵入CREATE DATABASE S_C命令並保存,文件名爲s_c.sql。用鼠標單擊任務欄的“!執行”按鈕運行該命令,這樣,S_C數據庫就建成了。


(2)利用管理平臺創建基本表student(sno,sname,ssex,sage,sdept)、course(cno,cname,ccpno,ccredit)、sc(sno,cno,grade)。在管理平臺任務欄的數據庫選爲S_C。

A.新建查詢,在窗體下鍵入如下命令:

CREATE TABLE Student (	sno   CHAR(9) PRIMARY KEY,                 
            	sname  CHAR(20) UNIQUE,
            	ssex    CHAR(2),
            	sage   SMALLINT,
            	sdept  CHAR(20)
           	); 

然後保存,文件名爲student.sql。用鼠標單擊任務欄的“!執行”按鈕運行該命令。

B.新建查詢,在窗體下鍵入如下命令:

CREATE TABLE  Course	( 	cno  CHAR(4) PRIMARY KEY,
                 	cname  CHAR(40),            
                	cpno     CHAR(4) ,               	                      
                 	ccredit  SMALLINT,
                	FOREIGN KEY (cpno) REFERENCES  Course(cno)
            	);

保存,文件名爲Course.sql,用鼠標單擊任務欄的“!執行”按鈕運行該命令。觀察結果。

C.新建查詢,在窗體下鍵入如下命令:

CREATE TABLE  SC (	sno  CHAR(9),
       	cno  CHAR(4),
       	grade    SMALLINT,
       	PRIMARY KEY (sno,cno),  
                    	FOREIGN KEY (sno) REFERENCES Student(sno),
            	FOREIGN KEY (cno) REFERENCES Course(cno)
               	);

保存,文件名爲sc.sql, 用鼠標單擊任務欄的“!執行”按鈕運行該命令。

這樣在S_C數據庫中建成了三個表:Student,Course,SC.

D.在窗口下分別鍵入DROP TABLE Student及DROP TABLE SC命令, 用鼠標單擊任務欄的“!執行”按鈕運行該命令,觀察結果。

如果先執行DROP TABLE Student 則會出現如下錯誤:

無法刪除對象'Student',因爲該對象正由一個FOREIGN KEY 約束引用。

E. 再重新運行student.sql及 sc.sql,觀察結果。

 

(3)利用查詢分析器修改student表。

   新建查詢,在查詢分析器窗體下分別鍵入如下命令:

   A.ALTER TABLE Student ADD scome DATETIME;

   B.ALTER TABLE Student ALTER COLUMN sdept VARCHAR(20);

   C.ALTER TABLE Student DROP COLUMN sage;

  運行並觀察結果。

 

(4)利用管理平臺(SQL Server Management Studio)向表中輸入數據。右鍵單擊student表,點擊“打開表”, 向表中輸入數據。用相同的方法向Course、sc表輸入數據。

 


實驗二 SQL數據查詢

實驗名稱:SQL數據查詢


實驗目的和要求:

(1)使用SQL查詢分析器用SELECT語句進行單表的數據查詢,分別使用以下方法,掌握單表的各種查詢方法:

A.選擇表中的若干元組

B. 消除取值重複的行

C. 查詢滿足單條件和多重條件的元組

D.使用通配符(%和_ ) 

E.對查詢結果排序和分組

F.使用聚合函數

(2)使用SQL查詢分析器用SELECT語句進行多表的數據查詢,分別使用以下方法,目的是掌握多表的各種查詢方法和嵌套查詢方法:

A.使用連接、多條件等:選擇多表中的若干元組

B. 使用單表自身連接。

C. 使用嵌套連接。

D.使用帶有各種謂詞的子查詢。

E.使用集合查詢。

(3)通過實驗,掌握上述查詢方法。

(4)認真書寫實驗報告,如實填寫各項實驗內容。

 

實驗內容和步驟:

1.用實驗1的方法創建數據庫、表,輸入數據。

2.在管理平臺(SQL Server Management Studio)下,新建查詢,用SELECT語句完成下列單表查詢:

(1) 查詢全體學生的詳細記錄;

              

          SELECT *
          FROM Student,Course,SC;

(2) 查詢考試成績不及格的學生的學號;

      

             SELECT sno
             FROM SC
             WHERE grade<60;

 

(3) 查信息系(IS)、數學系(MA)和計算機科學系(CS)的學生的姓名和性別;

                

SELECT sname,ssex
FROM Student
WHERE sdept='IS' OR sdept='CS' OR sdept='MA';

(4) 查所有姓劉的學生的姓名、學號和性別;

SELECT sname,sno,ssex
FROM Student
WHERE sname LIKE '劉%';
 

(5) 查 DB_Design 課程的課程號和學分;

 SELECT cno,ccredit
 FROM Course
 WHERE cname='DB_Design';

(6) 查詢選修了3號課程的學生的學號及其成績,查詢結果按分數的降序排列;

     

 SELECT sno,grade
FROM SC
WHERE cno='3'
ORDER BY grade DESC;

(7) 查詢學習1號課程的學生最高分數;      

SELECT MAX(grade)
FROM SC
WHERE cno='1' ;

                             

(8) 查詢學號爲“05001”的學生選修了多少門課程。

SELECT count(cno)
FROM SC
WHERE sno='05001';

(9) 查詢所有學生選修的課程門數。

     

SELECT count(cno)
FROM SC,Student
WHERE SC.sno=Student.sno;

     

3.在管理平臺(SQL Server Management Studio)查詢窗口下用SELECT語句完成下列多表查詢:

(1) 查詢每個學生及其選修課程的情況。

           

SELECT Student.sno,SC.cno
FROM SC,Student
WHERE SC.sno=Student.sno;

(2) 查詢選修2號課程且成績在90分以上的所有學生的學號、姓名。

       

SELECT Student.sno,sname
FROM SC,Student
WHERE SC.sno=Student.sno  AND cno='2' AND grade>90 ;


(3) 查詢每一門課的間接先修課(即先修課的先修課)。

    

(4) 使用嵌套查詢:查詢其他系中比信息系任意一個(其中某一個)學生年齡小的學生姓名和年齡。

        

SELECT sname,sage
FROM Student
WHERE sdept='MA' OR sdept='CS' OR sdept='TU'
GROUP BY sname,sage
HAVING  sage <ANY(SELECT sage
                  FROM Student
                  WHERE sdept='IS');                     
SELECT sname,sage
FROM Student
WHERE sage < ANY(SELECT sage
                 FROM Student
                  WHERE sdept='IS') AND sdept<>'IS';

(5) 使用帶有EXISTS謂詞的子查詢:查詢所有選修了1號課程的學生姓名。

   

SELECT sname
FROM   Student,SC
WHERE SC.sno=Student.sno AND cno='1';
 
SELECT sname
FROM   Student
WHERE   EXISTS(SELECT *
               FROM SC
               WHERE sno=Student.sno AND cno='1');    
       

(6) 查詢選修了全部課程的學生姓名。

     

SELECT sname
FROM  Student
WHERE NOT EXISTS (SELECT *
                  FROM Course
                  WHERE NOT EXISTS(SELECT *
                  FROM SC 
                  WHERE sno=Student.sno AND cno=Course.cno ));

(7) 使用集合查詢:查詢選修了課程1或者選修了課程2的學生。

 

(SELECT sname
FROM  Student,SC
WHERE SC.sno=Student.sno AND cno='1')
UNION
(SELECT sname
FROM  Student,SC
WHERE SC.sno=Student.sno AND cno='2');

實驗步驟略。 

提示:

SELECT語句的一般格式爲:

SELECT〈列名〉[{,〈列名〉}]

FROM〈表名或視圖名〉[{,〈表名或視圖名〉}]

[WHERE〈檢索條件〉]

[GROUP BY <列名1>[HAVING <條件表達式>]]

[ORDER BY <列名2>[ASC|DESC]];

 

實驗三 SQL數據更新

實驗名稱:SQL數據更新


實驗目的和要求:

(1)使用SQL查詢分析器用INSERT、UPDATE、DELETE語句進行數據更新。

(2)通過實驗,掌握使用SQL語言對數據更新的方法。

(3)認真書寫實驗報告,如實填寫各項實驗內容。

 

實驗內容和步驟:

(1)利用查詢分析器用INSERT語句向表中插入數據。

A.將一個新學生記錄(學號:95020;姓名:陳冬;性別:男;所在系:IS;年齡:18歲)插入到Student表中。       

INSERT Student
VALUES (95020,'陳冬','男',18,'IS');

 B.對每一個系,求學生的平均年齡,並把結果存入數據庫。

              CREATE TABLE  AVG_sage(
                                   sdept CHAR(20),
                                   avg_sage  REAL);
                                    INSERT AVG_sage
                                   SELECT sdept,AVG(sage)
                                    FROM  Student
                                   WHERE sdept IN (SELECT sdept FROM Student ) 
                                   GROUP BY sdept;
        

C.另建一個學生表Student_1,其結構與Student表結構一樣,在Student_1表中輸入元組。然後,把Student_1表的內容插入到Student表中。

     

   CREATE TABLE Student_1 (	sno   CHAR(9) PRIMARY KEY,                 
            	                sname  CHAR(20) UNIQUE,
            	                ssex    CHAR(2),
            	                sage   SMALLINT,
            	                sdept  CHAR(20)
           	            );
    INSERT INTO Student
           TABLE  Student_1;(結果不對!)(課本的語句錯誤)
 
            INSERT  INTO  Student
                       SELECT Student_1.*
                        FROM Student_1;

分別運行,觀察結果。


(2)利用查詢分析器用UPDATE語句更改表中數據。

A.將學生05001的年齡改爲22歲。

      

UPDATE Student
SET sage=22
WHERE sno=05001;

  B.將所有學生的年齡增加1歲。

UPDATE Student
SET sage=sage+1;
(7 行受影響)

C.將計算機科學系全體學生的成績置零。

       

UPDATE SC
SET grade=0
WHERE sno IN (SELECT SC.sno
                          FROM Student,SC
                    WHERE Student.sno=SC.sno AND sdept='CS');

分別運行,觀察結果。

 

(3)利用查詢分析器用DELETE語句刪除表中數據。

A.刪除學號爲95019的學生記錄。

設置了Student、SC中同時含有95019學號記錄的情況:

錯誤實例:

DELETE  FROM   * 或者 Student,SC
WHERE sno='95019'

(注意:DELETE語句只能從一個基本表中刪除數據)

DELETE  FROM   Student
WHERE sno='95019'
DELETE FROM SC
WHERE sno='95019';  
DELETE 語句與REFERENCE 約束"FK__SC__sno__03317E3D"衝突。該衝突發生於數據庫"S_C",表"dbo.SC", column 'sno'。
語句已終止。
(1 行受影響)
 因爲忽略了主外鍵的依賴關係,此種刪除順序使得只刪除了SC表中的記錄,Student表的沒有刪掉。
      
DELETE FROM SC
WHERE sno='95019'
DELETE  FROM   Student
WHERE sno='95019';

B.刪除所有的學生選課記錄。

 DELETE  FROM SC;

C.刪除計算機科學系所有學生的選課記錄。


DELETE FROM  SC
WHERE   sno  IN (SELECT SC.sno
                 FROM Student,SC
                 WHERE SC.sno=Student.sno  AND  sdept='CS');

分別運行,觀察結果。

 

實驗步驟略。

 

提示:

數據插入格式:

(1)單元組的插入

    INSERT  INTO  基本表名 [(列名錶)] VALUES(元組值)

(2)子查詢結果的插入

    INSERT  INTO  基本表名 [(列名錶)]<SELECT查詢語句>

     

數據修改格式:

UPDATE  基本表名

SET 列名=值表達式[,列名=值表達式…] 

[WHERE 條件表達式]

 

數據刪除格式:

DELETE FROM基本表名

[WHERE 條件表達式]

 


實驗四 SQL的視圖操作

實驗名稱:SQL的視圖操作


實驗目的和要求:

(1)使用SQL查詢分析器用CREATE、DROP語句創建和刪除視圖,使用INSERT、UPDATE、DELETE語句更新視圖。

(2)通過實驗,掌握使用SQL語言對SQL的視圖操作的方法。

(3)認真書寫實驗報告,如實填寫各項實驗內容。

 

實驗內容和步驟:

(1)用查詢分析器用CREATE語句建立視圖:

對於教學數據庫中基本表S、SC、C,用戶經常要用到Sno、SNAME、CNAME和GRADE等列的數據,那麼可用下列語句建立視圖:

CREATE VIEW STUDENT_GRADE  as

select STUDENT.Sno,SNAME,CNAME,GRADE from STUDENT,sc,course where STUDENT.sno=sc.sno and sc.cno=course.cno

(2)利用查詢分析器用INSERT、UPDATE、DELETE語句更新該視圖。

(3)撤銷STUDENT_GRADE視圖。

(4)建立其他視圖。

運行並觀察結果。 

 

實驗步驟略。

 

思考題:什麼情況下才能對視圖作更新操作?

提示:

視圖的創建, 創建視圖可用“CREATE VIEW”語句實現。其句法如下:

CREATE VIEW <視圖名>(列表名)

AS <SELECT 查詢語句>

 

視圖的撤銷

在視圖不需要時,可以用“DROP VIEW”語句把其從系統中撤銷。其句法如下:DROP VIEW 視圖名

 

視圖的更新語句與基本表的更新語句是一樣的。

 

(1) 若視圖是基於多個表使用聯接操作而導出的,那麼對這個視圖執行更新操作時,每次只能影響其中的一個表。

(2) 若視圖導出時包含有分組和聚合操作,則不允許對這個視圖執行更新操作。

(3) 若視圖是從一個表經選擇、投影而導出的,並在視圖中包含了表的主鍵字或某個候選鍵,這類視圖稱爲‘行列子集視圖’。對這類視圖可執行更新操作。

定義可更新視圖時加上WITH CHECK OPTION短語,表示強制在視圖上的所有數據更新語句都必須符合由select查詢語句所設置的準則。

由於視圖不一定包括表中的所有字段,所以在插入記錄時可能會遇到問題。視圖中那些沒有出現的字段無法顯式插入數據,假如這些字段不接受系統指派的null值,那麼插入操作將失敗。但這類視圖仍然可以用於修改和刪除操作。

 

發佈了26 篇原創文章 · 獲贊 9 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章