預備實驗(選做)
實驗名稱:SQL Server 2005的安裝與系統設置
實驗目的和要求:掌握SQL Server 2005的安裝和配置方法,熟悉SQL Server的系統環境,主要是對“查詢分析器”和“企業管理器”的熟悉和使用。
實驗設備:
(1) 操作系統爲WINDOWS xp/ 2003 server的計算機一臺;
(2) SQL Server 2005標準版安裝軟件;
實驗內容和步驟:
安裝SQL Server 2005:將安裝光盤放入CD-ROM ,SQL Server 2005的安裝光盤共有2張,先打開第一張,點“服務器組件、工具、聯機叢書和示例(C)”
此步驟系統配置檢查很重要,14個項目裏面如果有1項有錯誤或者警告,整個SQL Server 2005都將不正常。
安裝SQL Server 2005:將安裝光盤放入CD-ROM,或者從互聯網下載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值,那麼插入操作將失敗。但這類視圖仍然可以用於修改和刪除操作。