版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 《SQL數(shù)據(jù)庫(kù)技術(shù)》課程設(shè)計(jì)</p><p> 一、題目:學(xué)生成績(jī)管理</p><p> 二、因?yàn)槲易龅氖菍W(xué)生成績(jī)管理,所以數(shù)據(jù)庫(kù)中至少有個(gè)一個(gè)表是來(lái)存儲(chǔ)學(xué)生的各課成績(jī)的。有了學(xué)生成績(jī),得知道這個(gè)成績(jī)是哪個(gè)學(xué)生的,所以此表中也得有學(xué)生姓名,但是學(xué)生姓名肯定有重復(fù)的 ,所以得必須有個(gè)標(biāo)志來(lái)惟一標(biāo)識(shí)一個(gè)學(xué)生,所以得給每個(gè)學(xué)生一個(gè)編號(hào)(學(xué)號(hào)),但是也得必須清楚,這個(gè)成績(jī)
2、是哪門課程的,所以給課程定義了一個(gè)編號(hào)。之后,得想到有了學(xué)生成績(jī)表,總得有個(gè)表來(lái)存放學(xué)生信息吧,所以又建立一個(gè)學(xué)生信息表,此表中的必須的字段得有學(xué)號(hào)、姓名、班級(jí),其他的字段可以根據(jù)需要來(lái)添加。然后就是得有個(gè)課程表來(lái)存放哪個(gè)教師教哪門課程信息,所以此表中至少得有課程號(hào),課程名稱和教師的惟一標(biāo)識(shí)(教師編號(hào)),再有一個(gè)表來(lái)存放教師的信息的,其中的字段必須有教師編號(hào),教師姓名和所在的部門,當(dāng)然也可以有教師出生日期、職稱、電話號(hào)碼等字段。<
3、/p><p> 總之,這個(gè)學(xué)生管理系統(tǒng)總共包括四個(gè)表學(xué)生信息表student、教師信息表teacher、成績(jī)表score和課程表course。</p><p> Student表:在建表時(shí),除了添加學(xué)號(hào)、姓名、班級(jí)必要字段,還添加一些其他的字段,比如:出生日期、性別、郵箱地址和類型等。</p><p> Teacher表:在建表時(shí),除了添加教師編號(hào),教師姓名,部門
4、必要字段,還可以添加一些其他的字段,比如:出生日期、性別、和電話等。</p><p> Score表:此表應(yīng)該包括學(xué)生學(xué)號(hào)、課程號(hào)和成績(jī)等。</p><p> Course表:應(yīng)包括課程號(hào),對(duì)應(yīng)的課程名稱和教此課程的教師編號(hào)。</p><p> ?。?)、建立一個(gè)數(shù)據(jù)庫(kù),然后在此數(shù)據(jù)庫(kù)中建立這四個(gè)數(shù)據(jù)表。</p><p> ?。?)、向表
5、中添加記錄。</p><p> ?。?)、用一些查詢語(yǔ)句來(lái)查看表中的特定記錄。</p><p> ?。?)、向表中添加一些字段。如:向teacher表中添加字段 tel</p><p> ?。?)、創(chuàng)建一個(gè)自定義數(shù)據(jù)類型,并修改student表中的某個(gè)字段為此數(shù)據(jù)類型。</p><p> (6)、創(chuàng)建幾個(gè)視圖</p><
6、p> 查詢某個(gè)班級(jí)的學(xué)生信息</p><p> 查看每門課程的平均成績(jī)</p><p> 查看選修計(jì)算機(jī)課程的學(xué)生信息</p><p> 查看所有男教師和所有男學(xué)生的信息</p><p> ?。?)、創(chuàng)建幾個(gè)存儲(chǔ)過(guò)程</p><p> 顯示成績(jī)表中的課程號(hào)在課程表中且所任教師性別為男、計(jì)算機(jī)系的成績(jī)表&
7、lt;/p><p> 顯示某學(xué)生的學(xué)號(hào),姓名,所學(xué)課程號(hào),課程名稱和對(duì)應(yīng)的成績(jī)</p><p> 在執(zhí)行此存儲(chǔ)過(guò)程時(shí),如果沒(méi)有給出參數(shù)(學(xué)生姓名),則輸入全部的學(xué)生的學(xué)號(hào),姓名,班級(jí),任課教師編號(hào)及其姓名,所學(xué)課程名稱和成績(jī),如果有,則顯示此學(xué)生的以上信息。</p><p><b> (8)、創(chuàng)建觸發(fā)器</b></p><
8、p> 在成績(jī)表中建立一個(gè)觸發(fā)器,當(dāng)向表中添加記錄時(shí),此學(xué)生的成績(jī)都乘以1.2</p><p> 檢查學(xué)生的郵箱地址是否相同,如果相同,輸出'inserting fail',并且回滾事務(wù);如果不相同,則插入成功。</p><p> 在成績(jī)表建立一個(gè)觸發(fā)器,在向表中插入記錄時(shí),檢驗(yàn)插入的課程號(hào)是否在課程表中的課程號(hào)的范圍之內(nèi)。</p><p>
9、; ?。?)、創(chuàng)建規(guī)則,并綁定</p><p> 在向成績(jī)表中添加記錄時(shí),如果成績(jī)degree<0,則插入不成功。</p><p> 在向教師表中添加記錄時(shí),如果電話號(hào)碼不是0-9的數(shù)字,則插入不成功。</p><p> (10)、創(chuàng)建自定義函數(shù)和索引</p><p> 這些都在后面有完整的代碼和解釋。</p>&
10、lt;p> 三、四個(gè)表的E-R實(shí)體模型圖分析:</p><p> 1 N</p><p> N M</p><p> 在教學(xué)管理中,學(xué)校開(kāi)設(shè)若干門學(xué)科,一個(gè)教師可以教授其中的一門或多門課程,每個(gè)學(xué)生也需要學(xué)習(xí)其中的幾門課程,因此,教學(xué)管理中涉及的對(duì)象(實(shí)體型)有學(xué)生、教師和課程。用E-R圖描述它們之間的
11、聯(lián)系。如圖所示。其中,學(xué)生與課程是多對(duì)多的聯(lián)系,而教師與課程的聯(lián)系則是一對(duì)多。</p><p> 這四個(gè)表的總的實(shí)體-關(guān)系圖:</p><p> 四、設(shè)計(jì)數(shù)據(jù)表:通過(guò)E-R圖分析,現(xiàn)在已經(jīng)對(duì)數(shù)據(jù)庫(kù)有一個(gè)很清楚的認(rèn)識(shí)了。</p><p> 在此學(xué)生成績(jī)信息中有4個(gè)表需要建立</p><p> 學(xué)生信息表(student)包括學(xué)號(hào)(sno
12、)、姓名(sname)、性別(Ssex)、班級(jí)(class)、出生日期(sbirth)</p><p> 教師信息表( teacher)包括教師編號(hào)(tno)、姓名(tname)、性別(Tsex)、部門(depart)、職稱(prof)、出生日期(tbirth)</p><p> 成績(jī)表(score)包括學(xué)號(hào)(sno)、課程號(hào)(cno)、成績(jī)(degree)</p>&l
13、t;p> 課程信息表(course)包括課程號(hào)(cno)、課程名稱(cname)、教師編號(hào)(tno)</p><p><b> 五、表結(jié)構(gòu) </b></p><p> 主鍵是一個(gè)表通過(guò)一個(gè)列或多個(gè)列組合的數(shù)據(jù)來(lái)唯一標(biāo)識(shí)表中的每一行,這個(gè)列或列組合就被稱為主鍵,煮件可以來(lái)強(qiáng)制實(shí)體完整性。</p><p> 主鍵約束有以下特征和作用
14、:</p><p> ?。?)主鍵約束通過(guò)不允許一個(gè)或多個(gè)列輸入重復(fù)的值來(lái)保證一個(gè)表中所有行的惟一性,使所有浪都是可以區(qū)分的。</p><p> ?。?)一個(gè)表張只能有一個(gè)主鍵,且組成主鍵的列的數(shù)據(jù)都不能取空值。</p><p> (3)當(dāng)定義主鍵約束時(shí),SQL server在主鍵列上建立惟一性索引,這個(gè)索引在煮件被查詢時(shí)可以加快查詢的速度。</p>
15、<p> 在teacher表中,以教師編號(hào)tno為主鍵,對(duì)其進(jìn)行惟一性約束。</p><p> 在Course表中,以課程號(hào)為主鍵,對(duì)其進(jìn)行惟一性約束。 </p><p> 1、Student表:</p><p><b> score表結(jié)構(gòu):</b></p><p> Course表:以課程號(hào)為主鍵
16、,通過(guò)這個(gè)主鍵來(lái)對(duì)這個(gè)表進(jìn)行唯一性約束。</p><p> Teacher表結(jié)構(gòu):</p><p> 六、其他對(duì)象的說(shuō)明:</p><p> ?。?)、外鍵約束(primary key):外鍵也是由表中的一個(gè)列或多個(gè)列組成的,它是和在相關(guān)表中事先定義的具有惟一性的列一起使用的,該列一個(gè)是所在表的主鍵。外鍵約束用來(lái)建立和強(qiáng)制兩個(gè)表之間的關(guān)聯(lián),即一個(gè)表的一個(gè)列或列組
17、合與另一個(gè)表 的具有惟一性的列或列組合相關(guān),這個(gè)列或列組合就成為第一個(gè)表中的外鍵外鍵約束限制將破壞這種關(guān)聯(lián)的操作。作為外鍵的列的值可以是空值,或是它所引用的表中已經(jīng)存在的值。</p><p> 在score表中,其學(xué)號(hào)sno和課程號(hào)cno都是此表的外鍵約束,因?yàn)榇吮碇袑W(xué)號(hào)sno要受學(xué)生信息表中的學(xué)號(hào)的約束,student表中沒(méi)有的學(xué)號(hào),score表中也應(yīng)該沒(méi)有,如果向score表添加數(shù)據(jù)時(shí)違反的此規(guī)則,則添加不
18、成功。課程號(hào)cno也同樣,受到course表中課程號(hào)cno的約束.。</p><p> (2)、空值(null):空值意味著數(shù)據(jù)尚未如,它與0或長(zhǎng)度為零的字符串(“”)的含義不同。如果表中的某一列必須有值才能使記錄有意義,那么可以指明該列不允許取空值。</p><p> 在教師信息表teacher中其出生日期列tbirth和職稱prof允許為空,但并不表示該教師沒(méi)有生日,沒(méi)有職稱,而是
19、目前還不知道而已。在學(xué)生信息表student中其出生日期sbirth也可為空,也是同樣的道理。</p><p> (3)、check約束:檢查約束可以用來(lái)限制列上可以接受的數(shù)據(jù)值,檢查約束使用邏輯表達(dá)式來(lái)限制列上可以接受的數(shù)據(jù)??梢栽谝粋€(gè)列上使用多個(gè)檢查約束,也可以在表上建立一個(gè)可以在多個(gè)列上使用的檢查約束。</p><p> 比如:在學(xué)生信息表中,郵件地址semail的格式必須是%@
20、%格式的。</p><p> ?。?)、惟一性約束:使用惟一性約束的作用是保證在不是主鍵的指定惟一性的列上不會(huì)出現(xiàn)重復(fù)的數(shù)據(jù)。定義了惟一性約束的列上的數(shù)據(jù)可以為空值,一個(gè)表上可以定義多個(gè)惟一性約束。</p><p> 七、創(chuàng)建數(shù)據(jù)庫(kù)、數(shù)據(jù)表、視圖、存儲(chǔ)過(guò)程、自定義函數(shù)、觸發(fā)器等語(yǔ)句和測(cè)試語(yǔ)句</p><p><b> 1、創(chuàng)建數(shù)據(jù)庫(kù):</b>
21、;</p><p> create database ssh</p><p><b> on</b></p><p> ( name=ssh,</p><p> filename='e:\老大\sql\ssh.mdf',</p><p><b> size=1)
22、</b></p><p><b> log on</b></p><p> ( name=ssh1,</p><p> filename='e:\老大\sql\ssh1.ldf',</p><p><b> size=1)</b></p><p
23、><b> 2、創(chuàng)建數(shù)據(jù)表</b></p><p> ?。?)、student表</p><p><b> use ssh</b></p><p> create table student</p><p> (sno char(8) primary key,</p>&
24、lt;p> sname char(10) not null,</p><p> Ssex char(2) not null,</p><p> Sbirth datetime,</p><p> class char(4) not null </p><p> semail varchar(20))</p>&l
25、t;p> ?。?)、score表</p><p> create table score</p><p> (sno char(8) not null,</p><p> cno char(4) not null,</p><p> degree float not null)</p><p> (3)
26、、course表</p><p> create table course</p><p> (cno char(5) not null primary key,</p><p> cname varchar(10) not null,</p><p> tno char(3) not null )</p><p&
27、gt; ?。?)、teacher表</p><p> create table teacher</p><p> (tno char(5) not null primary key,</p><p> tname varchar(10) not null,</p><p> depart varchar(8) not null,<
28、;/p><p> Tsex char(2) not null,</p><p> Tbirth datetime ,</p><p> prof char(6) )</p><p><b> 4向表中添加記錄</b></p><p> ?。?)、向?qū)W生信息表中添加</p><
29、;p> insert into student values('101','生活','女','1983-09-18','11')</p><p> insert into student values('102','風(fēng)塵','男','1984-01-01',
30、39;11')</p><p> insert into student values('103','離開(kāi)','男','1984-01-01','11')</p><p> insert into student values('104','流浪','女
31、9;,'1984-11-11','11')</p><p> insert into student values('105','生命','男','1984-12-05','13')</p><p> insert into student values('106
32、39;,'無(wú)悔','女','1984-11-01','13')</p><p> insert into student values('107','歷史','女','1984-10-01','12')</p><p> insert into
33、 student values('108','風(fēng)塵','男','1985-9-08','11')</p><p> insert into student values('109','活著','男','1985-12-12','12')</p>
34、;<p> insert into student values('110','傻瓜','女','1985-08-28','12') </p><p><b> ………………</b></p><p><b> 查看記錄 </b></p>
35、<p> Select * from student</p><p> (2)、向成績(jī)表中添加</p><p> insert into score values('101','01',88)</p><p> insert into score values('101','02'
36、,85)</p><p> insert into score values('102','02',80)</p><p> insert into score values('101','03',88)</p><p> insert into score values('102'
37、;,'02',85)</p><p> insert into score values('102','03',80)</p><p> insert into score values('103','01',83)</p><p> insert into score value
38、s('103','02',85)</p><p> insert into score values('103','03',90)</p><p> insert into score values('104','01',60)</p><p><b>
39、…………</b></p><p><b> 查看記錄 </b></p><p> Select * from score</p><p> ?。?)、向教師表中添加數(shù)據(jù)</p><p> insert into course values('01','計(jì)算機(jī)','
40、11')</p><p> insert into course values('02','網(wǎng)絡(luò)管理','12')</p><p> insert into course values('03','專業(yè)英語(yǔ)','13')</p><p> insert in
41、to course values('04','軟件工程','14')</p><p><b> …………</b></p><p><b> 查看記錄 </b></p><p> Select * from course</p><p> ?。?)
42、、向課程表中添加數(shù)據(jù)</p><p> insert into teacher values('11','無(wú)意','計(jì)算機(jī)系','男','1973-4-5','教授')</p><p> insert into teacher values('12','生活'
43、,'計(jì)算機(jī)系','女','1975-12-1','副教授')</p><p> insert into teacher values('13','沒(méi)有','管理系','女','1975-3-3','副教授')</p><p>
44、insert into teacher values('14','離開(kāi)','英語(yǔ)系','男','1973-5-5','教授')</p><p><b> …………</b></p><p><b> 查看記錄 </b></p><
45、p> Select * from teacher</p><p><b> 5、一些查詢語(yǔ)句</b></p><p> ?。?)、查詢成績(jī)大于學(xué)號(hào)為101的學(xué)生的課程為02的成績(jī)的所有列。</p><p> select * from score where degree>(select degree from score w
46、here sno='101' and cno='02')</p><p> ?。?)、查詢課程號(hào)01大于課程號(hào)02的最大值、并以分?jǐn)?shù)降序排序的成績(jī)表中所有列</p><p> select * from score s where s.cno='01' and s.degree>=(select max(degree) from sc
47、ore y where y.cno='02' ) order by degree desc</p><p><b> go</b></p><p> select max(degree) as "02max" from score where cno='02'</p><p> (3)、
48、查詢性別為男的學(xué)號(hào),姓名,班級(jí),課程號(hào)和成績(jī)的學(xué)生</p><p> select student.sno,student.sname,student.class,score.cno,score.degree from student,score where student.sno=score.sno and ssex='男'</p><p> ?。ǎ矗⒉樵兂煽?jī)?cè)?0到
49、80之間的所有列</p><p> select * from score where degree between 60 and 80</p><p> ?。ǎ担⒉樵僺core表中至少有5名學(xué)生選修的并以0開(kāi)頭的課程的平均分</p><p> select avg(degree) as "平均分",cno from score where
50、 cno like '0%' group by cno having count(*)>=5</p><p> 6、創(chuàng)建自定義數(shù)據(jù)類型</p><p> 創(chuàng)建一個(gè)email自定義數(shù)據(jù)類型</p><p> exec sp_addtype email, 'varchar(20)' , 'null'</p
51、><p> 修改student表中的semail數(shù)據(jù)類型為email類型</p><p> alter table student alter column semail email</p><p><b> 7、向表中添加字段</b></p><p> 向student表添加type,semail,,b并且郵件地址
52、有check約束</p><p> alter table student add type char(7)</p><p> alter table student add semail varchar(20) null constraint ck_sem check (semail like '%@%')</p><p> alter ta
53、ble teacher add tel varchar(15)</p><p><b> 8、創(chuàng)建視圖</b></p><p> ?。?)、創(chuàng)建所有11班的學(xué)生信息的視圖</p><p> create view student11</p><p><b> as </b></p>
54、<p> select * from student where class='11'</p><p><b> 查看視圖中的記錄</b></p><p> select * from student11</p><p> (2)、創(chuàng)建視圖course_degree,其中的內(nèi)容是選修計(jì)算機(jī)課程的學(xué)生信息,包
55、括(sno,sname,cno,cname,degree),創(chuàng)建時(shí)加上with check option</p><p> create view course_degree(sno,sname,cno,cname,degree)</p><p><b> as </b></p><p> select score.sno,sname,
56、score.cno,cname,degree from course ,student, score </p><p> where score.cno=course.cno and student.sno=score.sno and cname='計(jì)算機(jī)'</p><p> with check option</p><p><b>
57、; 查看視圖中的記錄</b></p><p> select * from course_degree</p><p> ?。?)、創(chuàng)建一個(gè)視圖,其中的內(nèi)容是成績(jī)表中每門課程的</p><p> create view average</p><p><b> as </b></p>&
58、lt;p> select avg(degree) as '平均分' from score group by cno</p><p><b> 查看視圖中的記錄</b></p><p> select * from average </p><p> ?。?)、創(chuàng)建視圖其中的內(nèi)容是所有男教師和男學(xué)生的name,se
59、x,birth</p><p> create view man</p><p><b> as</b></p><p> select sname as name,ssex as sex,sbirth as birth from student where ssex='男'</p><p> u
60、nion select tname,tsex,tbirth from teacher where tsex='男'</p><p><b> 查看視圖中的記錄</b></p><p> select * from man</p><p><b> 9、創(chuàng)建規(guī)則</b></p><
61、p> 規(guī)則的作用月CHECK約束的部分功能相同,在向表中的某列插入或更新數(shù)據(jù)時(shí),用它來(lái)限制輸入的新值的取值范圍。而它與CHECK約束不同的是:</p><p> CHECK約束是用CREATE TABLE語(yǔ)句在建表時(shí)指定的,而規(guī)則需要作為單獨(dú)的數(shù)據(jù)庫(kù)對(duì)象來(lái)實(shí)現(xiàn)。</p><p> 在一個(gè)列上只能使用一個(gè)規(guī)則。但可以使用多個(gè)CHECK約束。</p><p>
62、; 規(guī)則可以應(yīng)用于多個(gè)列,還可以應(yīng)用于用戶自定義的數(shù)據(jù)類型,而CHECK約束只能應(yīng)用于它定義的列。</p><p> ?。?)、創(chuàng)建一個(gè)degree_rule規(guī)則</p><p> create rule degree_rule</p><p><b> as</b></p><p><b> @val
63、ues>0</b></p><p> 把此規(guī)則綁定到score表中degree列</p><p> exec sp_bindrule 'degree_rule','score.degree'</p><p> 在向成績(jī)表中添加記錄時(shí),如果成績(jī)degree<0,則插入不成功。</p><
64、p> (2)、創(chuàng)建一個(gè)tel_rule規(guī)則</p><p> create rule tel_rule</p><p><b> as </b></p><p> @value like '[0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9]'</p><
65、;p> 把此規(guī)則綁定到teacher表中tel列</p><p> exec sp_bindrule 'tel_rule','teacher.tel'</p><p> 在向教師表中添加記錄時(shí),如果電話號(hào)碼不是0-9的數(shù)字,則插入不成功。</p><p><b> 10、創(chuàng)建存儲(chǔ)過(guò)程</b><
66、/p><p> 存儲(chǔ)過(guò)程是存儲(chǔ)在服務(wù)器上的例行程序及過(guò)程,在SQL SERVER只能感定義某個(gè)過(guò)程,其中記錄了一系列的造作,每次應(yīng)用程序只需調(diào)用該過(guò)程就可完成該操作,這種SQL SERVER中定義的過(guò)程就被稱為存儲(chǔ)過(guò)程。它可以完成以下功能:</p><p> 接受輸入?yún)?shù)并返回多個(gè)輸出值。</p><p> 包含T-SQL語(yǔ)句用以完成特定的SQL SERVER操作
67、,其中可以有對(duì)其他存儲(chǔ)過(guò)程的調(diào)用。</p><p> 返回一個(gè)指示成功與否及失敗原因的狀態(tài)代碼給調(diào)用它的過(guò)程。</p><p> 存儲(chǔ)過(guò)程不能接用過(guò)程名返回值,也不能直接在表達(dá)式中使用。</p><p> ?。?)、創(chuàng)建一個(gè)存儲(chǔ)過(guò)程,來(lái)顯示成績(jī)表中的課程號(hào)在課程表中并且所任教師性別為男、所在部門是計(jì)算機(jī)系的成績(jī)表中的列</p><p>
68、 create proc student_11</p><p><b> as </b></p><p> select * from score where cno in (select cno from course ,teacher where course.tno=teacher.tno and depart='計(jì)算機(jī)系' and tsex
69、='男')</p><p><b> 調(diào)用此存儲(chǔ)過(guò)程</b></p><p> Exec student_11 </p><p> ?。?)、創(chuàng)建一個(gè)帶輸入?yún)?shù)的存儲(chǔ)過(guò)程,調(diào)用此存儲(chǔ)過(guò)程時(shí),給出一個(gè)學(xué)生名,顯示出此學(xué)生的學(xué)號(hào),姓名,所學(xué)課程號(hào),課程名稱和對(duì)應(yīng)的成績(jī)</p><p> create p
70、roc student_name</p><p> @sname varchar(10)</p><p><b> as </b></p><p> select student.sno,sname,score.cno,degree cname from student,score,course </p><p>
71、 where student.sno=score.sno and score.cno=course.cno and sname=@sname</p><p> 調(diào)用此存儲(chǔ)過(guò)程,(此例是輸出姓名為歷史的學(xué)生的信息)</p><p> exec student_name '歷史'</p><p> ?。?)、創(chuàng)建一個(gè)存儲(chǔ)過(guò)程,在執(zhí)行此存儲(chǔ)過(guò)程時(shí),如
72、果沒(méi)有給出參數(shù)(學(xué)生姓名),則輸入全部的學(xué)生的學(xué)號(hào),姓名,班級(jí),任課教師編號(hào)及其姓名,所學(xué)課程名稱和成績(jī),如果有,則顯示此學(xué)生的以上信息。</p><p> create proc student_teacher</p><p> @sname varchar(10)=null</p><p><b> as</b></p>
73、<p> if @sname is null</p><p> select student.sno,sname,student.class,teacher.tno,teacher.tname,degree,cname from student,score,course,teacher</p><p> where student.sno=score.sno and sc
74、ore.cno=course.cno and course.tno=teacher.tno</p><p><b> else</b></p><p> select student.sno,sname,student.class,teacher.tno,teacher.tname,degree,cname from student,score,course,te
75、acher</p><p> where student.sno=score.sno and score.cno=course.cno and course.tno=teacher.tno and sname=@sname</p><p><b> 調(diào)用此存儲(chǔ)過(guò)程 </b></p><p> exec student_teacher(沒(méi)有
76、實(shí)參) </p><p> exec student_teacher '歷史' (查詢姓名為歷史的學(xué)生的選課信息和成績(jī))</p><p> (4)、創(chuàng)建一個(gè)存儲(chǔ)過(guò)程,傳遞一個(gè)學(xué)生姓名,先判斷此學(xué)生是否有郵箱,如果有,則顯示此學(xué)生的姓名,郵箱地址,學(xué)號(hào),班級(jí);如果沒(méi)有的話,輸出此句話'the semail is empty'</p><
77、p> create proc student_email</p><p> @sname varchar(10)</p><p><b> as</b></p><p><b> begin</b></p><p> if (select semail from student wh
78、ere sname=@sname) is null</p><p><b> begin</b></p><p> print'the semail is empty'</p><p><b> end</b></p><p><b> else</b>
79、</p><p> select sname,semail,sno,class from student where sname=@sname</p><p><b> end</b></p><p><b> 調(diào)用此存儲(chǔ)過(guò)程</b></p><p> exec student_email
80、'super'</p><p> 當(dāng)給出姓名的那個(gè)學(xué)生沒(méi)有郵箱地址時(shí),則會(huì)顯示如下內(nèi)容。</p><p> exec student_email dfdf'</p><p><b> 11、觸發(fā)器</b></p><p> 觸發(fā)器是一種特殊的存儲(chǔ)過(guò)程,它不能顯式地調(diào)用,而是在往表中插入記錄
81、、更新記錄或者刪除記錄時(shí),被自動(dòng)的激活。所以,觸發(fā)器可以用來(lái)對(duì)表實(shí)施復(fù)雜的完整性約束,當(dāng)觸發(fā)器所保護(hù)的數(shù)據(jù)發(fā)生改變時(shí),觸發(fā)器會(huì)自動(dòng)被激活,從而防止對(duì)數(shù)據(jù)的不正確修改。在觸發(fā)器中卡儀查詢其他表,也可以執(zhí)行更復(fù)雜的T-SQL語(yǔ)句。如果發(fā)現(xiàn)引起觸發(fā)器執(zhí)行的T-SQL語(yǔ)句執(zhí)行了一個(gè)非法的操作,則可以通過(guò)回滾事務(wù)使語(yǔ)句不能執(zhí)行,回滾后SQL SERVER會(huì)自動(dòng)返回到此事務(wù)執(zhí)行前的狀態(tài)。</p><p> SQL SERV
82、ER為每個(gè)觸發(fā)器都查了兩個(gè)專用表,inserted表和deleted表.這兩個(gè)表的結(jié)構(gòu)總是與被該觸發(fā)器作用的表的結(jié)構(gòu)相同。觸發(fā)器執(zhí)行完成后,與該觸發(fā)器相關(guān)的這兩個(gè)表也會(huì)被刪除。</p><p> 一個(gè)表中可以有多個(gè)具有不同名稱的各種類型的觸發(fā)器,每個(gè)觸發(fā)器都可以完成不同的功能,但每個(gè)觸發(fā)器只能作用在一個(gè)表上。</p><p> ?。?)、創(chuàng)建一個(gè)觸發(fā)器,來(lái)檢查學(xué)生的郵箱地址是否相同,如果
83、相同,輸出'inserting fail',并且回滾事務(wù);如果不相同,則插入成功。</p><p> create trigger studentinsert</p><p> on student</p><p> after insert</p><p><b> as </b></p&
84、gt;<p> if (select semail from inserted where semail in (select semail from student)) is not null</p><p><b> begin</b></p><p> print 'inserting fail'</p>
85、<p> rollback transaction</p><p><b> end</b></p><p><b> else</b></p><p> print'insering succeed'</p><p> 向?qū)W生信息表中插入一條記錄,檢驗(yàn)是否成功插
86、入</p><p> insert into student values('114','lengbing','女','1985-12-12','11','lengbingssh@sina.com','一般')</p><p> ?。?)、在成績(jī)表中建立一個(gè)觸發(fā)器,當(dāng)向表中添加
87、記錄時(shí),此學(xué)生的成績(jī)都乘以1.2</p><p> create trigger scoreupdate on score</p><p> after insert</p><p><b> as </b></p><p> update score set degree=degree*1.2 from sco
88、re where sno in (select sno from inserted )</p><p> 向表中插入一條記錄,檢驗(yàn)觸發(fā)器是否有用。</p><p> insert into score values('108','01','56')</p><p> ?。?)、在成績(jī)表建立一個(gè)觸發(fā)器,在向表中插入記
89、錄時(shí),檢驗(yàn)插入的課程號(hào)是否在課程表中的課程號(hào)的范圍之內(nèi)。如果在,則插入成功;否則,提示信息'沒(méi)有這門課程',回滾事務(wù)。</p><p> create trigger course_score</p><p><b> on score</b></p><p> after insert</p><p&
90、gt;<b> as </b></p><p> if (select cno from inserted where cno in(select cno from course)) is null</p><p><b> begin </b></p><p> print'沒(méi)有這門課程'<
91、/p><p> rollback transaction</p><p><b> end</b></p><p> 向表中添加一條記錄,進(jìn)行驗(yàn)證。</p><p> insert into score values('108','06','60')</p>
92、<p><b> 12、自定義函數(shù)</b></p><p> 函數(shù)是由一條或多條T-SQL語(yǔ)句組成的代碼段,用語(yǔ)實(shí)現(xiàn)一些常用的功能,編寫好的函數(shù)可以重復(fù)使用。用戶自定義函數(shù)可以接受零個(gè)或多個(gè)輸入?yún)?shù),函數(shù)的返回值可以是一個(gè)數(shù)值,也可以是一個(gè)表。用戶自定義函數(shù)有三種類型:</p><p> 返回?cái)?shù)值的用戶自定義函數(shù)</p><p&
93、gt; 內(nèi)聯(lián)(單語(yǔ)句)的返回表的用戶自定義函數(shù)</p><p> 多語(yǔ)句的返回表的用戶自定義函數(shù)</p><p> ?。?)、創(chuàng)建一個(gè)用戶自定義函數(shù),輸出與指定的學(xué)生同班的學(xué)生個(gè)數(shù)</p><p> create function studentcount</p><p> (@sno char(5))</p><
94、p> returns int</p><p><b> begin</b></p><p> eclare @counter int</p><p> select @counter=count(*) from student where class=(select class from student where sno=@sn
95、o)</p><p> return @counter</p><p><b> end</b></p><p> 調(diào)用此自定義函數(shù)(本例是查找與學(xué)號(hào)102同班的學(xué)生個(gè)數(shù))</p><p> declare @a int</p><p> set @a=dbo.studentcount(
96、'102')</p><p> print convert(char(3),@a)</p><p> (2)、創(chuàng)建一個(gè)用戶自定義函數(shù),用于輸出同一個(gè)班級(jí)中的學(xué)生信息</p><p> create function studentclass</p><p> (@class char(5))</p>&l
97、t;p> returns table</p><p> return(select * from student where class=@class)</p><p> 調(diào)用自定義函數(shù)(本例是輸出12班的學(xué)生信息)</p><p> select * from studentclass('12')</p><p&g
98、t; (3)、創(chuàng)建一個(gè)自定義函數(shù),把某一學(xué)生所學(xué)課程名稱,課程號(hào)及其成績(jī)插入一個(gè)臨時(shí)表中顯示出來(lái)。</p><p> create function studentscore</p><p> (@sno varchar(5))</p><p> returns @student_score table</p><p> (sno
99、char(5),</p><p> sname varchar(10),</p><p> cno char(5),</p><p> cname varchar(10),</p><p> degree float)</p><p><b> begin</b></p>
100、<p> insert @student_score</p><p> select student.sno,sname,score.cno,cname,degree from student,score,course</p><p> where student.sno=score.sno and score.cno=course.cno and student.sno=
101、@sno </p><p><b> return</b></p><p><b> end</b></p><p> 查看學(xué)號(hào)為103的學(xué)生的各科成績(jī)。</p><p> select * from studentscore('103')</p><p&
102、gt;<b> 13、建立索引</b></p><p> SQL SERVER的索引是一種物理結(jié)構(gòu),它能夠提供一種以一列或多列的值為基礎(chǔ)迅速查找表中行的能力。索引中記錄了表中的關(guān)鍵值,提供了指向表中行的指針。它既可以在定義表時(shí)創(chuàng)建,也可以在定義表之后的任何時(shí)候創(chuàng)建。索引可以創(chuàng)建在一個(gè)列或多個(gè)列的組合上。</p><p> ?。?)、在學(xué)生信息表郵箱列上創(chuàng)建一個(gè)惟一
103、性的非聚簇索引</p><p> create unique nonclustered index ix_semail on student(semail)</p><p> ?。?)、在學(xué)生信息表的學(xué)號(hào)列上創(chuàng)建一個(gè)惟一性聚簇索引</p><p> create unique clustered index ix_sno on student (sno desc
104、)</p><p> ?。?)、在教師信息表的姓名列上創(chuàng)建一個(gè)非惟一性的非聚簇索引</p><p> create nonclustered index ix_name on teacher(tname)</p><p> 八、以上這些東西都是老師平時(shí)讓我們做的實(shí)驗(yàn)的一個(gè)匯總,然后再在里面加入了一些我個(gè)人的想法設(shè)計(jì),仿照以前的實(shí)驗(yàn),又增加了一些東西??偟膩?lái)說(shuō),是
105、把以前老師講的知識(shí)又串了一下,又熟悉了許多,很多以前沒(méi)有弄明白的知識(shí)點(diǎn),通過(guò)這次課程設(shè)計(jì),差不多都掌握了,對(duì)于那些像觸發(fā)器、存儲(chǔ)過(guò)程、自定義函數(shù)、視圖等等應(yīng)用程序的建立、使用方法和作用,我又有了更深一步的了解和掌握。但是還有很多欠缺,就像我做這些東西,感覺(jué)沒(méi)有一定的邏輯順序,好象之間沒(méi)有多大的聯(lián)系似的,所以還要更進(jìn)一步的完善,但是由于時(shí)間緊迫,沒(méi)有辦法完善它。</p><p> 做此課程設(shè)計(jì)過(guò)程中,得到老師和同
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫(kù)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 學(xué)生成績(jī)管理系統(tǒng)課程設(shè)計(jì)
- 課程設(shè)計(jì)——學(xué)生成績(jī)管理系統(tǒng)
- 課程設(shè)計(jì)---學(xué)生成績(jī)管理系統(tǒng)
- 學(xué)生成績(jī)管理系統(tǒng)課程設(shè)計(jì)
- 學(xué)生成績(jī)管理匯編課程設(shè)計(jì)
- 學(xué)生成績(jī)管理系統(tǒng)課程設(shè)計(jì)
- 學(xué)生成績(jī)管理課程設(shè)計(jì)
- 學(xué)生成績(jī)管理課程設(shè)計(jì)
- 學(xué)生成績(jī)管理系統(tǒng)課程設(shè)計(jì)
- 學(xué)生成績(jī)管理系統(tǒng)課程設(shè)計(jì)
- 匯編課程設(shè)計(jì)---學(xué)生成績(jī)管理
- 學(xué)生成績(jī)管理系統(tǒng) 課程設(shè)計(jì)
- 課程設(shè)計(jì)--學(xué)生成績(jī)管理系統(tǒng)
- 學(xué)生成績(jī)管理系統(tǒng)課程設(shè)計(jì)
- 課程設(shè)計(jì)-- 學(xué)生成績(jī)管理系統(tǒng)
- 學(xué)生成績(jī)管理系統(tǒng)課程設(shè)計(jì)
- 學(xué)生成績(jī)管理課程設(shè)計(jì)
- 學(xué)生成績(jī)管理系統(tǒng)課程設(shè)計(jì)9
- 學(xué)生成績(jī)管理系統(tǒng)課程設(shè)計(jì)10
- vfp課程設(shè)計(jì)--- 學(xué)生成績(jī)管理系統(tǒng)
評(píng)論
0/150
提交評(píng)論