山东大学经济学院数据库与程序设计复习材料.docx
- 文档编号:10848310
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:73
- 大小:36.49KB
山东大学经济学院数据库与程序设计复习材料.docx
《山东大学经济学院数据库与程序设计复习材料.docx》由会员分享,可在线阅读,更多相关《山东大学经济学院数据库与程序设计复习材料.docx(73页珍藏版)》请在冰豆网上搜索。
山东大学经济学院数据库与程序设计复习材料
程序设计的一般步骤
第一步,定义需要用到的局部变量
第二步,给局部变量赋初值
第三步,while语句,设置循环的条件
第四步,循环体(循环体begin开始,end结束)
第五步,输出结果
程序设计中需要注意的问题
1、while语句也可以多次使用,分别是二重和三种循环
2、begin和end语句可以嵌套使用,不能交叉,要成对出现
3、内循环的初始值的赋值一般要在外循环的内侧和内循环whiile语句的外侧
4、数字运算时,特别要考虑一下除法(/)运算的结果是否是整数
5、上述一般步骤的第四步和第五步不是完全分割的,如果程序有多个(多组)结果的话,一般第五步就放在第四步中了。
6、程序执行的结果如果局部变量有多个,要在同一行输出,注意使用select语句,不要使用print语句。
7、数字的结果要和字符串放在一起时,注意使用类型转换函数(str和cast,两种函数的具体格式一定要清楚)。
控制语句
计算1到100的和。
declare@iint,@sint
set@i=1
set@s=0
while@i<=100
begin
set@s=@s+@i
set@i=@i+1
end
print@s
--看看是否有问题
print'1到的和为:
'+@S
邮件的邮资问题:
如果邮件的重量100克以下(包括100克),费率为0.12元/克,超出部分按0.05元/克,输入一个重量,计算相关的邮费。
注意:
SQL2005没有从键盘接收输入的值的功能。
declare@yzint,@wint
set@w=120
if@w<=100
set@yz=@w*0.12
else
set@yz=100*0.12+(@w-100)*0.05
print'邮件的重量是:
'+cast(@wasvarchar(20))+'克'
print'邮费是:
'+cast(@yzasvarchar(20))+'元'
输入x的值,x>=1时,输出1,否则输出-1
declare@xint
set@x=-0.5
if@x>=1
print'1'
else
print'-1'
输入x的值,x>=1时,输出1,0<=x<1时,输出0,否则输出-1.
declare@xfloat
set@x=2
if@x>=1
print'1'
else
if@x>=0
print'0'
else
print'-1'
break和continue例题
declare@aint,@bint
SELECT@a=1,@b=34
while@a<10
begin
SELECT@b=@b+1
print('a='+convert(varchar(10),@a)+',b='+convert(varchar(10),@b))
SELECT@a=@a+1
/*
if@b>38
break
else
continue
*/
print('test')
end
在查询里面执行上面的语句和把注释去再运行对比就知道了有continue时print('test')不会执行
第四周函数例题
printlen(4+2)
printlen('4+2')
printlen('I''maboy')
printlen('')
printlen('')
printlen('a')
printlen('山大')
printdatalength('')
printdatalength('a')
prtintdatalength('山大')
declare@tnochar(10)
set@tno='01234567'
printdatalength(@tno)
printlen(@tno)
declare@tnovarchar(10)
set@tno='01234567'
printdatalength(@tno)
printlen(@tno)
declare@tnonchar(10)
set@tno='01234567'
printdatalength(@tno)
printlen(@tno)
declare@tnonvarchar(10)
set@tno='01234567'
printdatalength(@tno)
printlen(@tno)
例2-1
DECLARE@tnonchar(10),@tnamenvarchar(20),@tdeptnvarchar(30);
SELECT@tno=N'012567',@tname=N'ZhangHua',@tdept=N'Management'
PRINT'No.:
'+@tno
PRINT'Name:
'+@tname
PRINT'Deptment:
'+@tdept+'School'
例2位运算符及表达式举例
32进制00000011
92进制00001001
select3&9and运算最后一位都是1结果为1
select3|9or运算倒数1、2、4位都是1结果为11
select3^9两者不相同(1与0)结果才是1,相同结果为0,所以结果为1010,也就是10
字符串函数
select'a'+space
(2)+'b'
selectreplicate('8',3),replicate('P',4)888pppp
DECLARE@nINT
SET@n=1
WHILE@n<=6
BEGIN
PRINTSPACE(11-@n)+REPLICATE('*',@N)
SET@n=@n+1
END
*
**
***
****
*****
******
第五周函数例题
printabs(4)
selectacos(0),acos
(1)
selectasin(0),asin
(1)
printatan(0)
selectceiling(2.2),ceiling(-2.2)
selectsin(0),sin(pi()/2),cos(pi()/2)注意函数pi()
selectfloor(2.2),floor(-2.2)
printexp
(2)
printlog(2.2)
printlog10(10)
printpower(3,2)
selectradians(70),radians(110),radians(120)注意取整数,不四舍五入
printrand()此函数为不确定函数
printround(3.1246,3)注意小数取位,对小数点后第四位四舍五入,第三位后的数全部变为0
printround(3.1246,2)注意小数取位
printround(3.1,2)小数位不足,数值保持不变
printsquare
(2)
printsqrt(4)
printsquare(3)
字符串函数
printascii('asd')97
printchar(66)B
printcharindex('as','bbasd')3
printleft('ab山东大学',4)ab山东
printreplace('abcdefg','cd','kkkk')abkkkkefg
selectreplicate('8',3),replicate('P',4)888pppp
printright('ab山东大学',4)山东大学
print'q'+ltrim('abc')qabc
printrtrim('abc')+'q'abcq
printspace(4)
printstr(3.123567,8,3)3.124
printsubstring('山东大学经济学院',3,2)结果为:
大学不是:
东
printunicode('ASD')A的ASCII码值65
printupper('abcd'),lower('ACD')
第六周函数例题
1、计算1!
+2!
+3!
+……+10!
declare@iint,@sint,@pint
set@i=1
set@s=0
set@p=1
while@i<=10
begin
set@p=@p*@i
set@s=@s+@p
set@i=@i+1
end
print@s
4037913
2、计算m和n两个正整数的最大公约数和最小公倍数(分m>=n、m和n大小不确定两种情况)
当m>n时,编程结果
declare@mint,@nint,@rint,@m1int,@n1int
set@m=216
set@n=14
set@m1=@m
set@n1=@n
set@r=@m1%@n1
while@r!
=0
begin
set@m1=@n1
set@n1=@r
set@r=@m1%@n1
end
printstr(@m)+'和'+str(@n)+'的最大公约数为:
'+str(@n1)
printstr(@m)+'和'+str(@n)+'的最小公倍数为:
'+str(@m*@n/@n1)
216和16的最大公约数为:
8
216和16的最小公倍数为:
432
当m和n大小不确定时,编程结果。
declare@mint,@nint,@tint,@rint,@m1int,@n1int
set@m=16
set@n=216
if@m<@n
begin
set@t=@m
set@m=@n
set@n=@t
end
set@m1=@m
set@n1=@n
set@r=@m1%@n1
while@r!
=0
begin
set@m1=@n1
set@n1=@r
set@r=@m1%@n1
end
printstr(@m)+'和'+str(@n)+'的最大公约数为:
'+str(@n1)
printstr(@m)+'和'+str(@n)+'的最小公倍数为:
'+str(@m*@n/@n1)
3、找出0~999之间所有的等于其各位数字立方和的数。
declare@nint,@aint,@bint,@cint
set@n=0
while@n<=999
begin
set@a=@n/100
set@b=(@n-100*@a)/10
set@c=@n-100*@a-10*@b
ifpower(@a,3)+power(@b,3)+power(@c,3)=@n
print@n
set@n=@n+1
end
0
1
153
370
371
407
4、二重循环举例
公鸡5元一只,母鸡3元一只,小鸡1元3只,百元买百鸡,问公鸡、母鸡、小鸡各多少只?
Declare@xint,@yint
Set@x=1
While@x<=20
Begin
Set@y=1
While@y<=33
Begin
If5*@x+3*@y+(100-@x-@y)/3=100
Select@x,@y,100-@x-@y
Set@y=@y+1
End
Set@x=@x+1
End
本题中结果有不符合实际的情况。
改进
Declare@xint,@yint
Set@x=1
While@x<=20
Begin
Set@y=1
While@y<=33
Begin
If5*@x+3*@y+(100-@x-@y)/3=100and(100-@x-@y)%3=0
Select@xas公鸡,@yas母鸡,100-@x-@yas小鸡
Set@y=@y+1
End
Set@x=@x+1
end
第七周函数例题
printdateadd(yy,5,getdate())
printdateadd(qq,5,getdate())加一个季度
printdateadd(mm,5,getdate())
printdateadd(ww,5,getdate())
printdateadd(dd,5,getdate())
printdatediff(dd,'20110903',getdate())
printdatediff(ww,'20100917',getdate())
printdatediff(mm,'20100917',getdate())
printdatediff(yy,'20100917',getdate())
其中2010年9月17日的有效格式为:
'20100917'、'09/17/2010'、'0917,2010'、'09,172010'
'09172010'
根据上面的函数,假设2012年7月1日放暑假,计算还有多少天放暑假
printdatename(dd,'20110501')
printdatename(mm,'20110501')
printdatename(yy,'20110501')
比较以下的区别
printdatename(dd,'20110501')+3前一个是字符串+数字字符串+数字为数字型
printdatename(dd,'20110501')+'3'后一个是字符串+字符串
printdatepart(dd,'20110501')
printdatepart(mm,'20110501')
printdatepart(yy,'20110501')
printdatepart(dy,'20110501')一年的第几天
比较以下的区别
printdatepart(dd,'20110501')+3运算结果为数字型
printdatepart(dd,'20110501')+'3'运算结果为数字型
printday(getedate())
printmonth(getedate())
printyear(getedate())
printyear(getedate())
printcast('20110501'asnchar(10))+'q'20110501q
printcast('20110501'asnvarchar(10))+'q'20110501q
printcast(3asnchar
(2))+'q'3q
printconvert(varchar(20),getdate(),21)
printconvert(varchar(20),getdate())
printconvert(varchar(20),3)
printdateadd(yy,5,getdate())
printdateadd(qq,5,getdate())加一个季度
printdateadd(mm,5,getdate())
printdateadd(ww,5,getdate())
printdateadd(dd,5,getdate())
printdatediff(dd,'20110903',getdate())
printdatediff(ww,'20100917',getdate())
printdatediff(mm,'20100917',getdate())
printdatediff(yy,'20100917',getdate())
其中2010年9月17日的有效格式为:
'20100917'、'09/17/2010'、'0917,2010'、'09,172010'
'09172010'
根据上面的函数,假设2012年7月1日放暑假,计算还有多少天放暑假
printdatename(dd,'20110501')
printdatename(mm,'20110501')
printdatename(yy,'20110501')
比较以下的区别
printdatename(dd,'20110501')+3前一个是字符串+数字字符串+数字为数字型
printdatename(dd,'20110501')+'3'后一个是字符串+字符串
printdatepart(dd,'20110501')
printdatepart(mm,'20110501')
printdatepart(yy,'20110501')
printdatepart(dy,'20110501')一年的第几天
比较以下的区别
printdatepart(dd,'20110501')+3运算结果为数字型
printdatepart(dd,'20110501')+'3'运算结果为数字型
printday(getdate())
printmonth(getdate())
printyear(getdate())
看看下列的命令执行结果是多少,要会分析
printday(getdate()+3)
printmonth(getdate()+3)
printyear(getdate()))+3
printcast('20110501'asnchar(10))+'q'20110501q
printcast('20110501'asnvarchar(10))+'q'20110501q
printcast(3asnchar
(2))+'q'3q
printconvert(varchar(20),getdate(),21)
printconvert(varchar(20),getdate())
printconvert(varchar(20),3)
第7—9周课本例题及补充
例1
Createdatabasestudentonprimary(name=student,filename='d:
\1234\student.mdf',size=3,maxsize=unlimited,filegrowth=10%)
Logon(name=student_log,filename='d:
\1234\student_log.ldf',size=4,maxsize=unlimited,filegrowth=10%)
注意扩展名不能省略
例2
alterdatabasestudentaddfile(name=student_1,filename='d:
\1234\student_1.ndf',size=5MB,maxsize=100MB,filegrowth=5MB)
go
alterdatabasestudentaddlogfile(name=student_1_log,filename='d:
\1234\student_1_log.ldf',size=5MB,maxsize=100MB,filegrowth=5MB)
go
注意扩展名不能省略,go可以去掉
例3
Usestudent
Go
Alterdatabasestudentmodifyfile(name=student_1,size=20MB)
注意必须使用逻辑名称name
例4
Alterdatabasestudentremovefilestudent_1.ndf
Go
应该去掉.ndf才对,如果是删除日志文件,文件名称为student_1_log
例5
Execsp_renamedb'student','studentls'
例6
Alterdatabasestudentlsmodifyname=student
删除数据库(注意一般不要删除)
Dropdatabasestudent
例10
Executesp_helpstudent
例12
Usestudent
Go
Altertablecoursealtercolumncnamenvarchar(50)
例13
Usestudent
Go
Altertablecourseaddpre_cnonvarchar(3)null
例14
Usestudent
Go
Altertablestudentdropcolumnls
例16
Usestudent
Go
Droptablesclyls
Go
例18
Usestudent
Go
Insertintocoursevalues('c01',N'大学计算机基础','1',3,null)
例19
Usestudent
Go
Insertintocourse(cname,pre_cno,ccredit,cno,csemester)values(N'C语言','c01',4,'c02','2')
建立student数据库
Createdatabasestudentonprimary(name=student,filename='d:
\1234\student.mdf',size=3,maxsize=unlimited,filegrowth=10%)
Logon(name=student_log,filename='d:
\1234\student_log.ldf',size=4,maxsize=unlimited,filegrowth=10%)
Student表命令建立法
Usestudent
Go
Createtablestudent(snonvarchar(7)notnullprimarykey,snamenvarchar(10)notnull,ssexnvarchar
(1),sdeptnvarchar(20)notnull,shifobit,sresumetext,sbirthdaydatetime)
使用t-sql语句创建course表结构
Usestudent
Go
Createtablecourse(cnonvarchar(3)notnullprimarykey,cnamenvarchar(30)notnullunique,csemesternvarchar
(1),ccreditintnotnull,pre_cnonvarchar(3))
有关SC表的建立办法
例9:
方法一
Usestudent
Go
Createtablesc6(snonvarchar(7)notnullforeignkeyreferencesstudent(sno),cnonvarchar(3)notnullforeignkeyreferencescourse(cno),gradedecimal(4,1)notnullcheck(
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 山东大学 经济学院 数据库 程序设计 复习 材料