第一篇:數(shù)據(jù)庫-第四次實驗報告-視圖-t-sql語句
實驗十報告 創(chuàng)建視圖
實驗?zāi)康?/p>
1.掌握創(chuàng)建視圖的SQL語句的用法。
2.掌握使用企業(yè)管管理器創(chuàng)建視圖的方法。3.掌握使用創(chuàng)建視圖向?qū)?chuàng)建視圖的方法。4.掌握查看視圖的系統(tǒng)存儲過程的用法。5.掌握修改視圖的方法。一. 實驗準備
1.了解創(chuàng)建視圖方法。
2.了解修改視圖的SQL語句的語法格式。3.了解視圖更名的系統(tǒng)存儲過程的用法。4.了解刪除視圖的SQL語句的用法。二. 實驗要求
1.用不同的方法創(chuàng)建視圖。
2.提交實驗報告,并驗收實驗結(jié)果。三. 實驗內(nèi)容 1.創(chuàng)建視圖
(1)使用企業(yè)管理器創(chuàng)建視圖
① 在EDUC庫中以“student”表為基礎(chǔ),建立一個名為“V_計算機系學(xué)生”的視圖。在使用該視圖時,將顯示“student”表中的所有字段.蘭州大學(xué)數(shù)據(jù)庫實驗報告
視圖如下:
(2)使用SQL語句創(chuàng)建視圖 ① 在查詢分析器中建立一個每個學(xué)生的學(xué)號、姓名、選修的課名及成績的視圖S_C_GRADE; Create VIEW S_C_GRADE AS
SELECT student.sno,sname,cname,score FROM student,course,student_course WHERE student.sno=student_course.sno AND course.cno=student_course.cno;
視圖如下:
②建立一個所有計算機系學(xué)生的學(xué)號、選修課程號以及平均成績的視圖COMPUTE_AVG_GRADE;Create VIEW COMPUTE_AVG_GRADE AS
SELECT student.sno,course.cno,AVG(score)'平均成績' FROM student,course,student_course WHERE student.sno=student_course.sno
AND course.cno=student_course.cno AND student.dno='CS' GROUP BY student.sno,course.cno;
視圖如下:
2.修改視圖
(1)使用企業(yè)管理器修改視圖
在企業(yè)管理器中將視圖COMPUTE_AVG_GRADE中改成建立在數(shù)學(xué)系的學(xué)生學(xué)號、選修課程號以及平均成績的視圖。(IS設(shè)為數(shù)學(xué)系)
(2)使用SQL語句修改視圖
① 在查詢分析器中使用更改視圖的命令將上面建立的視圖“V_計算機系學(xué)生”更名為“V_計算機系男生”。
SP_RENAME 'V_計算機系學(xué)生','V_計算機系男生';
3.刪除視圖
(1)使用企業(yè)管理器刪除視圖
用企業(yè)管理器刪除視圖“V_計算機系學(xué)生”
(2)使用SQL語句刪除視圖
用SQL語句刪除視圖COMPUTE_AVG_GRADE;DROP VIEW COMPUTE_AVG_GRADE;
實驗十一 使用視圖
一. 實驗?zāi)康?/p>
1.熟悉和掌握對數(shù)據(jù)表中視圖的查詢操作和SQL命令的使用;
2.熟悉和掌握對數(shù)據(jù)表中視圖的更新操作和SQL命令的使用,并注意視圖更新與基本表更新的區(qū)別與聯(lián)系
3.學(xué)習(xí)靈活熟練的進行視圖的操作,認識視圖的作用 二. 實驗準備
1.熟悉SQL SERVER 工作環(huán)境。2.能連接到EDUC數(shù)據(jù)庫。
3.復(fù)習(xí)有關(guān)視圖操作的SQL語言命令。三. 實驗要求
1.在實驗開始之前做好準備工作。
2.實驗之后提交實驗報告,思考視圖和基本表的區(qū)別 四. 實驗內(nèi)容 一. 定義視圖
在EDUC數(shù)據(jù)庫中,已Student Course 和Student_course 表為基礎(chǔ)完成一下視圖定義 1. 定義計算機系學(xué)生基本情況視圖V_Computer;
CREATE VIEW V_Computer AS SELECT student.* FROM student WHERE student.dno='CS';
視圖如下:
2. 將Student Course 和Student_course表中學(xué)生的學(xué)號,姓名,課程號,課程名,成
績定義為視圖V_S_C_G CREATE VIEW V_S_C_G AS SELECT student.sno,sname,course.cno,course.cname,score FROM student,course,student_course WHERE student.sno=student_course.sno course.cno=student_course.cno;
AND
視圖如下:
3. 將各系學(xué)生人數(shù),平均年齡定義為視圖V_NUM_AVG CREATE VIEW V_NUM_AVG AS SELECT COUNT(dno)'各系人數(shù)',AVG(sage)'平均年齡' FROM student GROUP BY dno;
視圖如下:
4. 定義一個反映學(xué)生出生年份的視圖V_YEAR CREATE VIEW V_YEAR AS SELECT sname,2014-sage '出生年份' FROM student;
視圖如下:
5. 將各位學(xué)生選修課程的門數(shù)及平均成績定義為視圖V_AVG_S_G
CREATE VIEW V_AVG_S_G AS SELECT student.sno '學(xué)號',sname '姓名',COUNT(*)'選修門數(shù)',AVG(score)'平均成績' FROM student,student_course WHERE student.sno=student_course.sno GROUP BY student.sno,sname;
視圖如下:
6. 將各門課程的選修人數(shù)及平均成績定義為視圖V_AVG_C_G CREATE VIEW V_AVG_C_G AS SELECT cno '課程號',COUNT(cno)'選修人數(shù)',AVG(score)'平均成績' FROM student_course GROUP BY cno;
視圖如下:
二. 使用視圖
1.查詢以上所建的視圖結(jié)果。
所建視圖結(jié)果如上題截圖所示
2.查詢平均成績?yōu)?0分以上的學(xué)生學(xué)號、姓名和成績;
SELECT 學(xué)號,姓名,平均成績 FROM V_AVG_S_G WHERE平均成績>90;
3.查詢各課成績均大于平均成績的學(xué)生學(xué)號、姓名、課程和成績;
SELECT V_S_C_G.sno,V_S_C_G.sname,V_S_C_G.cname,V_S_C_G.score FROM V_S_C_G,V_AVG_S_G WHERE V_S_C_G.sno=V_AVG_S_G.學(xué)號 AND V_S_C_G.score>V_AVG_S_G.平均成績;
4.按系統(tǒng)計各系平均成績在80分以上的人數(shù),結(jié)果按降序排列;
1.先創(chuàng)建學(xué)生學(xué)號-系別視圖V_STUDENT CREATE VIEW V_STUDENT AS SELECT sno,dno FROM student;2.進行查詢
SELECT V_STUDENT.dno '系別',COUNT(V_STUDENT.sno)'人數(shù)' FROM V_STUDENT,V_AVG_S_G WHERE V_STUDENT.sno=V_AVG_S_G.學(xué)號 AND V_AVG_S_G.平均成績>80 GROUP BY V_STUDENT.dno;
三. 修改視圖 并查詢結(jié)果;UPDATE V_IS SET sname='S1_MMM' WHERE SNO='32011';UPDATE V_IS SET sname='S4_MMM' WHERE SNO='32014';SELECT * FROM V_IS WHERE sno='32011' OR sno='32014';1.通過視圖V_IS,分別將學(xué)號為“S1”和“S4”的學(xué)生姓名更改為“S1_MMM”,”S4_MMM”
2.通過視圖V_IS,新增加一個學(xué)生記錄('S12','YAN XI',19,'IS'),并查詢結(jié)果
INSERT INTO V_IS(sno,sname,sex,dno,sage)VALUES('S12','YAN XI','女','IS','19')SELECT *
FROM V_IS
WHERE sno='S12';
3.要通過視圖V_AVG_S_G,將學(xué)號為“S1”的平均成績改為90分,是否可以實現(xiàn)?并說明原因
答:不能實現(xiàn),因為視圖或函數(shù)'V_AVG_S_G' 包含聚合、DISTINCT 或GROUP BY 子句或者PIVOT 或UNPIVOT 運算符,所以無法進行更新。
UPDATE V_AVG_S_G SET 學(xué)號='32011' WHERE平均成績='90';
實驗十二 更新語句
一. 實驗?zāi)康?/p>
1. 熟悉使用UPDATE/INSERT/DELETE語句進行表操作; 2. 能將這些更新操作應(yīng)用于實際操作中去; 二. 三. 實驗準備 實驗要求 1.了解這些更新語句的基本語法和用法; 1. 完成下面的實驗內(nèi)容,并提交實驗報告; 2. 在實驗報告中附上相應(yīng)的代碼; 四. 實驗內(nèi)容
1. 對于student表,將所有專業(yè)號為‘001’的,并且入學(xué)年份為2006的學(xué)生,或是專業(yè)號為‘003’,并且年齡小于20歲的學(xué)生的班級號改為‘001’。
UPDATE student SET classno='001'
WHERE(mno='001'AND YEAR(sctime)='2006')OR(mno='003'AND(year(getdate())-year(sdate))<20);
2. 對于student表,刪掉所有年齡小于20歲,并且專業(yè)號為‘003’的學(xué)生的記錄。
DELETE FROM student WHERE mno='003'AND(year(getdate())-year(sdate))<20
3. 對于student表,插入一條新記錄,它的具體信息為,學(xué)號:2007110011、姓名:張
三、性別:男、出生日期:19880808、院系編號:‘001’、專業(yè)編號: ‘001’、班級號:‘001’、入學(xué)時間:20070901。INSERT INTO student(sno,sname,sex,sdate,dno,mno,classno,sctime)VALUES('2007110011','張三','男','1988-8-8','001','001','001','2007-9-1');
4. 對于student表,將入學(xué)時間最晚的學(xué)生和年齡最小的學(xué)生的聯(lián)系方式去掉。
UPDATE student SET tel=null
WHERE sctime>=ALL(select sctime FROM student)OR year(sdate)>=ALL(select year(sdate)from student)
5. 對于student表,將平均年齡最小的一個院系的院系編號改為‘008’。
UPDATE student SET dno='008' where dno in(SELECT top 1 dno FROM student
GROUP BY dno
ORDER BY AVG(year(getdate())-year(sdate)))
T-SQL編程
一、【實驗?zāi)康摹?/p>
1、掌握T_SQL編程的基本語法
2、常用函數(shù)的使用方法
二、【實驗要求】
1、使用查詢分析器練習(xí)T-SQL編程方法
2、練習(xí)函數(shù)的使用
三、【實驗準備】
1、復(fù)習(xí)與本次實驗內(nèi)容相關(guān)知識
2、預(yù)習(xí)相關(guān)函數(shù)(請預(yù)查閱CONVERT、DATENAME、GFTDATE函數(shù)的用法)
四、【實驗內(nèi)容】
1、條件結(jié)構(gòu)
自己編寫一段程序判斷一個年份(比如1900年)是否是閏年,是則顯示1900年為閏年,否則顯示1900年不是閏年.DECLARE @year INT SELECT @year=2014 if @year%4=0 and @year%100<>0 print CONVERT(CHAR(4),@year)+'是閏年' else print CONVERT(CHAR(4),@year)+'不是閏年'
2、循環(huán)結(jié)構(gòu)(1)下面是計算1~100和的循環(huán)結(jié)構(gòu),執(zhí)行之,體會循環(huán)結(jié)構(gòu)程序,注意語句塊標志BEGIN...END
DECLARE @SUM INT,@I INT SELECT @I=1,@SUM=0 WHILE @I<=100 BEGIN SELECT @SUM=@SUM+@I SELECT @I=@I+1 END PRINT '1...100的和為:'+CONVERT(CHAR(4),@SUM)
(3)編寫一個程序用于計算10的階乘
DECLARE @SUM INT,@I INT SELECT @I=1,@SUM=1 WHILE @I<=10 BEGIN SELECT @SUM=@SUM*@I SELECT @I=@I+1 END PRINT '階乘!的結(jié)果為:'+CONVERT(CHAR(10),@SUM)
(4)自己編制一個程序,要求其能打印出100內(nèi)的素數(shù)(只能被其自身和1整除的數(shù)).--循環(huán)結(jié)構(gòu)+條件結(jié)構(gòu)
SELECT main.number FROM master..spt_values AS main WHERE type='P'
AND number BETWEEN 3 AND 100 AND NOT EXISTS(SELECT 1 FROM master..spt_values AS sub WHERE
type='P'
AND sub.number BETWEEN 2 AND main.number-1 AND main.number % sub.number = 0)
3、CASE結(jié)構(gòu)
(1)下面SQL查詢圖書的信息,并根據(jù)圖書定價判斷是否適合作為教材
select 書名, 出版社, 作者, case
when 定價>50 then '定價太高,不適合作教材'
else '定價' + CAST(定價 as varchar(5))+ ',可以作教材'
end 可否作為教材 from 圖書
(2)請自己編程實現(xiàn)各位同學(xué)的成績以等級分顯示即:90分及以上為優(yōu),80分及以上到90以下為良,70分及以上到80分以下為中,60分及以上到70分以下為及格,其余為不及格.SELECT student.sno ,sname ,cname, CASE WHEN student_course.score >=90 THEN '優(yōu)' when student_course.score>=80 and student_course.score <=90 THEN '良'
when student_course.score>=70 and student_course.score <=80 THEN '中'
when student_course.score>=60 and student_course.score<=70 THEN '及格'
else '不及格' END GRADE FROM student_course,course,student WHERE student_course.cno=course.cno AND student_course.sno=student.sno
4、函數(shù)使用
下面查詢,顯示當(dāng)前日期,顯示格式為:“今天是XXXX年XX月XX日,星期X”,執(zhí)行之,體會系統(tǒng)函數(shù)的用法.SELECT '今天是'+DATENAME(YEAR,GETDATE())+'年' +DATENAME(MONTH,GETDATE())+'月' +DATENAME(DAY,GETDATE())+'日,' +DATENAME(WEEKDAY,GETDATE())
第二篇:實驗三,,數(shù)據(jù)庫中數(shù)據(jù)查詢及視圖操作實驗報告
長春大學(xué)計算機學(xué)院 科學(xué)與技術(shù) 專業(yè)
數(shù)據(jù)庫原理
實驗報告
實驗名稱:
實驗 三
數(shù)據(jù)庫中的數(shù)據(jù)查詢及視圖操作(1)班 班
級:
姓 姓
名:
學(xué) 學(xué)
號:
實驗地點:
日 日
期:
一、實驗?zāi)康模?/span>
1.繼續(xù)熟練 SQL SERVER 2005/2008 系統(tǒng)或 KingBase ES V7.0 的使用; 2.掌握 SELECT 語句的使用。
3.掌握單表查詢,多表查詢以及嵌套查詢。
二、實驗內(nèi)容、要求和環(huán)境:
【 實驗要求】
注:將完成的實驗報告重命名為:班級+學(xué)號+姓名+(實驗三),(如:041540538張三(實驗三)),提交到SPOC學(xué)堂。
1.實驗課要攜帶教材、學(xué)習(xí)輔導(dǎo)、老師下發(fā)的實驗報告文檔等。
2.課前要對實驗內(nèi)容和步驟部分進行預(yù)習(xí)。
【實驗環(huán)境】
1.SQL SERVER 2005/2008; 2.KingBase ES V7.0,人大金倉。
【實驗內(nèi)容和步驟】
針對實驗一建立的數(shù)據(jù)庫的表,用 select 語句完成如下查詢操作,寫出 select 語句,并給出操作結(jié)果。
1.針對 SPJ 數(shù)據(jù)庫中的四個表,實現(xiàn)如下查詢:
(1)求供應(yīng)工程 J1 零件的供應(yīng)商號碼 SNO;(2)求供應(yīng)工程 J1 零件 P1 的供應(yīng)商號碼 SNO;(3)求供應(yīng)工程 J1 零件的供應(yīng)商名 SNAME;(4)求供應(yīng)工程 J1 零件 P1 的供應(yīng)商名 SNAME;(5)求供應(yīng)工程 J1 零件為紅色的供應(yīng)商號碼 SNO;(6)求沒有使用天津供應(yīng)商生產(chǎn)的紅色零件的工程號 JNO;(7)求至少用了供應(yīng)商 S1 所供應(yīng)的全部零件的工程號 JNO;(8)找出使用上海產(chǎn)的零件的工程名稱; 2.針對學(xué)生-課程數(shù)據(jù)庫中的三個表,用嵌套方法查詢實現(xiàn)如下查詢:
(1)查詢選修了數(shù)據(jù)庫的學(xué)生姓名。
(2)查詢比計算機系 CS 所有學(xué)生年齡都大的學(xué)生信息。
(3)列出“李勇”選修的所有課程的課名和成績。
(4)查詢數(shù)據(jù)庫的先行課的課程名。
3.針對實驗一建立的 SPXS 數(shù)據(jù)庫中的三個表,實現(xiàn)如下查詢:
精選文檔
(1)查詢與商品“電視”顏色相同的商品名;(2)查詢不銷售商品 P2 的商店名;(3)查詢至少銷售商品 P1、P2 兩種商品的商店名;(4)所有商店都銷售的商品號。
(5)只銷售一種商品P4的商店名。
三、實驗結(jié)果與分析:
寫出操作語句,粘貼查詢結(jié)果(粘貼結(jié)果要求粘貼 SQL Server Managemet Studio 整個窗口):
1.(1)
(2)
精選文檔
(3)
精選文檔
(4)
精選文檔
(5)
精選文檔
(6)
精選文檔
(7)
精選文檔
精選文檔
(8)
精選文檔
2.(1)
精選文檔
(2)
精選文檔
(3)
精選文檔
(4)
精選文檔
3.(1)
精選文檔
(2)
精選文檔
(3)
精選文檔
(4)
精選文檔
(5)
精選文檔
四、思考題:
1.在操作中遇到什么問題?如何解決的?
第三題第二問不知道如何將在全部的 sno 中剔除當(dāng) pno=’p2’是的 sno.語句不知道怎樣寫出。
五、教師評語:
實驗成績:
:
教師:
(簽名))
****年**月**日 日
創(chuàng)新活動
精選文檔
第三篇:數(shù)據(jù)庫SQL 視圖的創(chuàng)建及使用實驗報告
《數(shù)據(jù)庫基礎(chǔ)》實驗報告
班級__計算機111__學(xué)號__xxxxxxxx__姓名__xxx___完成日期____6.20___
實驗室 __理工樓310_ 指導(dǎo)老師xxx成績____100______
實驗
四、視圖的創(chuàng)建及使用
(一)實驗?zāi)康模?)加深對視圖的理解。
(2)掌握使用管理工具創(chuàng)建和使用視圖的方法。
(3)掌握使用SQL創(chuàng)建和使用視圖的方法。
(二)實驗內(nèi)容
(1)使用“圖書借閱”數(shù)據(jù)庫,在管理工具中創(chuàng)建視圖“借閱_計算機圖書”,包含借閱類別為“計算機”的圖書的信息:(讀者編號,姓名,書號,書名,借閱日期)。
(2)直接使用SQL定義(1)中要求的視圖并對其進行查詢。
(3)在管理工具中建立各類視圖(如單表視圖、多表視圖、分組視圖、基于視圖的視圖等)。
(4)嘗試使用insert、update、delete更新視圖。
(三)實驗具體步驟
(1)使用“圖書借閱”數(shù)據(jù)庫,在管理工具中創(chuàng)建視圖“借閱_計算機圖書”,包含借閱類別為“計算機”的圖書的信息(讀者編號,姓名,書號,書名,借閱日期)。create view 借閱_計算機圖書(Duno,Duname,Shuno,Shuname,JYtime)
as
select Duzhe.Duno,Duname,Tushu.Shuno,Shuname, JYtime from Tushu,Duzhe,Jieyue where Duzhe.Duno=Jieyue.Duno and Tushu.Shuno,=Jieyue.Shuno and Liebie='計算機'
(2)直接使用SQL定義(1)中要求的視圖并對其進行查詢。
select * from 借閱_計算機圖書
(3)在管理工具中建立各類視圖
用管理工具建立:在管理工具中,打開圖書借閱數(shù)據(jù)庫,右擊視圖,新建視圖,然后依照要求建立各種視圖。
《數(shù)據(jù)庫基礎(chǔ)》實驗報告
SQL語句:
create view 單表視圖
as
select Shuname,Shuno,Zuozhe from Tushu
create view 多表視圖
as
select Shuname,Shuno,Zuozhefrom Tushu,Jieyue
where Tushu.Shuno,=Jieyue.Shuno
create view 分組視圖(Shuno,Duno)
as
select Shuno,Duno from Jieyue group by Shuno
create view 基于視圖的視圖
as
select Duno,Duname,Danwei from 單表視圖 where Sex = '男'
(4)嘗試使用insert、update、delete更新視圖。
insert into 單表視圖 values(002,'三星','紹興文理','男',***)
update 單表視圖 set sex='男' where Duname='華為'
delete from 單表視圖 where Shuno=1002
(四)實驗心得
通過這次實驗,對視圖有了更深的認識,從視圖的創(chuàng)建,插入,修改,查詢以及刪除都有了詳細的認識。視圖能夠簡化用戶的操作,好好的學(xué)習(xí)課程,為以后的課程打下好基礎(chǔ)!在實驗的過程中也遇到一些問題,但是經(jīng)過自己的理解以及請教同學(xué)把實驗完成。
第四篇:數(shù)據(jù)庫實驗報告
數(shù)據(jù)庫實驗報告
一、題目要求
某銀行準備開發(fā)一個銀行業(yè)務(wù)管理系統(tǒng),通過調(diào)查,得到以下的主要需求:
銀行有多個支行。各個支行位于某個城市,每個支行有唯一的名字。銀行要監(jiān)控每個支行的資產(chǎn)。銀行的客戶通過其身份證號來標識。銀行存儲每個客戶的姓名及其居住的街道和城市。客戶可以有帳戶,并且可以貸款。客戶可能和某個銀行員工發(fā)生聯(lián)系,該員工是此客戶的貸款負責(zé)人或銀行帳戶負責(zé)人。銀行員工也通過身份證號來標識。員工分為部門經(jīng)理和普通員工,每個部門經(jīng)理都負責(zé)領(lǐng)導(dǎo)其所在部門的員工,并且每個員工只允許在一個部門內(nèi)工作。每個支行的管理機構(gòu)存儲每個員工的姓名、電話號碼、家庭地址及其經(jīng)理的身份證號。銀行還需知道每個員工開始工作的日期,由此日期可以推知員工的雇傭期。銀行提供兩類帳戶——儲蓄帳戶和支票帳戶。帳戶可以由2個或2個以上客戶所共有,一個客戶也可有兩個或兩個以上的帳戶。每個帳戶被賦以唯一的帳戶號。銀行記錄每個帳戶的余額、開戶的支行以及每個帳戶所有者訪問該帳戶的最近日期。另外,每個儲蓄帳戶有其利率,且每個支票帳戶有其透支額。每筆貸款由某個分支機構(gòu)發(fā)放,能被一個或多個客戶所共有。每筆貸款用唯一的貸款號標識。銀行需要知道每筆貸款所貸金額以及逐次支付的情況(銀行將貸款分幾次付給客戶)。雖然貸款號不能唯一標識銀行所有為貸款所付的款項,但可以唯一標識為某貸款所付的款項。對每次的付款需要記錄日期和金額。
二、需求分析
這一部分主要是根據(jù)實驗需求對銀行系統(tǒng)需求中的實體、實體屬性以及實體之間的關(guān)聯(lián)進行確認,以便畫出正確的概念模型。
2.1 實體確認
根據(jù)需求分析確認實體:銀行員工、銀行支行、客戶、賬戶(其中:儲蓄賬戶、支票賬戶是繼承實體賬戶而來)、貸款、支付(弱實體)。
2.2 實體屬性確認
銀行員工:身份證號(pi)、姓名、電話號碼、家庭地址、開始工作日期 銀行支行:支行名、資產(chǎn)、城市
客戶:身份證號、姓名、街道、所在城市 賬戶:賬戶號、余額、最近訪問日期 支票賬戶:透支額 儲蓄賬戶:利率 2.3 實體關(guān)系確認
賬戶和支行:N:1定義關(guān)系為Relationship_accout_bank 客戶和貸款:M:N定義關(guān)系為Relationship_client_loan 客戶和員工:M:1 定義關(guān)系為 Relation_client_staff 貸款和支行:1:N 定義關(guān)系為 Relationship_loan_bank 客戶和賬戶:M:N 定義關(guān)系為 client__accout 貸款發(fā)放信息和貸款:N:1 定義關(guān)系為 Relationship_loan_pay 支行和員工:1:N 定義關(guān)系為Relationship_staff_bank
員工和員工:1:N 定義關(guān)系為 Relationship_lead
三、概念模型(CDM)
根據(jù)sybase power designer畫出概念模型(CDM),如下圖所示:
四、物理模型(PDM)
根據(jù)概念模型轉(zhuǎn)化成物理模型(PDM),如下圖所示:
第五篇:數(shù)據(jù)庫實驗報告
實驗4SQL高級應(yīng)用
【實驗?zāi)康摹?/p>
1、掌握在SQL SERVER 2005下進行數(shù)據(jù)還原的方法。
2、掌握SQL語句的查詢統(tǒng)計功能和數(shù)據(jù)更改功能。
【實驗內(nèi)容】
1.還原factory數(shù)據(jù)庫。
2.在factory數(shù)據(jù)庫上,完成如下各題。
(1)刪除factory數(shù)據(jù)庫上各個表之間建立的關(guān)系。(2)*顯示各職工的工資記錄和相應(yīng)的工資小計。
(3)*按性別和部門名的所有組合方式列出相應(yīng)的平均工資。
(4)在worker表中使用以下語句插入一個職工記錄。職工號:20;姓名:陳立;性別:女;出生日期:55/03/08;黨員否: 1;參加工作:75/10/10;部門號:4。
在depart表中使用以下語句插入一個部門記錄。部門號:5;部門名:設(shè)備處。對worker和depart表進行全外連接顯示職工的職工號、姓名和部門名,然后刪除這兩個插入的記錄。
(5)顯示最高工資的職工的職工號、姓名、部門名、工資發(fā)放日期和工資。(6)顯示最高工資的職工所在的部門名。
(7)顯示所有平均工資低于全部職工平均工資的職工的職工號和姓名。(8)*采用游標方式實現(xiàn)(6)小題的功能。(9)*采用游標方式實現(xiàn)(7)小題的功能。
(10)*先顯示worker表中的職工人數(shù),開始一個事務(wù),插入一個職工記錄,再顯示worker表中的職工人數(shù),回滾該事務(wù),最后顯示worker表中的職工人數(shù)。
【實驗報告要求】
1.第(1)寫出操作步驟。
2.其他各題寫出實現(xiàn)要求的命令/程序,并列出執(zhí)行結(jié)果。
【操作步驟】
1.還原factory數(shù)據(jù)庫。
2.在factory基礎(chǔ)上,有
(1)刪除factory數(shù)據(jù)庫上各個表之間建立的關(guān)系。
(2)*顯示各職工的工資記錄和相應(yīng)的工資小計。
Select 職工號,姓名,工資from salary Order by 職工號
Compute sum(工資)by 職工號
(3)*按性別和部門名的所有組合方式列出相應(yīng)的平均工資。
select worker.職工號,worker.性別,depart.部門名,avg(工資)as'平均工資' from worker inner join depart on worker.部門號=depart.部門號 inner join salary on worker.職工號=salary.職工號
group by worker.職工號,worker.性別,depart.部門名
order by worker.職工號
(4)在worker表中使用以下語句插入一個職工記錄。職工號:20;姓名:陳立;性別:女;出生日期:55/03/08;黨員否: 1;參加工作:75/10/10;部門號:4。
insert into worker values('20','陳立','女','1955-03-08','1','1975-10-10',4)
在depart表中使用以下語句插入一個部門記錄。部門號:5;部門名:設(shè)備處。
Insert into depart Values('5','設(shè)備處')對worker和depart表進行全外連接顯示職工的職工號、姓名和部門名,然后刪除這兩個插入的記錄。
use factory Select b.部門號,c.姓名
from salary a,departb,worker c delete from worker where 職工號=20 delete from depart where 部門號=5(5)顯示最高工資的職工的職工號、姓名、部門名、工資發(fā)放日期和工資。
Use factory Select b.部門名,c.職工號,c.姓名,b.部門名,a.日期,a.工資 from salary a,departb,worker c Where 工資in(select max(a.工資)from salary a)and a.職工號=c.職工號and b.部門號=c.部門號(6)顯示最高工資的職工所在的部門名。
Use factory Select b.部門名from salary a,departb,worker c Where 工資in(select max(a.工資)from salary a)and c.部門號=b.部門號and a.職工號=c.職工號
(7)顯示所有平均工資低于全部職工平均工資的職工的職工號和姓名。
Use factory Select a.職工號,a.姓名,avg(b.工資)as平均工資from worker a,salary b where a.職工號=b.職工號 group by a.職工號,a.姓名
having avg(工資)<(select avg(工資)from salary)