第一篇:年整理數(shù)據(jù)庫嵌套查詢實驗報告
實驗三:數(shù)據(jù)庫的嵌套查詢實驗
實驗?zāi)康?:
加深對嵌套查詢語句的理解。
實驗內(nèi)容:
使用 IN、比較符、ANY 或 ALL 和 EXISTS 操作符進行嵌套查詢操作。
實驗步驟:
一.使用帶 N IN 謂詞的子查詢
1.查詢與’劉晨’在同一個系學習的學生的信息: 比較 select * from student where sdept in
(select sdept from student where sname=“劉晨”)與: select * from student where sdept =
(select sdept from student where sname=“劉晨”)的異同
比較: select * from student where sdept =
(select sdept from student where sname=“劉晨”)and sname <> ‘劉晨’ 與: select S1.* from student S1, student S2 where S1.sdept=S2.sdept and S2.sname=“劉晨”的異同
2.查詢選修了課程名為’信息系統(tǒng)’ 的學生的學號和姓名: 比較 select sno, sname from student where sno in(select sno from sc where cno in
(select cno from course where cname=“信息系統(tǒng)”))與: select sno, sname from student where sno in
(select sno from sc, course where sc.cno=course.cno and cname=“信息系統(tǒng)”)
3.查詢選修了課程’1’和課程’2’的學生的學號: select sno from student where sno in(select sno from sc where cno=“1”)and sno in(select sno from sc where cno=“2”)
比較: 查詢選修了課程’1’或課程’2’的學生的 sno: select sno from sc where cno=“1” or cno=“2”
比較連接查詢:
select A.sno from sc A, sc B where A.sno=B.sno and A.cno=“1” and B.cno=“2”
二.使用帶比較運算的子查詢 4.查詢比’劉晨’年齡小的所有學生的信息: select * from student where sage<
(select sage from student where sname=“劉晨”)
三.使用帶 Any, All 謂詞的子查詢 5.查詢其他系中比信息系(IS)某一學生年齡小的學生姓名和年齡;select sname, sage from student where sage (select sage from student where sdept=“IS”)and sdept<>“IS” 6.查詢其他系中比信息系(IS)學生年齡都小的學生姓名和年齡: select sname, sage from student where sage 7.查詢與計算機系(CS)系所有學生的年齡均不同的學生學號, 姓名和年齡: select sno,sname,sage from student where sage<>all(select sage from student where sdept=“CS”) 四.使用帶 s Exists 謂詞的子查詢和相關(guān)子查詢 8.查詢與其他所有學生年齡均不同的學生學號, 姓名和年齡: select sno,sname,sage from student A where not exists(select * from student B where A.sage=B.sage and A.sno<>B.sno) 9.查詢所有選修了 1 號課程的學生姓名: select sname from student where exists(select * from sc where sno=student.sno and cno=“1”) 10.查詢沒有選修了 1 號課程的學生姓名: select sname from student where not exists(select * from sc where sno=student.sno and cno=“1”) 11.查詢選修了全部課程的學生姓名: SQL Server 中: select sname from student where not exists(select * from course where not exists(select * from sc where sno=student.sno and cno=course.cno)) 11.查詢至少選修了學生 95002 選修的全部課程的學生的學號: SQL Server 中: select distinct sno from sc A where not exists (select * from sc B where sno=“95002”and not exists(select * from sc C where sno=A.sno and cno=B.cno)) 12.求沒有人選修的課程號 cno 和 cnamecname: select cno,cname from course C where not exists(select * from sc where sc.cno=C.cno) 13*.查詢滿足條件的(sno,cno)對, 其中該學號的學生沒有選修該課程號 cno的課程 SQL Server 中: select sno,cno from student,course where not exists(select * from sc where cno=course.cno and sno=student.sno) 14*.查詢每個學生的課程成績最高的成績信息(sno,cno,grade): select * from sc A where grade=(select max(grade)from sc where sno=A.sno) 思考: 如何查詢所有學生都選修了的課程的課程號 cno? select cno from sc group by cno having count(*)=(select count(*)from student) 實驗五 數(shù)據(jù)庫的嵌套查詢實驗 1、實驗?zāi)康?/p> 本實驗的目的是使學生進一步掌握SQL Server查詢分析器的使用方法,加深SQL語言的嵌套查詢語句的理解 2、實驗時數(shù) 2學時 3、實驗內(nèi)容 本實驗的主要內(nèi)容是:在SQL Server查詢分析器中使用IN、比較符、ANY或ALL和EXISTS操作符進行嵌套查詢操作。 具體完成以下例題。將它們用SQL語句表示,在學生數(shù)據(jù)庫中實現(xiàn)其數(shù)據(jù)嵌套查詢操作。 1、查詢選修了高等數(shù)學的學生學號和姓名 select Sno,Sname from Student where Sno in(select Sno from SC,Course where SC.Cno=Course.Cno and Cname='數(shù)學') 2、查詢1號課程的成績高于劉晨的1號課程成績的學生學號和成績 select SC.Sno,Grade from SC,Student where Cno='1' and SC.Sno=Student.Sno and Grade>all(select Grade from SC,Student where SC.Sno=Student.Sno and Sname='劉晨') 3、查詢其他系中比cs系某一學生年齡小的學生(即年齡小于計算機系年齡最大者的學生)select * from Student where Sdept!='cs' and Sage 4、查詢其他系中比cs系所有學生年齡都小的學生 select * from Student where Sdept!='cs' and Sage 5、查詢選修了2號課程的學生姓名 select Sname from Student where Sno in(select Student.Sno from SC,Student where SC.Sno=Student.Sno and Cno='2') 6、查詢沒有選修2號課程的學生姓名 elect Sname from Student where exists(select SC.Sno from SC,Student where Cno!='2' group by SC.Sno) 7、查詢選修了全部課程的學生姓名 Select * from SC where Cno=all(select Cno from Course) 8、求至少選修了學號為“00215122”的學生所選修全部課程的學生學號和姓名 select Sno,Sname from Student where Sno in(select Student.Sno from Student,SC where Student.Sno=SC.Sno and Cno=any(select Cno from SC where Sno='00215122')) 4、實驗方法 將查詢需求用SQL語言表示:在SQL Server查詢分析器的輸入?yún)^(qū)中輸入SQL查詢語句:設(shè)置查詢分析器的結(jié)果區(qū)為Standard Execute(標準執(zhí)行)或Execute to Grid(網(wǎng)格執(zhí)行)方式;發(fā)布執(zhí)行命令,并在結(jié)果區(qū)中查看查詢結(jié)果;如果結(jié)果不正確,要進行修改,直到正確為止。 5、實驗心得體會 本次實驗還是進行查詢操作,只是在第四次試驗的基礎(chǔ)上加入了嵌套,嵌套查詢是在我們以后進行軟件開發(fā)涉及數(shù)據(jù)庫常用的查詢操作,通過實驗有助于我們對嵌套查詢的理解,對我們熟練的使用SQL查詢語句進行查詢操作有很大幫助。 數(shù)據(jù)庫應(yīng)用技術(shù)實驗報告 查詢 姓 名: 學 號: 班 級: 指導教師: ****年**月**日1 實驗?zāi)康?/p> 掌握選擇查詢、參數(shù)查詢、交叉表查詢、操作查詢、SQL查詢的創(chuàng)建。實驗總體要求 根據(jù)題目選擇合適的方法創(chuàng)建查詢,可以使用查詢向?qū)А⒉樵冊O(shè)計視圖和SQL命令。實驗步驟可以粘貼查詢設(shè)計視圖截圖,也可粘貼SQL命令。實驗內(nèi)容 1、創(chuàng)建查詢CX1,查找有超期圖書的讀者的借書證號、姓名、圖書編號、圖書名稱,借閱日期,超期天數(shù)(以當前時間為準,借書時間超過90天為超期)。 2、創(chuàng)建查詢CX2,統(tǒng)計每個出版社出版的圖書的數(shù)量、圖書的平均定價。 3、創(chuàng)建查詢CX3,查找定價低于圖書平均定價的圖書的圖書編號、圖書名稱、作者、出版社、定價。 4、創(chuàng)建更新查詢CX4,將“圖書書目表”的“是否借出”字段根據(jù)“借閱登記表”中讀者的借閱情況填入正確的值。 5、創(chuàng)建生成表查詢CX5,查找從未有讀者借閱的圖書的圖書編號、圖書名稱、作者、出版社,生成的表名為“未借出過圖書”。 6、為“借書證表”增加一字段,字段名為性別、文本型、字段大小為1。創(chuàng)建查詢CX6,根據(jù)身份證號的第17位輸入性別字段的值。(第17位偶數(shù)是女,奇數(shù)為男) 7、創(chuàng)建交叉表查詢CX7,根據(jù)輸入的出版社參數(shù)值,顯示該出版社每種類別的圖書的數(shù)量。(出版社為行標題,類別號為列標題) 8、創(chuàng)建查詢CX8,查找借出次數(shù)最多的圖書的編號、圖書名稱、作者、出版社。 9、創(chuàng)建查詢CX9,將借出次數(shù)最多的圖書的編號、圖書名稱、作者、出版社追加到“未借出過圖書”表中。實驗步驟 1、CX1的SQL命令為: SELECT 借書證表.借書證號, 借書證表.姓名, 圖書書目表.圖書編號, 圖書書目表.圖書名稱, 借閱登記表.借閱日期, Date()-[借閱日期] AS 超期天數(shù) FROM 圖書書目表 INNER JOIN(借書證表 INNER JOIN 借閱登記表 ON 借書證表.借書證號 = 借閱登記表.借書證號)ON 圖書書目表.圖書編號 = 借閱登記表.圖書編號 WHERE(((Date()-[借閱日期])>90)AND((借閱登記表.歸還日期)Is Null)); CX1的查詢結(jié)果為: 2、CX2的設(shè)計視圖為: CX2的查詢結(jié)果為: SQL:SELECT 圖書書目表.出版社,count(圖書書目表.出版社)as 數(shù)量,avg(圖書書目表.定價)as平均定………………………….roup by 圖書書目表.出版社; 3、CX3的SQL命令為: CX3的查詢結(jié)果為: 4、CX4的SQL命令為: UPDATE 圖書書目表 SET 是否借出 = 1 WHERE………………………….圖書書目表.圖書編號=借閱登記表.圖書編號 and 借閱登記表.歸還日期 is null);CX4的查詢結(jié)果為: 5、CX5的SQL命令為: SELECT 圖書編號, 圖書名稱, 作者, 出版社 INTO 未借出過圖書 ………………………….from 借閱登記表 where 圖書書目表.圖書編號=借閱登記表.圖書編號);CX5的查詢結(jié)果為: 6、CX6的SQL命令為: UPDATE 借書證表 SET 性別 = Mid(身份證號,17,1);CX6的查詢結(jié)果為: 7、CX7的SQL命令為: TRANSFORM Count(圖書書目表.圖書編號)AS 圖書編號之計數(shù) SELECT ………………………….目表.圖書編號)AS [總計 圖書編號] FROM 圖書書目表 GROUP BY 圖書書目表.出版社 PIVOT 圖書書目表.類別號;CX7的查詢結(jié)果為: 8、CX8的SQL命令為: SELECT 圖書編號, 圖書名稱, 作者, 出版社 FROM 圖書書目表 WHERE 圖書編號=(SELECT TOP 1 圖書編號 ………………………….ORDER BY Count(圖書編號)DESC);CX8的查詢結(jié)果為: 9、CX9的SQL命令為: INSERT INTO 未借出過圖書(圖書編號, 圖書名稱, 作者, 出版社)SELECT 圖書編號, 圖書名稱, 作者, 出版社 ………………………….SELECT TOP 1 圖書編號 FROM 借閱登記表 GROUP BY 借閱登記表.圖書編號 ORDER BY Count(圖書編號)DESC 5);CX9的查詢結(jié)果為: 5評語和得分 實驗一 PowerDesigner 的 CDM 應(yīng)用 1:實驗?zāi)康?/p> 使用PowerDesinger進行數(shù)據(jù)庫概念模型設(shè)計,掌握CDM中的實體、實體屬性、實體與實體之間聯(lián)系的操作方法。2:實驗內(nèi)容 建立一個“實驗一練習”命名的Conceptual Data Model(CDM)文件,其中應(yīng)包括的實體、實體的屬性及實體之間的聯(lián)系。3:實驗結(jié)果 4.實驗心得 初次接觸數(shù)據(jù)庫原理實驗,相對來說還是比較陌生,但老師講解還相對比較清楚,并且實驗報告寫的十分清楚,只是遇到多建立了一個實體而無法刪除的問題,通過同學的幫助也解決了,相對來說第一次實驗還是比較順利的。 實驗二 PowerDesigner 的 PDM 應(yīng)用 1.實驗?zāi)康?/p> 用PowerDesinger的工具將CDM生成PDM過程,熟悉PDM工作區(qū),為生成數(shù)據(jù)庫中的物理的表打下基礎(chǔ)。完成這個實驗后,應(yīng)該能夠了解從CDM到PDM的轉(zhuǎn)換過程,熟悉PowerDesinger的PDM工作區(qū),使用工具選項板進行PDM對象設(shè)計。 2.實驗內(nèi)容 從CDM生成PDM,設(shè)計結(jié)束后,利用PowerDesigner的“生成數(shù)據(jù)庫”功能,產(chǎn)生數(shù)據(jù)庫中各數(shù)據(jù)對象的定義,再運行MySQL的命令行客戶端軟件,打開test數(shù)據(jù)庫,運行crebas.sql,同時進行中英文的轉(zhuǎn)換,最后運行show tables命令查看表。 3.實驗結(jié)果 4.實驗心得 經(jīng)過本次實驗,學會了用PowerDesinger的工具將CDM生成PDM過程,并且利用crebas.sql進行中英文的轉(zhuǎn)換,最后利用show tables命令查看表,受益匪淺。 實驗 三Navicat for MySQL的使用和SQL語言數(shù)據(jù)定義語言DDL 1.實驗?zāi)康?/p> 了解Navicat for MySQL的啟動,熟悉如何在Navicat for MySQL下配置數(shù)據(jù)庫聯(lián)接。了解DDL語言的CREATE、DROP、ALTER對表、索引、視圖的操作,學會在Navicat for MySQL中用DDL語言進行對表、索引、視圖的增加、刪除和改動 2.實驗內(nèi)容 1.啟動Navicat for MySQL。 2.在MySQL–新建連接中完成連接參數(shù)配置,并完成連接測試和保存連接參數(shù)。3.查看mysql數(shù)據(jù)庫的help_category表的定義、表中數(shù)據(jù)與索引、完整性約束等。4.查看mysql數(shù)據(jù)庫的其它數(shù)據(jù)庫對象,如視圖、索引、存儲過程、函數(shù)、觸發(fā)器。5.在Navicat for MySQL中打開查詢,新建查詢,運行簡單的SQL語句,如select * from help_keyword where help_keyword_id<=3;觀察下結(jié)果。3.實驗結(jié)果 4.實驗心得 使用navicat for MySQL連接數(shù)據(jù)庫的時候,不能正常連接到數(shù)據(jù)庫,出現(xiàn)“access denied for user’root@’localhost”的錯誤提示,經(jīng)過查找發(fā)現(xiàn)是MySQL沒有正確安裝,重裝之后就可以正常的訪問數(shù)據(jù)庫,在本次實驗中也學會了Navicat for MySQL的基礎(chǔ)的查詢使用以及簡單的SQL語句的運行。 實驗 四 SQL語言數(shù)據(jù)定義語言DDL 1:實驗?zāi)康?/p> 本次實驗了解SQL語言中DDL語言的CREATE、DROP、ALTER對表、索引、視圖的操作,掌握在Navicat for MySQL中用DDL語言進行對表、索引、視圖的增加、刪除和改動。掌握使用SQL語句增加或刪除約束,加深對完整性概念的理解,達到靈活應(yīng)用的目的。掌握使用SQL語句定義和刪除同義詞。2:實驗原理 在 Navicat for MySQL 中使用 CREATE 命令完成對表、索引、視圖、同義詞 的創(chuàng)建,使用 DROP 命令完成對表、索引、視圖、同義詞的刪除,使用 ALTER 命 令對表結(jié)構(gòu)進行修改及完整性約束的增加、刪除。 3:實驗代碼及結(jié)果 相應(yīng)SQL語句為: CREATE TABLE NewTable(studentid varchar(10)NOT NULL , name varchar(20)NOT NULL , sex varchar(2)NOT NULL , age integer NOT NULL , Fee decimal(10,2)NULL , address varchar(50)NULL , memo varchar(300)NULL , PRIMARY KEY(studentid)); 截圖如下: 3.用Create Table語句建表CourseAa,相應(yīng)的SQL語句為: CREATE TABLE CourseAa(Aa1 Varchar(20), Aa2 INTEGER, Aa3 decimal(10)); 截圖如下: 5.用Create Table語句建表ChooseBb 相應(yīng)的SQL語句如下: CREATE TABLE ChooseBb(Bb1 VARCHAR(30), Bb2 INTEGER, Bb3 DECIMAL(6)); 6.用Drop Table語句刪除表CourseAa,相應(yīng)的SQL語句如下: Drop table CourdeAa; 7.用Alter Table語句更新表ChooseBb,添加一個屬性名Bb4,類型Varchar,長度20,完整性約束設(shè)為非空值,缺省值設(shè)為字符“系統(tǒng)測試值”,相應(yīng)的SQL語句如下: ALTER TABLE choosebb ADD Bb4 VARCHAR(30)NOT NULL; 8.用Alter Table語句更新表ChooseBb,添加一個屬性名Bb5,類型Varchar, 長度10,完整性約束設(shè)為主碼。完成后,表ChooseBb的設(shè)計如下所示。相應(yīng)的SQL語句如下: ALTER TABLE choosebb ADD Bb5 VARCHAR(30)PRIMARY KEY; 9.用Create View語句建立一個視圖View_Choosebb,生成的視圖屬性名(View_bb1,View_bb2,view_bb3), 其中View_bb1對應(yīng)于基表ChooseBb的Bb1、View_bb2對應(yīng)于基表ChooseBb的Bb4、view_bb3對應(yīng)于基表ChooseBb的Bb5。完成后,視圖View_Choosebb的設(shè)計如下所示。 相應(yīng)的SQL語句如下: CREATE VIEW View_Choosebb AS SELECT Bb4 AS View_bb1,View_bb2 FROM chooseBb;CREATE VIEW View_Choosebb AS SELECT Bb5 AS View_bb3 FROM chooseBb;10.用Drop View語句刪除視圖View_Choosebb。相應(yīng)的SQL語句如下: DROP VIEW View_choosebb;11.用Create Index語句對表ChooseBb的Bb2屬性建立一個升序索引,索引名Index_bb2。用Create Index語句對表ChooseBb的Bb4屬性建立一個降序索引,索引名Index_bb4。相應(yīng)的SQL語句如下: CREATE INDEX Index_bb2 ON ChooseBb(Bb4 DESC);12.用Drop Index語句刪除索引Index_bb2。相應(yīng)的SQL語句如下: DROP INDEX Index_bb2 ON ChooseBb; 4:實驗中遇到的問題及心得體會 1、用Drop Table語句刪除表CourseAa的時候,在SQL瀏覽框中輸入語句并運行,發(fā)現(xiàn)左邊項目欄中還是有CourseAa表的存在,但是確打不開CourseAa表,弄了很長時間,也不知道是什么情況,最后嘗試刷新頁面之后,發(fā)現(xiàn)語句運行正確,CourseAa表成功刪除。 2、由于理論課時查詢語言之學到了表的查詢,到后面實驗中涉及視圖的建立及查詢,也不清楚是怎么回事,而且由于對查詢語句的不熟悉,實驗過程中進行緩慢,視圖的部分是課下看書慢慢寫的,沒有截圖。 通過這次實驗,初步了解了SQL語言中DDL語言的CREATE、DROP、ALTER對表、索引、視圖的操作,掌握在Navicat for MySQL中用DDL語言進行對表、索引、視圖的增加、刪除和改動。掌握使用SQL語句增加或刪除約束。因為實驗過程中對這些語句的不熟悉耽誤課很長時間,還需課下多下工夫多看、多寫。 實驗五 SQL語言數(shù)據(jù)操縱語言DML 1:實驗?zāi)康?/p> SQL 語言的數(shù)據(jù)操縱功能通過 DML(數(shù)據(jù)維護語言)實現(xiàn)。DML 包括數(shù)據(jù)查詢 和數(shù)據(jù)更新兩種數(shù)據(jù)操縱語句。其中,數(shù)據(jù)查詢指對數(shù)據(jù)庫中的數(shù)據(jù)查詢、統(tǒng)計、分組、排序等操作;數(shù)據(jù)更新指數(shù)據(jù)的插入、更新和刪除等數(shù)據(jù)維護操作。 本次實驗了解 DML 語言的 INSERT、UPDATE、DELETE 等數(shù)據(jù)維護語言,掌握 在 Navicat for MySQL 中用 DML 語言的 INSERT、UPDATE、DELETE 對表進行數(shù)據(jù) 插入、更新和刪除。 2實驗內(nèi)容 在 Navicat for MySQL 中使用 INSERT 語句向表中插入數(shù)據(jù)。使用 UPDATE 語句更新(修改)表中已有數(shù)據(jù)。使用 DELETE 語句刪除表中數(shù)據(jù)。 3:實驗代碼及結(jié)果 1、用Create Table語句建立test表,其語句和截圖如下所示; CREATE TABLE `NewTable`(`Name` varchar(20)NOT NULL , `Age` integer NULL , `Score` numeric(10,2)NOT NULL , `Address` varchar(60)NULL); 2、繼續(xù)用Create Table語句建立test_temp表,其語句同1。 3、用INSERT語句對表test_temp,插入如實驗報告中的三條記錄,其插入語句和截圖如下: INSERT INTO test_temp VALUES('鄭七',21,'490.50','重郵宿舍11-2-1');INSERT INTO test_temp VALUES('張八',20,'560.00','南福苑3-3-3');INSERT INTO test_temp VALUES('王九',10,'515.00','學生新區(qū)19-7-1'); 4、用INSERT INTO…SELECT…FROM語句,將test_temp表中的數(shù)據(jù),插入到test中,其語句及其截圖如下: INSERT INTO test SELECT * FROM test_temp; 5、用UPDATE語句將test表中年齡小于20的數(shù)據(jù),將其成績更新為原來的成績加5分,其語句和截圖如下: UPDATE test SET Score=Score+5 WHERE Age<=20; 6用UPDATE語句將test表中居住在南福苑所有的學生年齡減少1歲,其語句和截圖如下:、UPDATE test SET Age=Age-1 WHERE Address Like '南福苑%'; 7、用DELETE語句將test表中年齡大于等于21 并且成績大于等于500的學生數(shù)據(jù)刪除,其語句和截圖如下: DELETE FROM test WHERE Score<=500 AND Age>=21; 8、用DELETE語句將test表中成績小于550并且居住在重郵宿舍的學生數(shù)據(jù)刪除,其語句和截圖如下: DELETE FROM test WHERE Score<=550 AND Address LIke'重郵宿舍%'; 4實驗心得 這次實驗從實驗原理還是實驗操作來說還是相對簡單的,但越是對簡單的是就越容易犯迷糊,這次件表命名給了我很多啟示,以后對細節(jié)還是要十分注意的。 實驗六 SQL語言數(shù)據(jù)查詢語言DQL 1:實驗?zāi)康?/p> 本次實驗了解 SQL 語言的 SELECT 語句對數(shù)據(jù)的查詢,學會在 Navicat for MySQL 中用 SELECT 語句對表中的數(shù)據(jù)進行簡單查詢、連接查詢、嵌套查詢和組 合查詢。2:實驗原理 在 Navicat for MySQL 中使用 SELECT 語句從表中查詢數(shù)據(jù)、統(tǒng)計數(shù)據(jù)及對 數(shù)據(jù)進行分組和排序等操作。3:實驗代碼及結(jié)果 1.用 Create Table 建立 Student 表: 2.用 Create Table 建立 Course 表: 3.用 Create Table 建立 Choose 表: 4.用 INSERT 語句向 Student 表中插入 3 個元組: 5.用 INSERT 語句向 Course 表中插入 3 個元組: 6.用 INSERT 語句向 Choose 表中插入 7 個元組: 7.用 SELECT 語句,查詢計算機學院學生的學號和姓名。 8.用 SELECT 語句的 between?and?表示查詢條件,查詢年齡在 20~23 歲的學 生信息。 9.用 SELECT 語句的 COUNT()聚集函數(shù),統(tǒng)計 Student 表中學生總?cè)藬?shù)。 10.分別用 SELECT 語句的 max()、min()、sum()、avg()四個聚集函數(shù),計算 Choose 表中 C1 課程的最高分、最低分、總分、平均分。max(): Min(): Sum(); avg(): 11.用 SELECT 語句對空值(NULL)的判斷條件,查詢 Course 表中先修課稱編號為 空值的課程編號和課程名稱。 12.用 SELECT 語句的連接查詢,查詢學生的學號、姓名、選修的課程名及成績。 13.用 SELECT 的存在量詞 EXISTS,查詢與“張三”在同一個學院學習的學生信 息。 14.用 SELECT 語句的嵌套查詢,查詢選修 C1 課程的成績低于“張三”的學生的 學號和成績。 15.用 SELECT 語句的組合查詢(UNION),查詢選修了 C1 課程或者選修了 C3 課程 的學生學號。 16.用 SELECT 語句的組合查詢(UNION)與 DISTINCT 短語,查詢選修了 C1 課程或 者選修了 C3 課程的學生學號,并取消重復(fù)的數(shù)據(jù)。 4.實驗心得 本次實驗室相對于前幾次來說比較困難的一次,因為語句剛學過,下去也沒有及時去練習,對于很多還是比較困難,在本次實驗中通過練習,讓我了解 SQL 語言的 SELECT 語句對數(shù)據(jù)的查詢,學會在 Navicat forMySQL 中用 SELECT 語句對表中的數(shù)據(jù)進行簡單查詢、連接查詢、嵌套查詢和組合查詢。課下時間也會多多練習SQl語句。 實驗七 MYSQL應(yīng)用開發(fā)環(huán)境的建立 1:實驗?zāi)康?/p> 通過在Windows平臺下,搭建Apache Httpd Web服務(wù)器,PHP腳本支持,訪問MySQL數(shù)據(jù)庫等,學習了解MySQL應(yīng)用開發(fā)環(huán)境的建立過程。本次實驗通過安裝Apache HTTD Server 2.2、PHP 5.3.28,配置httpd.conf和PHP.ini文件,完成MySQL的PHP應(yīng)用開發(fā)環(huán)境的建立。2:實驗內(nèi)容 1、按照實驗指導安裝Apache http Server。成功后,截圖如下: 2、配置Apache服務(wù)器支持PHP文件解析,截圖如下: 3、實驗測試成功,截圖如下: 3:遇到的問題及解決 配置PHP擴展支持MySQL數(shù)據(jù)庫。用記事本打開php5.3.28之下的php.ini文件,把;extension=php_mysql.dll去掉。只是去掉了extension=php_mysql.dll,而,而沒有其前面的分號去掉就保存了文件。 4:實驗心得 通過在 Windows平臺下,搭建 Apache Httpd Web 服務(wù)器,PHP 腳本支持,訪問 MySQL 數(shù)據(jù)庫等,我學習了解 了MySQL 應(yīng)用開發(fā)環(huán)境的建立過程。學會了安裝 Apache HTTD Server 2.2、PHP 5.3.28,配置 httpd.conf和 PHP.ini 文件,完成 MySQL 的 PHP 應(yīng)用開發(fā)環(huán)境的建立。 實驗八 MySQL的存儲過程 1:實驗?zāi)康?/p> 存儲過程分為兩類:1.系統(tǒng)提供的存儲過程;2.用戶自定義存儲過程。 存儲過程具有的優(yōu)點:1.存儲過程允許標準組件式編程;2.存儲過程能夠?qū)?現(xiàn)較快的執(zhí)行速度;3.存儲過程能夠減少網(wǎng)絡(luò)流量;4.存儲過程可被作為一種安 全機制來充分利用。存儲過程是可復(fù)用的組件!想象一下如果你改變了主機的語 言,這對存儲過程不會產(chǎn)生影響,因為它是數(shù)據(jù)庫邏輯而不是應(yīng)用程序。存儲過 程是可以移植的! 本次實驗了解 MySQL 存儲過程的創(chuàng)建、修改和刪除的方法和步驟,掌握在 Navicat for MySQL中對存儲過程的進行創(chuàng)建、修改和刪除,掌握在MySQL Command Line Client 中調(diào)用帶參數(shù)和不帶參數(shù)的存儲過程。 2:實驗內(nèi)容 1、MySQL Command Line Client中創(chuàng)建存儲過程,按照實驗指導書創(chuàng)建第一、第二個存儲過程及其調(diào)用。 2、調(diào)用第三、第四個傳出參數(shù)的存儲過程: 3、創(chuàng)建存儲過程third_p(),顯示表cqupt中的數(shù)據(jù),并對其進行調(diào)用測試。 4、創(chuàng)建存儲過程simpleproc2(),對傳入?yún)?shù)進行乘以10的處理,變量定義@x,并對其進行調(diào)用測試。5.用Drop Procedure語句刪除存儲過程first_p。 3:實驗結(jié)果 4:心得體會 通過此次實驗,學會了在MySQL Command Line Client中創(chuàng)建存儲過程及其調(diào)用,并傳遞參數(shù)對其進行調(diào)用測試.實驗九MySQL的觸發(fā)器和SQL語言數(shù)據(jù)控制語言DCL 1:實驗?zāi)康?/p> 觸發(fā)器是特定事件出現(xiàn)的時候,自動執(zhí)行的代碼塊,類似于存儲過程。觸發(fā)器與存儲過程的區(qū)別在于:存儲過程是由用戶或應(yīng)用程序顯式調(diào)用的,而觸發(fā)器是不能被直接調(diào)用的,由DBMS自動執(zhí)行。觸發(fā)器具有這些功能: 1、允許/限制對表的修改; 2、自動生成派生列,比如自增字段; 3、強制數(shù)據(jù)一致性; 4、提供審計和日志記錄; 5、防止無效的事務(wù)處理; 6、啟用復(fù)雜的業(yè)務(wù)邏輯。 本次實驗了解MySQL觸發(fā)器的創(chuàng)建、修改和刪除的方法和步驟,掌握在Navicat for MySQL中對觸發(fā)器的進行創(chuàng)建、修改和刪除,掌握觸發(fā)器觸發(fā)測試的方法。2:實驗內(nèi)容 1、創(chuàng)建觸發(fā)器audit_student,該觸發(fā)器對修改student表的時間、用戶名記錄到日志表中。 2.執(zhí)行 五、教學過程中 (三)實驗內(nèi)容的第二部分改造簡單觸發(fā)器,增加觸發(fā)類型判斷功能,驗證觸發(fā)器的改造和改造后的觸發(fā)器觸發(fā)測試。3.自行編寫student表的觸發(fā)器aduit_student_update,在對student表進行更新操作前觸發(fā),觸發(fā)時,向student_log表寫入觸發(fā)用戶、觸發(fā)時間和觸發(fā)類型。并對該新建進行觸發(fā)測試。 4.自行編寫student表的觸發(fā)器aduit_student_delete,在對student表進行刪除操作后觸發(fā),觸發(fā)時,向student_log表寫入觸發(fā)用戶、觸發(fā)時間和觸發(fā)類型。并對該新建進行觸發(fā)測試。 3:實驗結(jié)果 ①輸入如下語句,建立實驗表student,如圖所示: create table student(SNO varchar(10),SNAME varchar(30),Sage Int); ②輸入如下語句,建立日志表student_log,并查看日志表是否為空,如圖所示: create table student_log(who varchar(30),whattimeTIMESTAMP); select * from student_log; ③輸入如下語句,在student表上語句觸發(fā)器,如圖所示: use test; Create trigger audit_student Beforeinsert On student For each row Begin Insert into student_log(Who,whattime)Values(current_user,current_timestamp);End; 建立④輸入如下語句對觸發(fā)器進行INSERT觸發(fā)測試,如圖所示: 對student表做一個INSERT操作: Insert into student values('1992150033','吳思遠',40); 輸入如下語句查看表student_log,檢查觸發(fā)器工作結(jié)果,表student_log中數(shù)據(jù)如圖所示: select * from student_log; ①輸入如下語句,修改日志表結(jié)構(gòu),增加一個屬性存放觸發(fā)語句類型。如圖所示: alter table student_log add(action varchar(20)); ②修改觸發(fā)器,記錄觸發(fā)語句類型。選中student表,單擊右鍵,選擇設(shè)計表,點擊觸發(fā)器選項卡,在定義中對INSERT進行編輯,如圖所示: select * from student_log 4:實驗心得 本次實驗讓我了解 MySQL 觸發(fā)器的創(chuàng)建、修改和刪除的方法和步驟,掌握在 Navicat for MySQL 中對觸發(fā)器進行創(chuàng)建、修改和刪除的步驟,掌握了觸發(fā)器觸發(fā)測試的方法。 實驗十SQL的數(shù)據(jù)控制通過DCL(數(shù)據(jù)控制語言)實現(xiàn) 1:實驗?zāi)康?/p> DCL 通過對數(shù)據(jù)庫用戶的授 權(quán)和權(quán)限回收命令來實現(xiàn)有關(guān)數(shù)據(jù)的存取控制,以保證數(shù)據(jù)庫的安全性 本次實驗了解 DCL 語言的 GRANT 和 REVOKE 語句對數(shù)據(jù)庫存取權(quán)限的控制,學會在Navicat for MySQL中用GRANT、REVOKE語句對數(shù)據(jù)庫存取權(quán)限進行設(shè)定。 2:實驗內(nèi)容 1.登錄mysql,創(chuàng)建用戶jason,密碼為abc123,并授權(quán)該用戶完整訪問數(shù)據(jù)庫test。即執(zhí)行如下DCL語句:GRANT ALL ON test.* TO jason@“%”IDENTIFIED BY “abc123”;2.啟動另外一個Navicat for MySQL,在MySQL –新建連接中完成jason連接參數(shù)配置 3.對user表進行授予權(quán)限操作,并用select insert 進行測試 4.對user表進行收回權(quán)限操作,用select insert語句進行測試 3:實驗結(jié)果 GRANT ALL ON test.* TO jason@“%” IDENTIFIED BY “abc123”;GRANT SELECT on mysql.host to jason; 2、將數(shù)據(jù)庫 mysql 中表 host 的查詢權(quán)限從用戶 jason 回收 3.創(chuàng)建用戶jason,密碼為abc123,并授權(quán)該用戶完整訪問數(shù)據(jù)庫test。GRANT ALL ON test.* TO jason@“%” IDENTIFIED BY “abc123”; 4.啟動另外一個Navicat for MySQL,在MySQL –新建連接中完成jason連接參數(shù)配置。為了能查詢到相應(yīng)的數(shù)據(jù),我們必須進行授權(quán)操作。語句如下: Grant select on mysql.user to jason; 授權(quán)后,現(xiàn)在切換到Navicat for MySQL,執(zhí)行之前窗口中的查詢語句: 5、接下來,切換到MySQL的命令行客戶端,創(chuàng)建一個簡單的表,切換到Navicat for MySQL,新建一個查詢: insert into mysql.dcltest(id,name)values(1,'張三豐'); 6、切換到MySQL的命令行客戶端,執(zhí)行如下授權(quán)語句,進行INSERT權(quán)限的授予: Grant insert on mysql.user to jason; 輸入如下查詢語句: Select * from mysql.dcltest; 權(quán)限授予后,root(數(shù)據(jù)庫超級用戶)可以進行權(quán)限的回收。 7、切換到Navicat for MySQL,新建一個查詢,執(zhí)行如下插入語句: insert into mysql.dcltest(id,name)values(2,'掃地僧');執(zhí)行如下權(quán)限回收語句: Revoke insert on mysql.dcltest from jason; 新建一個查詢,執(zhí)行如下查詢語句: select * from mysql.dcltest; Revoke select on mysql.dcltest from jason; 4:實驗心得 通過本次實驗,我了解DCL語言的GRANT和REVOKE語句對數(shù)據(jù)庫存取權(quán)限的控制,學會在Navicat for MySQL中用GRANT、REVOKE語句對數(shù)據(jù)庫存取權(quán)限進行設(shè)定。 實驗十一MySQL的事務(wù)與鎖 1:實驗?zāi)康?/p> 事務(wù)(Transaction)是MySQL數(shù)據(jù)庫系統(tǒng)中的一個邏輯工作單元,是完成一組數(shù)據(jù)庫操作的程序執(zhí)行單元;鎖(Lock)是MySQL數(shù)據(jù)庫系統(tǒng)中并發(fā)控制的常用方法.本次實驗了解MySQL事務(wù)的設(shè)置、提交和回退的方法和步驟,掌握MySQL Command Line Client中如何進行相關(guān)操作。了解MySQL的表鎖定與鎖定解除,掌握MySQL Command Line Client中如何進行相關(guān)操作。2:實驗內(nèi)容 啟動MySQL的命令行客戶端,輸入密碼mysql(小寫);執(zhí)行 五、教學過程中 (三)實驗內(nèi)容的1部分,學習和驗證MySQL的事務(wù);在實驗步驟2的基礎(chǔ)上,在數(shù)據(jù)bankrecord的表record中,添加一個元組id為3的張六,初始余額2萬;自己寫事務(wù)完成如下操作:李四向張六轉(zhuǎn)賬5千,然后取消該轉(zhuǎn)賬;王五向李四轉(zhuǎn)賬1萬5,然后確認轉(zhuǎn)賬;執(zhí)行 五、教學過程中 (三)實驗內(nèi)容的2部分,學習和驗證MySQL的鎖;在步驟4的基礎(chǔ)上,在數(shù)據(jù)庫bookrecord的表sellrecord中,添加一個元組id為2000的書籍Oracle數(shù)據(jù)庫實用教程庫,存為2本;在當前MySQL命令行客戶端里面模擬李四購書,另外啟動一個MySQL命令行客戶端,模擬王五購書;要求使用寫鎖先鎖定后,再修改,因為庫存有兩本,所以李四和王五都能買到,庫存為0,并且兩人的名字都出現(xiàn)在buyername 3:實驗結(jié)果 create database bankrecord character set utf8 collate utf8_general_ci;use bankrecord; create table record(id int,name varchar(20),jine decimal(8,2)); set names gbk; insert into record values(1, '李四',20000);insert into record values(2, '王五',20000);start transaction; update record set jine=jine-10000 where name='李四';select * from record;rollback; select * from record; 1、查看數(shù)據(jù)庫自動提交模式是否打開: 2,按照實驗指導先建立數(shù)據(jù)庫、表和向表中插入初始賬戶記錄: 3、完成開始事務(wù),從李四賬戶轉(zhuǎn)出 1 萬元,向王五賬戶中轉(zhuǎn)入 1 萬元,提交確認轉(zhuǎn)賬: 4、安實驗指導執(zhí)行語句先建立數(shù)據(jù)庫、表和向表中插入初始書籍記錄: 5、在數(shù)據(jù)庫 bankrecord 的表 record 中,添加一個元組id 為 3 的張六,初始余額 2 萬,李四向張六轉(zhuǎn)賬 5 千,然后取消該轉(zhuǎn)賬;王五向李四轉(zhuǎn)賬 1 萬 5,然后確認轉(zhuǎn)賬(語句在圖中顯示): 6、在數(shù)據(jù)庫 bookrecord 的表 sellrecord 中,添加一個元組id 為 2000 的書籍 Oracle 數(shù)據(jù)庫實用教程庫,存為 2 本(相關(guān)語句在圖中顯示): 7、在當前 MySQL 命令行客戶端里面模擬李四購書,另外啟動一個 MySQL 命令行客戶 端,模擬王五購書(語句在圖中顯示)。 4:實驗心得 本次實驗了解 MySQL 事務(wù)的設(shè)置、提交和回退的方法和步驟,掌握 MySQL Command Line Client 中如何進行相關(guān)操作。了解 MySQL 的表鎖定與鎖定解除,掌握 MySQL Command Line Client 中如何進行相關(guān)操作。 實驗十二MySQL的常用函數(shù)MySQL 1:實驗?zāi)康?/p> 本次實驗了解 MySQL 常用字符串、日期和時間函數(shù)等的使用,掌握 MySQL Command Line Client 中如何進行相關(guān)操作。常用函數(shù)包括常用字符串、日期和時間函數(shù)等各類函數(shù)。2:實驗內(nèi)容 啟動 MySQL 的命令行客戶端,輸入密碼 mysql(小寫);執(zhí)行 五、教學過程中 (三)實驗內(nèi)容的 1 部分,學習和驗證 MySQL 的字符串函數(shù);在實驗步驟 2 的基礎(chǔ)上,學習如下兩個函數(shù)并完成題目:定位和位置函數(shù) LOCATE(substr,str),返回字符串 str 中子字符串 substr 的第一次出現(xiàn)位置,如果 str 中不包含 substr,返回 0。 請使用LOCATE函數(shù)計算needle在haystackneedlehaystack第一次出現(xiàn)的位置;子字符串函數(shù) SUBSTRING(str,pos,len),從字符串 str 返回一個長度同 len 字符相同的子字符串,起始于位置 pos;請使用 SUBSTRING 函數(shù)計算 backspace,從第 2 個字符起,長度為 5 的子字符串;字符串函數(shù)的解答腳本和結(jié)果請保存,老師會檢查;執(zhí)行 五、教學過程中 (三)實驗內(nèi)容的 2 部分,學習和驗證 MySQL 的日期和時間函數(shù);在步驟 4 的基礎(chǔ)上,學習如下一個函數(shù)并完成題目:周函數(shù) WEEK(date),返回 date 時間包含的星期數(shù);請使用 WEEK 函數(shù)計算當前日期包含的星期數(shù)。3:實驗結(jié)果 4:實驗心得 通過本次實驗掌握了MySQL 常用函數(shù)包括常用字符串、日期和時間函數(shù)等各類函數(shù),并且學會了MySQL Command Line Client 中如何進行相關(guān)操作。 實驗7 索引和數(shù)據(jù)完整性的使用 1、目的與要求 (1)掌握索引的使用方法; (2)掌握數(shù)據(jù)完整性的實現(xiàn)方法; 2、實驗準備 (1)了解索引的作用與分類;(2)掌握索引的創(chuàng)建方法; (3)理解數(shù)據(jù)的完整性的概念與分類;(4)掌握各種數(shù)據(jù)完整性的實現(xiàn)方法。 3、實驗內(nèi)容 (1)建立索引 ①使用CREATE INDEX語句創(chuàng)建索引。 對YGGL數(shù)據(jù)庫的Employees表中的DepartmentID列建立索引。在查詢分析器中輸入如下程序并執(zhí)行: USE YGGL GO CREATE INDEX depart_ind ON Employees(DepartmentID)GO 在Employees表的Name列和Address列上建立復(fù)合索引。CREATE INDEX Ad_ind ON Employees(Name,Address)對Departments表上的DepartmentName列建立唯一非聚集索引。CREATE UNIQUE INEDX Dep_ind ON Departments(DepartmentName)【思考與練習】 a.索引創(chuàng)建完后在對象資源管理器中查看表中的索引。b.了解索引的分類情況 c.使用CREATE INDEX語句能創(chuàng)建主題嗎? d.在什么情況下可以看到建立索引的好處? ②使用界面方式創(chuàng)建索引。 使用界面方式在Employees表的PhoneNumber列上創(chuàng)建索引。 啟動SQL Server Management Studio,在對象資源管理器中展開數(shù)據(jù)庫YGGL,展開表Employees,右擊“索引,選擇“新建索引”選項。在新建索引的窗口中填寫索引的名稱和類型,單擊“添加”按鈕,在列表框中選擇要創(chuàng)建的索引的列,選擇完單擊“確定”按鈕即完成創(chuàng)建工作。【思考與練習】 a.使用界面方式創(chuàng)建一個復(fù)合索引。 b.在Employees表的表設(shè)計窗口選擇Address列,右擊選擇“索引/鍵”菜單項,在新窗口中的Address列創(chuàng)建一個唯一的索引。 c.創(chuàng)建一個數(shù)據(jù)量很大的新表,查看使用索引和不使用索引的區(qū)別。 (2)重建索引。 重建表Employees中的所有索引。USE YGGL GO ALTER INDEX ALL ON Employ REBUILD 【思考與練習】重建表Employees中EmployeeID列上的索引。 (3)刪除索引。 使用DROP INDEX語句刪除表Employees上的索引Depart_ind,計劃使用如下SQL語句: DROP INDEX Depart_ind ON Employees 【思考與練習】 a.使用QROP INDEX一次刪除Employees表上的多個索引 b使用界面方式刪除Department表上的索引。 (4)數(shù)據(jù)完整性。 ①創(chuàng)建一個表Employees5,只含EmployeesID,Name,Sex和Education列。將Name,設(shè)為主鍵,作為列Name的約束。對EmployeesID列進行UNIQUE約束,并作為表的約束。 CREATE TABLE Employees5(EmployeesID char(6)NOT NULL PRIMARY KEY, Sex tinyint Education char(4), CONSTRAINT UK_id UNIQUE(EmployeesID)) ②刪除上例中創(chuàng)建的UNIQUE約束。ALTER TABLE Employees5 DROPCONSTRAINT UK_id GO 【思考與練習】 a.使用T-SQL命令創(chuàng)建一個新表,使用一個復(fù)合列作為主鍵,作為表的約束,并為其命名。b.使用語句為表ALTER TABLEEmployees5添加一個新列Address,并為該列定義UNIQUE約束,并了解如何使用圖形向?qū)Х绞絼h除主鍵和UNIOQUE約束。 ③創(chuàng)建新表student,只考慮“號碼”和“性別”兩列,性別只能包含男或女。CREATE TABLE student(號碼char(6)NOT NULL 性別char(2)Employees CHECK(性別 IN(“男”,“女”)) 【思考與練習】 向該表插入數(shù)據(jù),“性別”列插入“男”和“女”以外的字符,查看會發(fā)生什么情況。 ④創(chuàng)建新表Salary2,結(jié)構(gòu)與Salary相同,但Salary2表不可以O(shè)utCome列大于Income列。 CREATE TABLE Salary2(EmployeesID char(6)NOT NULL Income Float NOT NULL, OUTCOME FLOAT NOT NULL, CHECK(INCOME>=OUTCOME))【思考與練習】 a.向表中插入數(shù)據(jù),查看OUTCOME值比INCOME值大是會有什么情況。b.創(chuàng)建一個表Employees6,只考慮“學號”和“出生日期”兩列,出生日期必須晚于1980年1月1日。 ⑤對YGGL數(shù)據(jù)庫中的Employees表進行修改,為其增加“DepartmentID”字段的CHECK約束。 use YGGL go alter table Employees add constraint depart check(DepartmentID>=1 and DepartmentID<=5)【思考與練習】測試CHECK約束的有效性。 ⑥創(chuàng)建一個規(guī)則對象,用以限制輸入到該規(guī)則所綁定的列中的值只能是該規(guī)則中列出的值。 create rule list_rule as @list in('財務(wù)部','研發(fā)部','人力資源部','銷售部')go exec sp_bindrule 'list_rule','Departments.DepartmentName' go 【思考與練習】創(chuàng)建一個規(guī)則對象,限制在0~20之間。然后把他綁定知道Employees表的WorkYear字段上。 刪除上述建立的規(guī)則對象。 ⑦創(chuàng)建一個表Salary3,要求所有Salary3表上EmployeeID列的值都要出現(xiàn)在Salary表中,利用參照完整性約束實現(xiàn),要求當刪除或修改Salary表上的EmployeeID列時,Salary3表中的EmployeeID值也會隨之變化 create table Salary3(EmployeeID char(6)not null primary key, InCome float not null, OutCome float(8)not null, foreign key(EmployeeID)references Salary(EmployeeID)on update cascade on delete cascade) 4、實驗結(jié)果 (1)建立索引 ①【思考與練習】 a.索引創(chuàng)建完后在對象資源管理器中查看表中的索引。 b.了解索引的分類情況 答:索引分為兩類:分別是聚集索引和非聚集索引,其中有唯一索引和復(fù)合索引。每一個表中只可以有一個聚集索引,但可以有多個非聚集索引。c.使用CREATE INDEX語句能創(chuàng)建主題嗎? 不可以 d.在什么情況下可以看到建立索引的好處? 當要在龐大的數(shù)據(jù)庫中尋找自己想要的數(shù)據(jù)的時候,建立索引是很有好處的,優(yōu)點如下: 第一:通過創(chuàng)建唯一性索引,可以保證數(shù)據(jù)庫表中每一行數(shù)據(jù)的唯一性。 第二:可以大大加快數(shù)據(jù)的檢索速度,這也是創(chuàng)建索引的最主要的原因。第三:可以加速表和表之間的連接,特別是在實現(xiàn)數(shù)據(jù)的參考完整性方面特別有意義。 第四:在使用分組和排序子句進行數(shù)據(jù)檢索時,同樣可以顯著減少查詢中分組和排序的時間。第五,通過使用索引,可以在查詢的過程中,使用優(yōu)化隱藏器,提高系統(tǒng)的性能。 ②【思考與練習】 a.使用界面方式創(chuàng)建一個復(fù)合索引。 b.在Employees表的表設(shè)計窗口選擇Address列,右擊選擇“索引/鍵”菜單項,在新窗口中的Address列創(chuàng)建一個唯一的索引。 c.創(chuàng)建一個數(shù)據(jù)量很大的新表,查看使用索引和不使用索引的區(qū)別。 (2)重建索引。 【思考與練習】重建表Employees中EmployeeID列上的索引。USE YGGL GO create index employid_ind ON Employees(EmployeeID)GO ALTER INDEX employid_ind ON Employees REBUILD GO (3)刪除索引。 【思考與練習】 a.使用QROP INDEX一次刪除Employees表上的多個索引 USE YGGL GO DROP INDEX Employees.depart_ind,Employees.Employ_ind GO b使用界面方式刪除Department表上的索引。 (4)數(shù)據(jù)完整性。 ②【思考與練習】 a.使用T-SQL命令創(chuàng)建一個新表,使用一個復(fù)合列作為主鍵,作為表的約束,并為其命名。 USE YGGL GO CREATE TABLE Employ(EmployeeID char(8)NOT NULL, Name char(10)NOT NULL, Sex bit NOT NULL, Education char(5), CONSTRAINT UK_id PRIMARY KEY(EmployeeID,Name,Sex)) b.使用語句為表ALTER TABLEEmployees5添加一個新列Address,并為該列定義UNIQUE 約束。 USE YGGL GO ALTER TABLE Employees5 ADD Address varchar(40)NULL CONSTRAINT USK_id UNIQUE GO C.使用界面方式為一個新表定義主鍵和UNIQUE約束,并了解如何使用圖形向?qū)Х绞絼h除主鍵和UNIQUE約束。 ③【思考與練習】 向該表插入數(shù)據(jù),“性別”列插入“男”和“女”以外的字符,查看會發(fā)生什么情況。 ④【思考與練習】 a.向表中插入數(shù)據(jù),查看OUTCOME值比INCOME值大是會有什么情況。 INSERT 語句與CHECK 約束“CK__Salary2__1A14E395”沖突。該沖突發(fā)生于數(shù)據(jù)庫“YGGL”,表“dbo.Salary2”。 語句已終止。 b.創(chuàng)建一個表Employees6,只考慮“學號”和“出生日期”兩列,出生日期必須晚于1980年1月1日。USE YGGL GO CREATE TABLE Employees6(學號 char(6)NOT NULL,出生日期 varchar(20)NOT NULL CHECK(出生日期>'1980-1-1')) ⑤【思考與練習】測試CHECK約束的有效性。 insert into Employees6 values('001','1980-1-0') INSERT 語句與CHECK 約束“CK__Employees6__出生日期__1BFD2C07”沖突。該沖突發(fā)生于數(shù)據(jù)庫“YGGL”,表 “dbo.Employees6”, column '出生日期'。語句已終止。結(jié)果是:上面的記錄添加不進去.表現(xiàn)出了check的有效性.⑥【思考與練習】創(chuàng)建一個規(guī)則對象,限制在0~20之間。然后把他綁定知道Employees表的WorkYear字段上。USE YGGL GO CREATE RULE Emp_rule AS @Emp like'[0-20]' GO EXEC sp_bindrule 'Emp_rule','Employees.WorkYear' GO 刪除上述建立的規(guī)則對象。USE YGGL GO EXEC sp_unbindrule 'Employees.WorkYear' DROP RULE Emp_rule GO ⑦a.創(chuàng)建完Salary3表后,初始化該標的數(shù)據(jù)與salary表相同。刪除salary表中一行數(shù)據(jù),在查看salary3表的內(nèi)容,看看會發(fā)生什么情況。 B.使用ALTER TABLE語句向salary表中的EmployeeID列上添加一個外鍵,要求EmployeeIs表中要刪除或修改與EmployeeID值有關(guān)的行時,檢查Salary表中有沒有與該EployeeID值相關(guān)的記錄,如果存在則拒絕更新Emloyees表。C.在對象資源管理器中建立Departments、Employees和Salary三個表之間的參照關(guān)系。第二篇:實驗5 數(shù)據(jù)庫的嵌套查詢實驗
第三篇:Access數(shù)據(jù)庫應(yīng)用技術(shù)實驗報告查詢(精選)
第四篇:數(shù)據(jù)庫實驗報告
第五篇:數(shù)據(jù)庫實驗報告