1. 程式人生 > >SQL Server 2008 實驗報告 - 第五次實驗報告

SQL Server 2008 實驗報告 - 第五次實驗報告

實驗五

1.使用T-SQL語句建立資料庫
建立資料庫stuinfo_2,要求:
(1)包含三個資料檔案(MF.mdf、F1.ndf、F2.ndf)和兩個日誌檔案(L1.ldf、L2.ldf),檔案的其他屬性自定義。
(2)F1.ndf和F2.ndf放到自定義的檔案組G1中。
(3)資料庫檔案儲存到D:\SQLDATA。

CREATE DATABASE stuinfo_2 
ON 
    PRIMARY
    (
    	Name = stuinfo_2_1,
    	Filename = 'D:\SQLDATA\MF.mdf'),
    FILEGROUP G1
    (
Name = stuinfo_2_2, Filename = 'D:\SQLDATA\F1.ndf'), ( Name = stuinfo_2_3, Filename = 'D:\SQLDATA\F2.ndf') LOG ON ( Name = stuinfo_2_Log_1, Filename = 'D:\SQLDATA\L1.ldf'), ( Name = stuinfo_2_Log_2, Filename = 'D:\SQLDATA\L2.ldf')
使用T-SQL語句建立資料庫示意圖

2.使用T-SQL語句修改資料庫
向資料庫stuinfo_2中新增一個檔案組G2,再向該檔案組中新增一個數據檔案F3.ndf,檔案的屬性自定義

ALTER DATABASE stuinfo_2 ADD  FILEGROUP G2;
ALTER DATABASE stuinfo_2 ADD FILE
(
    Name = stuinfo_2_4,
    Filename = 'D:\SQLDATA\F3.ndf')
TO FILEGROUP G2;
使用T-SQL語句修改資料庫示意圖
3.使用T-SQL語句建立表及約束 (1)在stuinfo庫中建立student_2表,欄位及資料型別同student表,另外要求: ①sno列為主鍵; ②sname取值唯一且可以為空; ③ssex列的預設值設為“男”;
```sql
USE stuinfo;
CREATE TABLE student_2 ([sno] [CHAR](5) CONSTRAINT pk_sno PRIMARY KEY,
    [sname] [CHAR](10) CONSTRAINT uq_sname UNIQUE,
    [ssex] [CHAR](2) CONSTRAINT def_ssex DEFAULT '男',
    [sbirthday] [datetime],
    [sclass] [char](10)
    );
sp_help student_2; # 檢視新建表的結構
```
使用T-SQL語句建立表及約束示意圖
(2)在stuinfo建立score_2表,欄位及資料型別同score表,另外要求: ①sno列和cno列的組合為主鍵; ②degree列的取值在0到100之間; ③sno列為外來鍵,參照student表的sno列; ④cno列為外來鍵,參照course表的cno列。
   USE stuinfo;
   ALTER TABLE course ADD CONSTRAINT pr_cno PRIMARY KEY (cno); # 需要先對 course 表進行修改
   CREATE TABLE score_2 ([sno] [CHAR](5),
       [cno] [CHAR](6),
       [degree] [float](8),
       CONSTRAINT pk_sno_cno PRIMARY KEY(sno, cno),
       CHECK(degree >= 0 AND degree <= 100),
       FOREIGN KEY (sno) REFERENCES student(sno),
       FOREIGN KEY (cno) REFERENCES course(cno) 
       )
   sp_help student_2; # 檢視新建表的結構
在stuinfo建立score_2表,欄位及資料型別同score表 示意圖
4.使用T-SQL語句修改表 (1)修改teacher表,向該表中新增一列communist(是否黨員),型別為邏輯型(bit)。
ALTER TABLE teacher ADD communist BIT;
sp_help teacher; # 檢視修改後表的結構
修改teacher表,向該表中新增一列communist 示意圖
(2)修改course表,新增一列cpno(先行課),型別為char(6),設該列為外來鍵,參照自身表的cno列,新增cname列的值唯一約束。
ALTER TABLE course ADD cpno CHAR(6) FOREIGN KEY REFERENCES course(cno);
ALTER TABLE course ADD CONSTRAINT un_cname UNIQUE (cname);
sp_help course; # 檢視修改後表的結構
修改course表,新增一列cpno 示意圖

(3)刪除teacher表的communist列。

ALTER TABLE teacher  DROP COLUMN communist; # 不附截圖

5.使用T-SQL語句操作表中資料
(1)向student表中新增一條記錄(’111’,’李強’,default,’1998-01-01’,’95031’)。
(2)將score表的101號學生的3-105課程的成績改為80。
(3)刪除student表中姓名是“李強”的學生。

INSERT INTO student VALUES ('111', '李強', default, '1998-01-01', '95031');
UPDATE score SET degree = '80' WHERE sno = '101' AND cno = '3-105';
# 檢視修改後結果
SELECT * FROM student WHERE sno = '111';
SELECT degree FROM score WHERE sno = '101' AND cno = '3-105';
# 刪除‘李強’
DELETE FROM student WHERE sname = '李強'; # 刪除不附截圖
使用T-SQL語句操作表中資料 示意圖

6.使用T-SQL語句建立檢視
(1)建立“95031”班學生的檢視V-student-95031_2。

CREATE VIEW V_student_95031_2 AS 
    SELECT * FROM student WHERE sclass = '95031'; # 不附截圖

(2)建立“95031”班學生的選課檢視V-score-95031_2,包括的列為:學號、姓名、課程名、成績,並使用漢字做列名。

CREATE VIEW V_score_95031_2 AS 
    SELECT sno AS '學號', sname AS '姓名', cname AS '課程名', degree AS '成績' FROM student, score, course WHERE sclass = '95031' AND student.sno = score.sno AND score.cno = course.cno;
sp_help V_score_95031_2; # 檢視 
建立“95031”班學生的選課檢視 示意圖
(3)建立“6-166”課的選課檢視V-score-6-166_2,包括的列為:課程號、課程名、學號、姓名、成績,並使用漢字做列名。
CREATE VIEW V_score_6_166_2 AS 
    SELECT course.cno AS '課程號', cname AS '課程名', student.sno AS '學號', sname AS '姓名', degree AS '成績' FROM student, score, course WHERE score.cno = '6-166' AND student.sno = score.sno AND score.cno = course.cno;
sp_help V_score_6_166_2; # 檢視
建立“6-166”課的選課檢視 示意圖
(4)建立每個學生平均成績的檢視VS-avgdegree-1_2,包括的列為:班級、學號、姓名、平均成績,並使用漢字做列名。
CREATE VIEW VS_avgdegree_1_2 AS 
    SELECT sclass AS '班級', student.sno AS '學號', sname AS '姓名', AVG(degree) AS '平均成績' FROM student, score WHERE student.sno = score.sno GROUP BY student.sno, sclass, sname;
sp_help VS_avgdegree_1_2; # 檢視
建立每個學生平均成績的檢視 示意圖
(5)建立其平均成績高於等於80分的學生檢視VS-avgdegree-2_2,包括的列為:班級、學號、姓名、平均成績,並使用漢字做列名。
CREATE VIEW VS_avgdegree_2_2 AS 
    SELECT sclass AS '班級', student.sno AS '學號', sname AS '姓名', AVG(degree) AS '平均成績' FROM student, score WHERE student.sno = score.sno GROUP BY student.sno, sclass, sname HAVING AVG(degree) > '80';
sp_help VS_avgdegree_2_2; # 檢視
建立其平均成績高於等於80分的學生檢視 示意圖
(6)建立各門課平均成績的檢視VC-avgdegree_2,包括的列為:課程號、課程名、平均成績,並使用漢字做列名。
CREATE VIEW VS_avgdegree_2 AS 
    SELECT course.cno AS '課程號', course.cname AS '課程名', AVG(degree) AS '平均成績' FROM score, course WHERE course.cno = score.cno GROUP BY course.cno, course.cname;
sp_help VS_avgdegree_2; # 檢視
建立各門課平均成績的檢視 示意圖
(7)建立缺考學生的檢視V-student-absent_2,包括的列為:學號、姓名、課程號、課程名,並使用漢字做列名。
CREATE VIEW V_student_absent_2 AS 
    SELECT student.sno AS '學號', sname AS '姓名', course.cno AS '課程號', course.cname AS '課程名' FROM score, course, student WHERE degree is null AND course.cno = score.cno AND student.sno = score.sno;
sp_help V_student_absent_2; # 檢視
建立缺考學生的檢視 示意圖
(8)將檢視V-score-6-166_2中的成績都減去5分。
UPDATE V_score_6_166_2 SET '成績' = '成績' - '5';
SELECT * FROM V_score_6_166_2; # 顯示修改後的結果
將檢視V-score-6-166_2中的成績都減去5分 示意圖