日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

SQL存储过程实例详解

發(fā)布時(shí)間:2023/12/14 数据库 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 SQL存储过程实例详解 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

SQL存儲(chǔ)過程實(shí)例詳解

本文用3個(gè)題目,從建立數(shù)據(jù)庫到創(chuàng)建存儲(chǔ)過程,詳細(xì)講解數(shù)據(jù)庫的功能。

題目1

學(xué)校圖書館借書信息管理系統(tǒng)建立三個(gè)表:
學(xué)生信息表:student

字段名稱

數(shù)據(jù)類型

說明

stuID

char(10)

學(xué)生編號(hào),主鍵

stuName

Varchar(10)

學(xué)生名稱

major

Varchar(50)

專業(yè)

? ? ? ? 圖書表:book

字段名稱

數(shù)據(jù)類型

說明

stuID

char(10)

學(xué)生編號(hào),主鍵

stuName

Varchar(10)

學(xué)生名稱

major

Varchar(50)

專業(yè)

? ? ? ? 借書信息表:borrow

字段名稱

數(shù)據(jù)類型

說明

borrowID

char(10)

借書編號(hào),主鍵

stuID

char(10)

學(xué)生編號(hào),外鍵

BID

char(10)

圖書編號(hào),外鍵

T_time

datetime

借書日期

B_time

datetime

還書日期

? ? ? ??請編寫SQL語句完成以下的功能:
1) 查詢“計(jì)算機(jī)”專業(yè)學(xué)生在“2007-12-15”至“2008-1-8”時(shí)間段內(nèi)借書的學(xué)生編號(hào)、學(xué)生名稱、圖書編號(hào)、圖書名稱、借出日期;參考查詢結(jié)果如下圖所示:
2) 查詢所有借過圖書的學(xué)生編號(hào)、學(xué)生名稱、專業(yè);參考查詢結(jié)果如下圖所示:

3) 查詢借過作者為“安意如”的圖書的學(xué)生姓名、圖書名稱、借出日期、歸還日期;參考查詢結(jié)果如下圖所示:

4) 查詢目前借書但未歸還圖書的學(xué)生名稱及未還圖書數(shù)量;參考查詢結(jié)果如下圖所示:

附加:建表語句: USE master GO /*$$$$$$$$$$$$$建庫$$$$$$$$$$$$$$$$$$$$$$$$*/ --檢驗(yàn)數(shù)據(jù)庫是否存在,如果為真,刪除此數(shù)據(jù)庫-- IF exists(SELECT * FROM sysdatabases WHERE name='BOOK')DROP DATABASE BOOK GO CREATE DATABASE BOOK GO--建數(shù)據(jù)表-- USE BOOK GO CREATE TABLE student --學(xué)生信息表 (stuID CHAR(10) primary key, --學(xué)生編號(hào)stuName CHAR(10) NOT NULL , --學(xué)生名稱major CHAR(50) NOT NULL --專業(yè) ) GO CREATE TABLE book --圖書表 (BID CHAR(10) primary key, --圖書編號(hào)title CHAR(50) NOT NULL, --書名author CHAR(20) NOT NULL, --作者 ) GO CREATE TABLE borrow --借書表 (borrowID CHAR(10) primary key, --借書編號(hào) stuID CHAR(10) foreign key(stuID) references student(stuID), --學(xué)生編號(hào) BID CHAR(10) foreign key(BID) references book(BID),--圖書編號(hào)T_time datetime NOT NULL, --借出日期B_time datetime --歸還日期 ) GO--學(xué)生信息表中插入數(shù)據(jù)-- INSERT INTO student(stuID,stuName,major)VALUES('1001','林林','計(jì)算機(jī)') INSERT INTO student(stuID,stuName,major)VALUES('1002','白楊','計(jì)算機(jī)') INSERT INTO student(stuID,stuName,major)VALUES('1003','虎子','英語') INSERT INTO student(stuID,stuName,major)VALUES('1004','北漂的雪','工商管理') INSERT INTO student(stuID,stuName,major)VALUES('1005','五月','數(shù)學(xué)') --圖書信息表中插入數(shù)據(jù)-- INSERT INTO book(BID,title,author)VALUES('B001','人生若只如初見','安意如') INSERT INTO book(BID,title,author)VALUES('B002','入學(xué)那天遇見你','晴空') INSERT INTO book(BID,title,author)VALUES('B003','感謝折磨你的人','如娜') INSERT INTO book(BID,title,author)VALUES('B004','我不是教你詐','劉庸') INSERT INTO book(BID,title,author)VALUES('B005','英語四級','白雪') --借書信息表中插入數(shù)據(jù)-- INSERT INTO borrow(borrowID,stuID,BID,T_time,B_time)VALUES('T001','1001','B001','2007-12-26',null) INSERT INTO borrow(borrowID,stuID,BID,T_time,B_time)VALUES('T002','1004','B003','2008-1-5',null) INSERT INTO borrow(borrowID,stuID,BID,T_time,B_time)VALUES('T003','1005','B001','2007-10-8','2007-12-25') INSERT INTO borrow(borrowID,stuID,BID,T_time,B_time)VALUES('T004','1005','B002','2007-12-16','2008-1-7') INSERT INTO borrow(borrowID,stuID,BID,T_time,B_time)VALUES('T005','1002','B004','2007-12-22',null) INSERT INTO borrow(borrowID,stuID,BID,T_time,B_time)VALUES('T006','1005','B005','2008-1-6',null) INSERT INTO borrow(borrowID,stuID,BID,T_time,B_time)VALUES('T007','1002','B001','2007-9-11',null) INSERT INTO borrow(borrowID,stuID,BID,T_time,B_time)VALUES('T008','1005','B004','2007-12-10',null) INSERT INTO borrow(borrowID,stuID,BID,T_time,B_time)VALUES('T009','1004','B005','2007-10-16','2007-12-18') INSERT INTO borrow(borrowID,stuID,BID,T_time,B_time)VALUES('T010','1002','B002','2007-9-15','2008-1-5') INSERT INTO borrow(borrowID,stuID,BID,T_time,B_time)VALUES('T011','1004','B003','2007-12-28',null) INSERT INTO borrow(borrowID,stuID,BID,T_time,B_time)VALUES('T012','1002','B003','2007-12-30',null)? ? ? ? 標(biāo)準(zhǔn)答案: -- 1)查詢“計(jì)算機(jī)”專業(yè)學(xué)生在“2007-12-15”至“2008-1-8”時(shí)間段內(nèi)借書的學(xué)生編號(hào)、學(xué)生名稱、圖書編號(hào)、圖書名稱、借出日期—
select 學(xué)生編號(hào)=stuID,學(xué)生名稱=(select stuName from student where stuID=borrow.stuID),圖書編號(hào)=BID,圖書名稱=(select title from book where BID=borrow.BID),借出日期=T_time from borrow where stuID in (select stuID from student where major='計(jì)算機(jī)') and T_time>'2007-12-15' and T_time<'2008-1-8'-- 2)查詢所有借過圖書的學(xué)生編號(hào)、學(xué)生名稱、專業(yè)--
select 學(xué)生編號(hào)=stuID,學(xué)生名稱=stuName,專業(yè)=major from student where stuID in (select stuID from borrow)-- 3)查詢借過作者為“安意如”的圖書的學(xué)生姓名、圖書名稱、借出日期--
select 學(xué)生名稱=(select stuName from student where stuID=borrow.stuID),圖書名稱=(select title from book where BID=borrow.BID),借出日期=T_time,歸還日期=B_time from borrow where BID in (select BID from book where author='安意如') -- 4)查詢目前借書但未歸還圖書的學(xué)生名稱及未還圖書數(shù)量--
select 學(xué)生名稱=(select stuName from student where stuID=borrow.stuID),借書數(shù)量=count(*) from borrow where B_time is null group by stuID

題目2

程序員工資表:ProWage

字段名稱

數(shù)據(jù)類型

說明

ID

int

自動(dòng)編號(hào),主鍵

PName

Char(10)

程序員姓名

Wage

int

工資

? ? ? ? 創(chuàng)建一個(gè)存儲(chǔ)過程,對程序員的工資進(jìn)行分析,月薪1500到10000不等,如果有百分之五十的人薪水不到2000元,給所有人加薪,每次加100,再進(jìn)行分析,直到有一半以上的人大于2000元為止,存儲(chǔ)過程執(zhí)行完后,最終加了多少錢?
例如:如果有百分之五十的人薪水不到2000,給所有人加薪,每次加100元,直到有一半以上的人工資大于2000元,調(diào)用存儲(chǔ)過程后的結(jié)果如圖:

請編寫T-SQL來實(shí)現(xiàn)如下功能:
1) 創(chuàng)建存儲(chǔ)過程,查詢是否有一半程序員的工資在2200、3000、3500、4000、5000或6000元之上,如果不到分別每次給每個(gè)程序員加薪100元,至之一半程序員的工資達(dá)到2200,3000,3500,4000,5000或6000元。
2) 創(chuàng)建存儲(chǔ)過程,查詢程序員平均工資在4500元,如果不到則每個(gè)程序員每次加200元,至到所有程序員平均工資達(dá)到4500元。
建表語句: USE master GO /*$$$$$$$$$$$$$建庫$$$$$$$$$$$$$$$$$$$$$$$$*/ --檢驗(yàn)數(shù)據(jù)庫是否存在,如果為真,刪除此數(shù)據(jù)庫-- IF exists(SELECT * FROM sysdatabases WHERE name='Wage')DROP DATABASE Wage GO CREATE DATABASE Wage GO--建數(shù)據(jù)表-- USE Wage GO CREATE TABLE ProWage --程序員工資表 (ID int identity(1,1) primary key, --工資編號(hào)PName CHAR(10) NOT NULL , --程序員姓名Wage int NOT NULL --工資 ) GO --插入數(shù)據(jù)-- INSERT INTO ProWage(PName,Wage)VALUES('青鳥',1900) INSERT INTO ProWage(PName,Wage)VALUES('張三',1200) INSERT INTO ProWage(PName,Wage)VALUES('李四',1800) INSERT INTO ProWage(PName,Wage)VALUES('二月',3500) INSERT INTO ProWage(PName,Wage)VALUES('藍(lán)天',2780)? ? ? ? 標(biāo)準(zhǔn)答案: --1、創(chuàng)建存儲(chǔ)過程-- if exists (select * from sysobjects where name='Sum_wage') drop procedure Sum_wage GO create procedure Sum_wage @PWage int, @AWage int, @total int as while (1=1) begin if (select count(*) from ProWage)>2*(select count(*) from ProWage where Wage>=@PWage) update ProWage set @total=@total+@AWage,Wage=Wage+@AWage else break end print'一共加薪:'+convert(varchar,@total)+'元' print'加薪后的程序員工資列表:' select * from ProWage --調(diào)用存儲(chǔ)過程1-- exec Sum_wage @PWage=2000,@AWage=100,@total=0 exec Sum_wage @PWage=2200,@AWage=100,@total=0 exec Sum_wage @PWage=3000,@AWage=100,@total=0 exec Sum_wage @PWage=4000,@AWage=100,@total=0 exec Sum_wage @PWage=5000,@AWage=100,@total=0 exec Sum_wage @PWage=6000,@AWage=100,@total=0--2、創(chuàng)建存儲(chǔ)過程2-- if exists (select * from sysobjects where name='Avg_wage') drop procedure Avg_wage GO create procedure Avg_wage @PWage int, @AWage int, @total int as while (1=1) begin if ((select Avg(Wage) from ProWage)<=@PWage) update ProWage set @total=@total+@AWage,Wage=Wage+@AWage else break end print'一共加薪:'+convert(varchar,@total)+'元' print'加薪后的程序員工資列表:' select * from ProWage --調(diào)用存儲(chǔ)過程-- exec Avg_wage @PWage=3000,@AWage=200,@total=0 exec Avg_wage @PWage=4500,@AWage=200,@total=0

題目3

學(xué)生成績信息三個(gè)表,結(jié)構(gòu)如下:?
? ? ? ? 學(xué)生表:Member

字段名稱

數(shù)據(jù)類型

說明

MID

Char(10)

學(xué)生號(hào),主鍵

MName

Char(50)

姓名

? ? ? ? 課程表:F

字段名稱

數(shù)據(jù)類型

說明

FID

Char(10)

課程,主鍵

FName

Char(50)

課程名

? ? ? ? 成績表:Score

字段名稱

數(shù)據(jù)類型

說明

SID

int

自動(dòng)編號(hào),主鍵,成績記錄號(hào)

FID

Char(10)

課程號(hào),外鍵

MID

Char(10)

學(xué)生號(hào),外鍵

Score

int

成績

? ? ? ? 請編寫T-SQL語句來實(shí)現(xiàn)如下功能:
1) 查詢各個(gè)學(xué)生語文、數(shù)學(xué)、英語、歷史課程成績,例如下表:

姓名

語文

數(shù)學(xué)

英語

歷史

張薩

78?

67

89

76

王強(qiáng)

89

67

84

96

李三

70

87

92

56

李四

80

78

97

66

2) 查詢四門課中成績低于70分的學(xué)生及相對應(yīng)課程名和成績。
3) 統(tǒng)計(jì)各個(gè)學(xué)生參加考試課程的平均分,且按平均分?jǐn)?shù)由高到底排序。
4) 創(chuàng)建存儲(chǔ)過程,分別查詢參加1、2、3、4門考試及沒有參加考試的學(xué)生名單,要求顯示姓名、學(xué)號(hào)。
建表語句: USE master GO /*$$$$$$$$$$$$$建庫$$$$$$$$$$$$$$$$$$$$$$$$*/ --檢驗(yàn)數(shù)據(jù)庫是否存在,如果為真,刪除此數(shù)據(jù)庫-- IF exists(SELECT * FROM sysdatabases WHERE name='Student')DROP DATABASE Student GO CREATE DATABASE Student GO--建數(shù)據(jù)表-- USE Student GO CREATE TABLE Member --學(xué)生表 (MID char(10) primary key, --學(xué)生號(hào)MName CHAR(50) NOT NULL --姓名 ) GO CREATE TABLE F --課程表 (FID char(10) primary key, --課程號(hào) FName CHAR(50) NOT NULL --課程名 ) GO CREATE TABLE score --學(xué)生成績表 (SID int identity(1,1) primary key, --成績記錄號(hào)FID char(10) foreign key(FID) references F(FID) , --課程號(hào)MID char(10) foreign key(MID) references Member(MID) , --學(xué)生號(hào)Score int NOT NULL --成績 ) GO --課程表中插入數(shù)據(jù)-- INSERT INTO F(FID,FName)VALUES('F001','語文') INSERT INTO F(FID,FName)VALUES('F002','數(shù)學(xué)') INSERT INTO F(FID,FName)VALUES('F003','英語') INSERT INTO F(FID,FName)VALUES('F004','歷史') --學(xué)生表中插入數(shù)據(jù)-- INSERT INTO Member(MID,MName)VALUES('M001','張薩') INSERT INTO Member(MID,MName)VALUES('M002','王強(qiáng)') INSERT INTO Member(MID,MName)VALUES('M003','李三') INSERT INTO Member(MID,MName)VALUES('M004','李四') INSERT INTO Member(MID,MName)VALUES('M005','陽陽') INSERT INTO Member(MID,MName)VALUES('M006','虎子') INSERT INTO Member(MID,MName)VALUES('M007','夏雪') INSERT INTO Member(MID,MName)VALUES('M008','璐璐') INSERT INTO Member(MID,MName)VALUES('M009','珊珊') INSERT INTO Member(MID,MName)VALUES('M010','香奈兒') --成績表中插入數(shù)據(jù)-- INSERT INTO Score(FID,MID,Score)VALUES('F001','M001',78) INSERT INTO Score(FID,MID,Score)VALUES('F002','M001',67) INSERT INTO Score(FID,MID,Score)VALUES('F003','M001',89) INSERT INTO Score(FID,MID,Score)VALUES('F004','M001',76) INSERT INTO Score(FID,MID,Score)VALUES('F001','M002',89) INSERT INTO Score(FID,MID,Score)VALUES('F002','M002',67) INSERT INTO Score(FID,MID,Score)VALUES('F003','M002',84) INSERT INTO Score(FID,MID,Score)VALUES('F004','M002',96) INSERT INTO Score(FID,MID,Score)VALUES('F001','M003',70) INSERT INTO Score(FID,MID,Score)VALUES('F002','M003',87) INSERT INTO Score(FID,MID,Score)VALUES('F003','M003',92) INSERT INTO Score(FID,MID,Score)VALUES('F004','M003',56) INSERT INTO Score(FID,MID,Score)VALUES('F001','M004',80) INSERT INTO Score(FID,MID,Score)VALUES('F002','M004',78) INSERT INTO Score(FID,MID,Score)VALUES('F003','M004',97) INSERT INTO Score(FID,MID,Score)VALUES('F004','M004',66) INSERT INTO Score(FID,MID,Score)VALUES('F001','M006',88) INSERT INTO Score(FID,MID,Score)VALUES('F002','M006',55) INSERT INTO Score(FID,MID,Score)VALUES('F003','M006',86) INSERT INTO Score(FID,MID,Score)VALUES('F004','M006',79) INSERT INTO Score(FID,MID,Score)VALUES('F002','M007',77) INSERT INTO Score(FID,MID,Score)VALUES('F003','M008',65) INSERT INTO Score(FID,MID,Score)VALUES('F004','M007',48) INSERT INTO Score(FID,MID,Score)VALUES('F004','M009',75) INSERT INTO Score(FID,MID,Score)VALUES('F002','M009',88)? ? ? ? 標(biāo)準(zhǔn)答案: -- 1)查詢各個(gè)學(xué)生語文、數(shù)學(xué)、英語、歷史課程成績--
SELECT Member.MName AS 姓名, 英語 = SUM(CASE F.FName WHEN '語文' THEN Score.Score END), 數(shù)學(xué) = SUM(CASE F.FName WHEN '數(shù)學(xué)' THEN Score.Score END), 語文 = SUM(CASE F.FName WHEN '英語' THEN Score.Score END), 歷史 = SUM(CASE F.FName WHEN '歷史' THEN Score.Score END) FROM Score, Member,F WHERE F.FID = Score.FID AND Member.MID =Score.MID GROUP BY Member.MName -- 2)查詢四門課中成績低于70分的學(xué)生及相對應(yīng)課程名和成績--
select 姓名=(select MName from Member where MID=Score.MID),課程名=(select FName from F where FID=Score.FID),成績=Score from Score where Score<70-- 3)統(tǒng)計(jì)各個(gè)學(xué)生四課程的平均分,且按平均分?jǐn)?shù)由高到底排序--
select 姓名=(select MName from Member where MID=Score.MID),平均分=Avg(Score) from Score group by MID order by 平均分 desc-- 4)創(chuàng)建存儲(chǔ)過程--
if exists (select * from sysobjects where name='P_stu') drop procedure P_stu GO create procedure P_stu @num int As print'參加'+convert(varchar(5),@num)+'門課考試的學(xué)生姓名及學(xué)號(hào):' select 姓名=(select MName from Member where MID=Score.MID),學(xué)號(hào)=MID from Score group by MID having count(*)=@num --調(diào)用存儲(chǔ)過程-- exec P_stu @num=2

總結(jié)

以上是生活随笔為你收集整理的SQL存储过程实例详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。