SQL-SERVER-上機實驗.doc_第1頁
SQL-SERVER-上機實驗.doc_第2頁
SQL-SERVER-上機實驗.doc_第3頁
SQL-SERVER-上機實驗.doc_第4頁
SQL-SERVER-上機實驗.doc_第5頁
已閱讀5頁,還剩9頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

數據庫原理與應用(SQL Server)練習題 - 14 - 實驗1 數據庫操作1創建數據庫:操作1.1:創建一個test數據庫,其主數據文件邏輯名test_data,物理文件名test_data.mdf,初始大小10MB,最大尺寸為無限大,增長速度1MB;數據庫日志文件邏輯名稱為test_log,物理文件名為test_log.ldf,初始大小為1MB,最大尺寸為5MB,增長速度為10%。參考答案:create database TestON primary(name = test_data,filename = d:testtest_data.mdf,size = 5MB,maxsize = unlimited,filegrowth = 1MB)LOG ON(name = test_log,filename = d:testtest_log.ldf,size = 1MB,maxsize = 5MB,filegrowth = 10%)GO2查看數據庫屬性:操作1.2:使用T-SQL語句查看數據庫test屬性參考答案:EXEC sp_helpdb test3刪除數據庫:操作1.3:使用T-SQL語句刪除數據庫test參考答案:drop database Test實驗2 表操作1創建表:操作2.1:創建學生表:表名:student說明:學生基本信息表屬性列數據類型長度空值列約束說明st_idnVarChar9Not NullPK學生學號st_nmnVarChar8Not Null學生姓名st_sexnVarChar2Null學生性別st_birthdatetimeNull出生日期st_scoreintNull入學成績st_datedatetimeNull入學日期st_fromnChar20Null學生來源st_dpidnVarChar2Null所在系編號st_mnttinyintNull學生職務參考答案:USE testGOCREATE TABLE student(st_id nVarChar(9) primary key NOT NULL ,st_nm nVarChar(8) NOT NULL ,st_sex nVarChar(2) NULL ,st_birth datetime NULL ,st_score int NULL ,st_date datetime NULL ,st_ from nVarChar(20)NULL ,st_dpid nVarChar(2) NULL ,st_ mnt tinyint NULL)GO操作2.2:創建課程信息表:表名:couse說明:課程信息表屬性列數據類型長度空值列約束說明cs_idnVarChar4Not NullPK課程編號cs_nmnVarChar20Not Null課程名稱cs_tmintNull課程學時cs_scintNull課程學分參考答案:USE testGOCREATE TABLE couse(cs_id nVarChar(4) primary key NOT NULL ,cs_nm nVarChar(20) NOT NULL ,cs_tm int NULL ,cs_sc int NULL)GO操作2.3:創建選課表:表名:slt_couse說明:選課表屬性列數據類型長度空值列約束說明cs_idnVarChar4Not NullFK課程編號st_idnVarChar9Not NullFK學生編號scoreintNull課程成績sltdatedatetimeNull選課日期參考答案:USE testGOCREATE TABLE couse(cs_id nVarChar(4) NOT NULL ,st_id nVarChar(9) NOT NULL ,score int NULL ,sltdate datetime NULL)GO操作2.4:創建院系信息表:表名:dept說明:院系信息表屬性列數據類型長度空值列約束說明dp_idnVarChar2Not Null系編號dp_nmnVarChar20Not Null院系名稱dp_drtnVarChar8Null院系主任dt_telnVarChar12Null聯系電話參考答案:USE testGOCREATE TABLE dept(dp_id nVarChar(2) NOT NULL ,dp_nm nVarChar(20)NOT NULL ,dp_drtnVarChar(8) NULL ,dp_telnVarChar(12)NULL)GO2修改表結構:(1)向表中添加列:操作2.5:為“dept”表添加“dp_count”列(數據類型為nvarchar,長度為3,允許為空)參考答案:ALTER TABLE dept ADD dp_count nvarchar(3) NULL(2)修改列數據類型:操作2.6:修改“dept”表的“dp_count”列數據類型為int參考答案:ALTER TABLE dept ALTER COLUMN dp_count int NULL(3)刪除表中指定列:操作2.7:刪除“dept”表的“dp_count”列參考答案:ALTER TABLE dept DROP COLUMN dp_count3刪除表操作2.8:刪除“dept”表參考答案:DROP TABLE student4向表中輸入數據記錄操作2.9:分別向“student”表、“couse”表、“slt_couse”表、“dept”表中輸入數據記錄實驗3 數據完整性1空值約束( NULL )操作3.1:將student表中的st_sex列屬性更改為NOT NULL參考答案:ALTER TABLE student ALTER COLUME st_nm nVarChar(8) NOT NULL2默認值約束( DEFAULT )操作3.2:將student表中的st_from列默認值設置為“陜西省”參考答案:ALTER TABLE student ADD DEFAULT 陜西省 FOR st_from3默認值對象操作3.3:創建默認值對象df_today為當前日期,并將其綁定到slt_couse表中的sltdate列,然后取消綁定,最后刪除默認值對象df_today。參考答案:CREATE DEFAULT df_today AS Getdate( )GOEXEC sp_bindefault df_today, slt_couse.sltdateGOEXEC sp_unbindefault slt_couse.sltdateGODROP DEFAULT df_todayGO4檢查約束( CHECK )操作3.4:將slt_couse表中的score列的檢查約束設置為=0且=0 AND score= 2008操作6.4:在查詢student表080808班學生的學號、姓名、性別和入學成績SELECT st_id, st_nm, st_sex, st_score FROM studentWHERE Left(st_id,6)=0808082使用邏輯表達式表示查詢條件操作6.5:查詢student表中非11系的學生信息SELECT * FROM student WHERE NOT (st_dpid = 11)操作6.6:查詢選修了1002號課程且成績在60以下的學生學號SELECT st_id FROM slt_couseWHERE (cs_id=1002) AND (score75操作8.11:查詢選修了2門以上課程的學生學號SELECT st_id FROM slt_couseGROUP BY st_id HAVING COUNT(*)2操作8.12:明細匯總年齡20的學生,并匯總學生數量、平均年齡SELECT st_nm,DATEPART(yy,GETDATE( )-DATEPART(yy,st_birth) AS 年齡FROM studentWHERE DATEPART(yy,GETDATE()-DATEPART(yy,st_birth)20COMPUTE COUNT(st_nm),AVG(DATEPART(yy,GETDATE()-DATEPART(yy,st_birth)操作8.13:按班級明細匯總成績85分的學生,匯總學生數、均分SELECT st_nm, LEFT(st_id,6) AS 班級, st_scoreFROM studentWHERE st_score85ORDER BY 班級COMPUTE COUNT(st_nm), AVG(st_score) BY 班級實驗9 數據查詢(5)連接查詢操作9.1:用SQL Server形式連接查詢學生學號、姓名、性別及其所選課程編號SELECT a.st_id, st_nm, st_sex, cs_idFROM student a, slt_couse bWHERE a.st_id = b.st_idORDER BY a.st_id操作9.2:用ANSI形式連接查詢學生學號、姓名、性別及其所選課程編號SELECT a.st_id, st_nm, st_sex, cs_idFROM student a INNER JOIN slt_couse bON a.st_id = b.st_idORDER BY a.st_id操作9.3:用SQL Server形式連接查詢學生學號、姓名及其所選課程名稱及成績SELECT a.st_id, st_nm, cs_nm, scoreFROM student a, slt_couse b, couse cWHERE a.st_id = b.st_id AND b.cs_id = c.cs_idORDER BY a.st_id操作9.4:用ANSI形式連接查詢學生學號、姓名及其所選課程名稱及成績SELECT a.st_id, st_nm, cs_nm, scoreFROM slt_couse a INNER JOIN student b ON a.st_id = b.st_idINNER JOIN couse c ON a.cs_id = c.cs_idORDER BY b.st_id操作9.5:查詢選修了1002課程的學生學號、姓名及1001課程成績SELECT a.st_id, st_nm, scoreFROM student a,slt_couse bWHERE a.st_id = b.st_id AND b.cs_id = 1002ORDER BY b.st_id操作9.6:查詢選修了“數據結構”課程的學生學號、姓名及課程成績SELECT a.st_id, st_nm, scoreFROM student a, slt_couse b, couse cWHERE a.st_id=b.st_id AND b.cs_id=c.cs_id AND c.cs_nm=數據結構ORDER BY a.st_id操作9.7:用左外連接查詢沒有選修任何課程的學生學號、姓名SELECT a.st_id, st_nm, scoreFROM student a LEFT OUTER JOIN slt_couse b ON a.st_id = b.st_idWHERE b.cs_id IS NULLORDER BY b.st_id操作9.8:用右外連接查詢選修各個課程的學生學號SELECT b.cs_id, a.st_idFROM slt_couse a Right OUTER JOIN couse b ON a.cs_id = b.cs_idORDER BY b.cs_id實驗10 數據查詢(6)子查詢操作10.1:用子查詢對各班人數進行查詢(新增列)SELECT DISTINCT LEFT(a.st_id,6) AS 班級, 人數 = ( SELECT COUNT(st_id) FROM student b WHERE LEFT(a.st_id,6) = LEFT(b.st_id,6)FROM student a ORDER BY LEFT(a.st_id,6) ASC操作10.2:用子查詢對各課程的選課人數進行查詢(新增列)SELECT DISTINCT a.cs_id, 人數 = ( SELECT COUNT(st_id) FROM slt_couse b WHERE a.cs_id = b.cs_id)FROM slt_couse a ORDER BY a.cs_id ASC操作10.3:查詢選修了1002課程成績不及格的學生的學號、姓名和性別,并按姓名升序排序通過子查詢實現:使用IN關鍵字SELECT st_id, st_nm, st_sex FROM studentWHERE st_id IN( SELECT st_id FROM slt_couse WHERE cs_id=1002 AND score 60)ORDER BY st_nm通過子查詢實現:使用比較運算符SELECT st_id, st_nm, st_sexFROM student aWHERE ( SELECT score FROM slt_couse b WHERE a.st_id = b.st_id AND cs_id = 1002 ) ANY(SELECT score FROM slt_couse WHERE cs_id = 1002 AND LEFT(st_id,6)=070511)AND LEFT(st_id,6) 070511 AND cs_id = 1002操作10.6:查詢其它班比070511班任一學生的1002號課程成績高的學生信息(ANY/ALL)SELECT * FROM slt_couseWHERE score ALL(SELECT score FROM slt_couse WHERE cs_id = 1002 AND LEFT(st_id,6)=070511)AND LEFT(st_id,6) 070511 AND cs_id = 1002操作10.7:查詢大于等于60分且且比1003課程平均成績低的學生課程信息(BetweenAnd)SELECT * FROM slt_couse aWHERE a.score BETWEEN 60 AND ( SELECT AVG(b.score) FROM slt_couse bWHERE b.cs_id=1003 )操作10.8:查詢系主任為“趙虎”的系的所有學生信息通過子查詢實現:IN運算符SELECT * FROM student WHERE EXISTS( SELECT * FROM dept WHERE st_dpid = dp_id AND dp_drt=趙虎 )通過子查詢實現:=運算符SELECT * FROM student WHERE st_dpid =( SELECT dp_id FROM dept WHERE dp_drt=趙虎 )實驗11 數據查詢(7)數據更新與子查詢操作11.1:將070511班所有學生信息插入到表student01(st_id,st_nm,st_sex)INSERT INTO student01SELECT st_id,st_nm,st_sex FROM studentWHERE LEFT(st_id,6)=070511操作11.2:生成1002號課程的成績單student02(st_id,st_nm, score)INSERT INTO student02SELECT a.st_id,st_nm,score FROM student a, slt_couse bWHERE a.st_id=b.st_id AND cs_id=1002操作11.3:將有不及格成績的學生的st_mnt值更改為3UPDATE student SET st_mnt=3WHERE st_id IN( SELECT DISTINCT st_id FROM slt_couse WHERE score 60)操作11.4:將沒有被選修的課程的學分更改為0UPDATE couse SET cs_sc=0WHERE cs_id NOT IN( SELECT DISTINCT cs_id

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論