实验3 T-SQL流程控制和函数
T-sql数据编程试验实例一则

T-sql 编程一、目的和要求1,进一步巩固前面4章所学内容2,掌握用户自定义类型的使用3,掌握变量的分类及其使用4,掌握各种运算符的使用5,掌握各种控制语句的使用6,掌握系统函数和用户自定义函数的使用二、准备1,了解t-ql支持的各种基本数据类型2,了解自定义数据类型使用的一般步骤3,了解t-sql各种运算符,控制语句的功能和使用方法4,了解系统函数的调用方法5,了解用户自定义函数使用的一般步骤三、内容1、系统函数的使用:1)使用rand()函数产生一个0-1的随机数,再产生一个10-99之间的随机数。
select RAND()select RAND()*89-102)使用Square() 函数求7的平方。
select SQUARE(7)3)使用sqrt()函数求9的平方根。
select sqrt(9)4)使用ascii函数返回“china”字符串最左边的字符的ascii值。
select ascii(LEFT('china',1))5)使用left()函数返回“china”左边开始的3个字符。
select LEFT('china',3)6)使用right( )返回‘abcdefg’右边的4个字符select right('abcdefg',4)7)使用substring() 返回‘abcdefg’从第2个字符开始的连续5个字符select substring('abcdefg',2,5)8)请用ltrim,rtrim去除字符串(' ad dad dadfad ’)左右两边的空格select ltrim(rtrim(' ad dad dadfad '))9)定义两个变量,一个赋值为1,一个为2,请分别用select和print 显示出他们相加的结果。
并说明他们有何区别declare@a intdeclare@b intset@a=1set@b=2select@a+@bdeclare@a intdeclare@b intset@a=1set@b=2print@a+@bSelect是以结果的方式显示的,而print是以消息的方式显示的10)说明char类型和varchar类型的区别。
实验3:使用SQL语句创建并管理数据库

序号:云南大学软件学院实验报告课程:数据库原理与实用技术实验学期:2015-2016学年第二学期任课教师:张云春专业:信息安全学号:20141120206 姓名:严鑫成绩:实验3使用SQL语句创建并管理数据库做删除或修改操作时,请注意备份数据库一、CAP数据库1、用T-SQL语句创建并管理数据库CAP:记录创建数据库的SQL语句。
CREATE DATABASE capon(name='cap',filename='d:\cap.mdf',size=5mb,maxsize=30mb,filegrowth=10%)log on(name='caplog',filename='d:\cap.ldf',size=5mb,maxsize=25mb,filegrowth=1mb)2、修改数据库:将“CAP数据库”的数据库最大容量更改为无限制(UNLIMITED),然后将“CAP数据库”的日志文件增长方式改为2MB。
记录SQL语句。
alter database capmodify file(name=cap,filename='d:\cap.mdf',maxsize=unlimited)alter database capmodify file(name=caplog,filename='d:\cap.ldf',filegrowth=2)3、用T-SQL语句在“CAP数据库”创建数据表,数据表的结构见教材。
记录创建表的SQL语句。
create table customers(cid char(10)not null,cname char(10)not null,city char(10)not null,discnt char(10)null,primary key(cid))create table agents(aid char(10)not null,aname char(10)not null,city char(10)not null,[percent]char(10)null,primary key(aid))create table products(pid char(10)not null, pname char(10)not null, city char(10)not null, quantity char(10)not null, price char(10)not null, primary key(pid))create table orders(ordno char(10)not null, [month]char(10)not null, cid char(10)not null,aid char(10)not null,pid char(10)not null,qty char(10)not null, dollars char(10)not null, primary key(ordno))4、向表中添加记录,使用Insert Into 语句分别向四张表中添加教材上的数据记录。
T-SQL语法与控制流程

实验7 T-SQL语法与控制流程成绩:专业班级_____ 学号_____ 姓名_____ 报告日期______实验类型:●验证性实验○综合性实验○设计性实验实验目的:(1)深入理理解并掌握T-SQL的常量、变量、运算符、表达式。
(2)掌握使用T-SQL流程控制语句。
(3)掌握使用T-SQL常用函数。
实验内容和步骤:1.在查询窗定义局部变量并用常量、变量、运算符、函数构造表达式向局部变量赋值。
2.在查询窗编写一个含有变量声明、赋值及由Begin.....end 构成的SQL语句块。
3. 在查询窗编写一个求1-10之间偶数和的程序(要求程序中使用while、Begin.....end、If....else...;要求通过Continue和print实现每个偶数的输出;要求通过print实现偶数和的输出。
参考蔣翰洋等编《SQL Server 2005 数据库管理与开发教程》清华大学出版社出,第91-111页.实验报告:根据实验情况和结果撰写并递交实验报告。
实验总结(学会了......; 掌握了......; 训练了......; 发现了......; 今后学习中......有待提高。
)实验步骤:1.在查询窗定义局部变量并用常量、变量、运算符、函数构造表达式向局部变量赋值。
①点击“新建查询”,输入程序:declare@a int,@b int,@c intset@a=6set@b=2*@a+5set@c=4*@a+6*@bprint@aprint@bprint@c点击“执行”按钮,输出结果如图1所示:②点击“新建查询”,输入程序:DECLARE@a int,@b int,@c intset@a=66set@b=88if@a>@bprint'@a大于@b'elseprint'@a小于@b'点击“执行”按钮,输出结果如图1所示:2.在查询窗编写一个含有变量声明、赋值及由Begin.....end 构成的SQL语句块。
SQL实验报告(优秀范文5篇)

SQL实验报告(优秀范文5篇)第一篇:SQL实验报告实验四触发器实验(一)after触发器(1 1)在l l i neitem 表上定义一个 after 触发器, , 当修改列项目e e xtendedprice d i scountx tax 时, , 要把 s orders 表得to o tal pri ce e 一起修改, , 以保证数据一致性C RE ATE T RIGGERtrig _line ite m_ pr ice_ update on line it em fo rupda teaasbegin i f(UPDATE(ex tend edprice)o r UPDATE(tax)or UPD AT E(di scou nt))begin-—声明游标变量指向 inserted 表d eclarecursor_inserted c urs orrea d_onlyofor select order key,linenu mber,exte nd edpr ice, dis coun t, taxfromin ser ted—-息信找查取获量变明声ﻩ声明变量获取查找信息de clare order key in t, @linenumb erint,exte nd edpricereal,disscount real,tax real—-打开游标epoﻩen cursor_i ns ert ed—-标游取读ﻩ读取游标fe tchnextfrom cur sor _i ns erte dint o@o rderkey, @lin enumber,eext ende dprice, @di scount,t axwwhi le FETC H_S TATUS =0 nigebﻩnﻩ—-声明一个变量保存重新计算得新价格cedﻩﻩecl are @n ew_tota lpri cer ealﻩ select @n ew_t otal price= @ext en dedpr ice *(1 -@di scou nt)*(1 +@tax)—-用新得总价格变量更新 orders 表得 t ot alprice puﻩﻩupdate orde rsse t tot alpri ce= new_totalprice where or derkey=orde rkeyen hctefﻩext f ro m cur sor_i nser ted int o@order ke y, @li nenum ber, @ex tende dp rice,discoun t, @taxdneﻩllaedﻩlocate c ur sor_i nser te deend end ﻩ(2)在在 linei tem表上定义一个 aftr er 触发器, , 当增加一项订单明细时, ,自动修改 s orders 表得 total p rice, 以保证数据一致性CREATE TR IGGER tri g_ lineit em_price_ in sert on l ine item ffor inse rta sbegin ——向指量变标游明声ﻩ声明游标变量指向ins erted 表de clarec ursor_inse rtedcursorread_ onl yﻩ for s ele ct orderkey,linenumbe r,ex te ndedp ric e,di scou nt,t axfrom insserte d--声明变量获取查找信息edﻩeclare @orde rk eyint, @lin enumber int,e xten dedp ricereal, @discountreal, @ta xreal -—ﻩ-打开游标open cursor_i ns erte d--ﻩ-读取游标fe tc hnex tf romcu rsor_ins ertedinto@o rd erkey,li nen umbeerr, ex ten ded pric e,dis count,tax ihwﻩile @@FE TCH_ STATU S=0 ebﻩegin-—格价新得算计新重存保量变个一明声ﻩﻩ声明一个变量保存重新计算得新价格cedﻩclare @n ew_tot alprice realcelesﻩct new _to ta lprice= @extend edp rice *(1-d is count)*(1+tax)—-新更量变格价总得新用ﻩﻩ用新得总价格变量更新orders 表得totalpri ceﻩ u pda teor ders s ett ota lpric e=total pric e+ @new_ tota lpr ice wwhhe re o rderke y=orderkeytefﻩetch next from cursor_ ins erte dinto o rder key, @l inen umber,e xtendeddp ric e, @disc ou nt, @t axeend aedﻩdeall oca te cu rsor_in serted en d(3)在l in e ite m表上定义一个a ft er触发器, , 当删除一项订单明细记录时, ,自动修改 orders 表得 tot a lprice, 以保证数据一致性CREATE TRI GG ER trig _line item_price_de let eon line item fo r de let eAAS begin--声明游标变量指向delet ed 表de clar e curso r_d eleted cursorre ad _on lyesrofﻩﻩele ctord erk ey,line numbe r,extende dp rice,discoun t, taxfromdel eted-ﻩ--声明变量获取查找信息declare ord erkey int,linenum be rint,extendedp ri ce r eal,discou nt real,ta xreal -—ﻩ-打开游标epoﻩen c urso r_ deleted——标游取读ﻩ读取游标efﻩetch next fr om cur sor_delete d in toorder ke y,l inenumb er,ext enddedprice, @di scoun t,taxwh ile@FETCH_STATUS=0begi n-—声明一个变量保存重新计算得新价格ﻩ declare @ne w_ to talpric erealﻩsselec t@new_t otalpr ice= @exte nde dpri ce*(1-@disco unt)*(1+ tax)-ﻩ-—用新得总价格变量更新orders 表得tot alp rice uﻩﻩupd ateorders set t otalpri ce=to talpr ice-@new _totalp rice wh er e order key= @ord erkeyfetchn ext f rom cursor_inse rt ed in to orderkey, @line numbe r,extendeeddprice, @d iscou nt,t ax dneﻩndddeal lo cat e cur sor_inse rted eend((4 4))验证 up d at e触发器—-查瞧号订单得 to ta a l pr i ceselec t*fro o mo o r ders whereorde r key=1 8 30;—-查瞧明细表得相关信息se l ect *f ro mlin ei i te e mw here or de e r key=183 0and l ine num m be e r =1;——验证 e update 触发器updat elineitem set t ax=tax+0、05whe re orderkey=1830;(二)i i n steadof触发器((1))在在 lineit em 表上定义一个ins tead o fupda te触发器, 当修改明细表中得数量量quan ti ty 时, 应先检查供应表par tsupp 得av ai lqty 就是否足够, 不足够则拒绝执行, 否则执行并修改相应数值以保证数据一致性于由于 in steadof 触发器更新某个表会使得该表上其她不满足更新列不能更新,因因用此逆向思维使用 a fter 触发器实现相同效果即先更新 qu antity, 再比较av ailqqtty, 如果满足更新数量, 就修改partsupp 得表得 a vailqty, 如果不满足, 则把lineitem得quantity 更新之后得数据重新修改回来ccreate trigge r trig_lin eit em_quanti ty_ upda teonli neit em f or upda teas begin if UPDATE(qu ant ity)bbegin ——向指别分量变标游明声ﻩ声明游标变量分别指向 i nserted 表与 d el eted 表edﻩdeclare c urso r_inser tedcur sorr ead_on lyfortcelesﻩﻩtorde rkey, partk ey,s uppkey,lin enum ber, quantit yfr om i nserteddecl arecursor_de leted c urs orrea d_ onl yf or select quantityfr om deleted-—息信找查取获量变明声ﻩ声明变量获取查找信息decl are@qu an tity _dif f_lineitem i nt,q uanti ty_pa rtsup p i nt cedﻩclare suppkey int, @par tke y in t,o rd erkey i nt,unenilﻩﻩum ber int ,qty _inserted in t , @qty_deleted int--打开游标ruc nepoﻩrsor_in sert ed poﻩopen cur sor_d eleted-—量变给赋值数标游取读ﻩ读取游标数值赋给变量fﻩfet chnext fromcu rsor_ insert edﻩiinto or de rk ey,pa rtkey, @suppk ey, @line nu mber, @qty _ins erte df et chnext fromcursor _d eletedint o q ty _de lete dwhi le fe tch_st atus=0 gebﻩegin--计算订单明细修改时, 订购数量得变化值inserte d表项-d elet ed表项ssel ect quantity_d if f_ li neit em= @q ty _in se rte d—@@q ty_deleteedﻩ--从parts upp 表获取ava ilq ty值, 注意partsupp 表得主键为(partk ey,suppkeey)tcelesﻩﻩt@quanti ty_p ar tsupp =av ailq ty fro m pa rtsu ppwﻩﻩwh er e suppkey= suppke yand part key= @par tk ey-—断判始开ﻩﻩ开始判断gebﻩbegi nfiﻩf quant ity _d iff_ lin eite m=0ﻩﻩ p rin t“ 更新得数量与原表中得值相同, 不需要更新”e ls eif @quantit y_d iff_lin eitem 〈=q uantity_partsuppﻩbe ginﻩpuﻩﻩpd ate partsupps et avail qty= availqty-@qua ntit y_d iff_li ne item ﻩpus erehwﻩppkey=suppkeyandp artkey= @par tke yﻩﻩ p rint “ 两个表都更新成功’ ﻩﻩﻩneﻩndels eigebﻩﻩinﻩuﻩﻩupdate li nei temsetquantit y=quantity+ @quanti ty_diff_linei temwhe re o rd erke y=@orde rke y and li nenu mber= @liine numberﻩp ri nt '更新失败”ﻩﻩendﻩ e nd efﻩﻩetch ne xtfr om c urso r_i nsertedi nto @ord erke y, @partkey,s upp key, @linenumb er, @qt y_ ins ert edf etch ne xt from curso r_de leted into @qt y_d elet ed dneﻩndd eallocat e cur sor _i nserte ddealloc at e cursor_de le ted eend eend(2)在在 l ineite m表上定义一个 instea d of in sert 触发器, 当插入明细表中一条记录时时, 应先检查供应表par tsupp 得得 ava il qt y就是否足够qu anti ty 得数量c rea te t rig ger tri g_lineitem_q ua nti ty_ insertonline item iinstead of inser t as bbegin-—声明游标变量指向 inserte d表d eclar e cur sor_inserte dcur sorrea d_ only f orsﻩﻩselect or derk ey,pa rtkey,sup pk ey, lin en umber,q uantityf rom ins er ted-—声明变量获取查找信息dec lare quantity int, @av ailq ty i nt, @suppkeyin t, @partkeyinntt, @o rderkey int, @linenu mber int-—标游开打ﻩ打开游标c nepoﻩcurs or_ins erted -ﻩ-—读取游标f etc hnext fro mcursor_insert edint o@orde rkey,partkey,@@ssuppkey, @linenumber,qu antity wh ile @@FETCH_S TATUS= 0igebﻩin--为变量赋值a tcelesﻩavailqtyy==av ai lqt y fr ompartsuppwﻩwhe re suppkey =@su ppk ey and part ke y= partke yﻩ if @quant ity 〈= @avail qt y-—如果可以更新bﻩbegin /ﻩﻩﻩ/*将将 insert ed 表中得记录插入到明细表*/ ﻩsniﻩserti nto l ineite m select *from i nsertedro=yekredroerehwﻩﻩrderk ey andlinenumb er = @linenumber */ﻩﻩ新更时同ﻩ*同时更新 part supp 表得数量*/ﻩﻩuupd ate pa rtsup pset a vailqty=availqty-@quanti tyﻩerehwﻩe sup pke y= @sup pkey and partkey=part key ppr int ’paarts upp 表有足够得货物可以满足 lin eitem 得quan tityy, 插入成功’endelsebeginﻩﻩ p rintt''pa rt sup p表没有足够得货物可以满足 l ineitem 得得q uantity,插入失败’dneﻩfﻩﻩfetc h next from curso r_ins ert ed in to@ord erkey, partkey, suppkey, @liinenumbe r, qu antity eﻩen ddeall ocat ecursor_ inserted end(3)在在 line ite m表上定义一个 inste ad of del ete 触发器,当当删除明细表中记录时时, 同时改变表供应表 partsupp 得ava il qtyy数值 c re ate trigge r tri g_ lin eit em_quanti ty_ del ete o n line item inste ad of del ete as be gin—-声明游标变量指向deleted 表de cla re curs or_ del eted c ursorread _only forlesﻩﻩelect or derke y, par tkey,sup pkey, linenumbe r,quan tity fr om deleted -ﻩ--声明变量decl are s upp key i nt, par tke yint, @orde rkey int,linen umb erint, @quaant it y int—-标游开打ﻩ打开游标opencursor_deleted-—标游取读ﻩ读取游标ffetch next fr omcurs or _del et edin to @ord erkey , @partkey,s uppkeey, @lin en umber,q ua ntitywhi leFFET CH_ STATUS=0 igebﻩin*/*除删ﻩ*删除*/ﻩ de let e fromlineite m where linenu mber= line number and o rde rkey =ordder key*/新更时同ﻩ同时更新 pa rt supp 表得数量*/u pdateparts uppse tavailqt y=a vai lq ty+quant ityﻩ where s uppke y= @s uppkey a nd par tk ey= @p ar tkeyﻩ p rin t’ 删除成功, 并且已经把货物数量归还到 p ar tsup p里“ fﻩﻩfetc h ne xt fr omcurso r_del etedinto @ord er ke y,p ar tkey,@@suppkey, @lin enu mber,quanti ty neﻩnd edﻩea lloc ate cursor_ delete dend(4)验证 update 触发器--查瞧li neit em 得quan tit y select*fr omlin eit em whe re or derk ey =1830and li nenum ber=1;——查询partsupp 表得ava ilqt y se lect * from part supp w here suppk ey =(selectsupp key fr omlin eitem w here ord erkey=18 30)and partk ey=(s elec t part key from lin eite mwh er eorder key =18 30 a nd linenu mber=1)---更新数量过大——更新得值与原值相同---更新到+ + 2 00 数量, , 成功updateli neitem setquant ity=q uanti ty+ 200where order key=1830and lin en umber =1;--更新 +2 00成功后l ineite m得 quanti ty y 变化——更新+200 成功后par ts upp 表得a va ilqty 变化实验到此。
数据库原理实验报告-T-SQL编程

XX大学XX学院图1图22、用户存储过程的编辑修改首先创建存储过程select_students, 在此基础上,将该过程更改为检索计算机专业的学生信息,用修改过程命令重新定义该存储过程。
2.1 输入以下代码:alter procedure select_students with encryptionasselect*from Student whereSdept='CS'order by Sno2.2 通过EXEC语句执行存储过程输入语句:EXEC select_students输出结果如下:3、用户存储过程的删除3.1 通过DROP语句删除存储过程输入语句:DROP procedure select_students输出结果如下:二、编写触发器1、在SQL中展开Student_and_Course数据库,在其中选择对应的表,将表展开,在展开的选项中右击“触发器”,在弹出的快捷菜单中选择“新建触发器”命令,在如图3所示的触发器编辑区中给出对应的触发器代码。
2、创建一个名为TR_AGEde1的触发器,要求在插入和更新时检查Student表中Sage是否在15至60之中,如果不在提示“年龄不合法”。
输入语句:CREATE TRIGGER TR_AGEON StudentFOR INSERT,UPDATEASDECLARE@age INTSELECT@age=SageFROM StudentIF@age NOT BETWEEN 15 AND 60BEGINROLLBACK TRANSACTIONRAISERROR ('年龄不合法',16,10)END图33、执行以下更新数据库的SQL代码,将在显示框内显示有关的信息,表示触发了数据表Student中的触发器TR_AGE.输入语句:UPDATE StudentSET Sage=26WHERE Sname='李勇'执行结果如图5:图54、同样,执行以下命令也会触发触发器TR_AGE.输入语句:INSERT INTO Student VALUES('200215128','张博','男',17,'CS') 完成3、4两步的输出结果如图6:图65、查看所创建触发器的详细信息,输入以下代码:USE student_and_courseEXEC sp_helptrigger StudentEXEC sp_helptext TR_AGE执行结果如图7:图7。
03. T-Sql 数据类型、变量、流程控制及游标

2、分类:
BEGIN...END
IF...ELSE…
WHILE
BREAK
CONTINUE
五、常用函数:
1、聚合函数
AVG(字段)
返回组中各值的平均值。空值将被忽略
Smalldatetime:范围 1900 年 1 月 1 日到 2079 年 6 月 6 日
4)、字符串
char
固定长度,非 Unicode 字符数据
varchar
可变长度,非 Unicode 字符数据
text
服务器代码页中长度可变的非 Unicode 数据
SELECT 语句:选择列表中当前所引用值为变量赋值;
如果在选择列表中引用变量,则它应当被赋以标量值或者 SELECT 语句应仅返回一行;
SELECT @MyVariable = MAX(id) FROM table
2、全局变量:
1)、概念:
全局变量是用来记录SQL?Server服务器活动状态的一组数据,
DATEPART
返回表示指定日期的指定日期部分的整数
语法:DATENAME ( datepart ,date )
3、数学函数
ABS
返回指定数值表达式的绝对值(正值)的数学函数。
语法:ABS ( numeric_expression )
RAND
可以用于数值列、nchar 列、nvarchar 列或 datetime 列,但不能用于 bit 列。不允许使用聚合函数和子查询。
2、日期和时间函数
GETDATE
以 datetime 值的 SQL Server 2005 标准内部格式返回当前系统日期和时间
t-sql的流程控制语句使用

T-SQL的流程控制语句使用1. 概述T-SQL(Transact-SQL)是一种用于Microsoft SQL Server数据库管理系统的编程语言。
它扩展了标准的SQL语言,增加了许多面向过程的编程功能,其中包括流程控制语句。
流程控制语句可帮助我们实现条件判断、循环和异常处理等功能,使得我们的T-SQL代码更灵活和强大。
在本文档中,我们将讨论T-SQL中常用的流程控制语句及其使用方法。
2. 条件判断条件判断语句用于根据给定的条件执行相应的代码块。
T-SQL中常用的条件判断语句有IF语句和CASE语句。
2.1 IF语句IF语句按照给定的条件执行特定的代码块。
语法如下:IF condition{ sql_statement | statement_block }[ ELSE{ sql_statement | statement_block } ]•condition:要判断的条件,可以是一个布尔表达式或变量。
•sql_statement:要执行的SQL语句。
•statement_block:包含多个SQL语句的代码块。
示例:IF @score >=90PRINT '优秀'ELSE IF @score >=80PRINT '良好'ELSE IF @score >=60PRINT '及格'ELSEPRINT '不及格'2.2 CASE语句CASE语句根据给定的条件选择执行相应的代码块。
它有两种形式:简单CASE 表达式和搜索CASE表达式。
2.2.1 简单CASE表达式简单CASE表达式基于对单个表达式的比较来选择执行代码块。
语法如下:CASE expressionWHEN value THEN { sql_statement | statement_block }[ WHEN value THEN { sql_statement | statement_block } ]...[ ELSE { sql_statement | statement_block } ]END•expression:要比较的表达式。
实验三 T-SQL中的选择和循环程序设计

实验二 T-SQL中的选择和循环程序设计一、实验目的1. 熟悉T-SQL中的基本语法要素,如变量定义、变量赋值、变量输出和各种表达式使用等。
2. 熟练掌握用T-SQL中的IF-ELSE语句和CASE函数进行选择程序设计。
能正确区分简单CASE函数和CASE搜索函数,掌握两种CASE函数的互换。
3. 熟练掌握T-SQL中的WHILE语句,并能初步使用WHILE语句进行简单的循环程序设计。
4. 了解BREAK和CONTINUE语句在改变程序控制流程方面的作用。
二、实验环境SQL Server 2000个人版及其交互查询工具isqlw(即查询分析器)。
三、实验内容和要求以下各个题除非独立的程序设计,否则均以图书管理数据库为应用背景。
1. 比较图书馆已进的机械工业出版社的书的总价值和清华大学出版社的书的总价值。
根据实际情况输出“机械工业出版社的书籍总价?元高于清华大学出版社的书籍总价?元”,或者输出“清华大学出版社的书籍总价?元高于机械工业出版社的书籍总价?元”(?元表示实际价格)2. 查询Student表的读者记录。
再输出读者性别时,如果读者性别值为0,对应“男”;如果读者性别值为1,对应“女”。
用IF-ELSE语句或者任意一种CASE函数实现3. 评价读者表(Student)中的每位同学的勤奋程度:借书数>=4(本)的同学为勤奋;1<=借书数<=3的同学为努力;没有借书的同学为懒惰。
分别用IF-ELSE语句、简单CASE函数和搜索型CASE函数实现。
4. 用T-SQL语言打印fibonacci数列的前20项(第一项为0)。
要求:提交源程序并标识必要的注释。
保证程序能正确编译和运行,并根据以下要求认真填写实验报告。
T-SQL数据操纵实验

实验题目:SQL数据操纵
【实验目的与要求】
一、实验目的
1. 熟练掌握单表查询的SELECT语法结构;
2. 通过观察查询结果, 体会SELECT语句的实际应用。
二、实验要求
1.实验前做好上机实验的准备,针对实验内容,认真复习与本次实验有关的知识,完成实验
内容的预习准备工作。
2.能认真独立完成实验内容。
3.实验后做好实验总结,根据实验情况完成实验报告。
【实验环境】
PC机、Windows 7系统+MySQL
【实验内容】
用Transact-SQL 语句实现如下操作:
1.通过insert命令写入课程表数据,数据如下表所示:
2.通过insert命令写入班级表数据,数据如下表所示:
3.通过union命令写入学生表数据,数据如下表所示:。
T-SQL流程控制语句

。
第6章
T-SQL编程—流程控制语句
18
六、return语句
实例3:分析下列语句的功能。 use xscj
if not exists(select * from xsqk where 姓名=‘李敏') begin print ‘没有找到!' return end print ‘已找到!' return
17
六、return语句
语法格式:
return
[ 整型表达式 ]
作用:
无条件地从过程、批或语句块中退出,在return之后的
其他语句不会被执行。
说明:
return可以在过程、批和语句块中的任何位置使用。
return与break很相似,不同的是return可以返回一个整数
一个操作)。 时间:指定等待的时间。时间必须为datetime类型,不 能包括日期。 第6章 T-SQL编程—流程控制语句
20
七、waitfor语句
课堂练习2:延时6秒后查询xsqk的信息;到下 午4点15分30秒查询xs_kc表。
waitfor delay ’00:00:06’ use xscj select * from xsqk go waitfor time ’16:15:30’ use xscj
第6章
T-SQL编程—流程控制语句
10
四、CASE语句
格式1:
CASE <表达式> WHEN <表达式> THEN <表达式> …
WHEN <表达式> THEN <表达式>
[ELSE <表达式>] END
综合型实验项目T-SQL编程

5 综合型实验项目T-SQL编程(一)变量的使用1、对于YGGL中的数据表结构,创建一个名为female的用户变量,并在select 语句中使用该局部变量查找表中所有女员工的编号、姓名。
Declare@female bitSet@female=0Select EmployeeID,Name from Employees where Sex=@female2、定义一个变量,用于获取号码为102201的员工的电话号码。
Declare@PhoneNumber char(12)set@PhoneNumber=(select PhoneNumber from Employees where EmployeeID='10220 1')select@PhoneNumber3、定义一个变量,用于描述YGGL数据库的Salary表中000001号员工的实际收入,然后查询该变量。
Declare@RealIncome floatset@RealIncome=(select Income-Outcome from Salarywhere EmployeeID='000001')select@RealIncome(二)运算符的使用1、使用算数运算符“-”查询员工的实际收入。
select InCome-OutCome from Salary2、使用比较运算符“>”查询Emloyees表中工作时间大于5年的员工信息。
select*from Employees where WorkYear>5(三)流程控制语句1、判断Employees表中是否存在编号为111006的员工,如果存在,则显示该员工信息;若不存在,则显示“查无此人”。
if EXISTS(select Name FROM Employees where EmployeeID='111006')select*from Employees where EmployeeID='111006'elseselect'查无此人'2、判断姓名为王林的员工实际收入是否高于3000元,如果是,则显示其收入,否则显示“收入不高于3000”。
T-SQL批处理和流程控制

1-8
T-SQL基础:变量和运算符
局部变量的显示: SELECT <@变量名表> PRINT <@变量名>
局部变量的作用域: 在一个批处理、一个存储过程或一个触发器内,其生命周期从 定义开始到它遇到的第一个GO语句或者到存储过程、触发器的 结尾结束,即局部变量只在当前的批处理、存储过程、触发器 中有效。 如果在批处理、存储过程、触发器中使用其他批处理、存储过 程、触发器定义的变量,则系统出现错误并提示“必须声明变量 ”。
• 执行过程:先计算判断条件表达式的值 • 若条件为真则执行BEGIN … END之间的循环体语句系列,执行到END时
返回到WHILE再次判断条件表达式的值。 • 若条件为假,则直接跳过BEGIN … END不执行循环。 • 若在执行循环体时遇到BREAK语句,则无条件跳出BEGIN … END。 • 若在执行循环体时遇到CONTINUE语句,则结束本轮循环,不再执行之后
1-7
T-SQL基础:变量和运算符
变量赋值 用SET、SELECT给局部变量赋值 语法格式:SET @局部变量=表达式 SELECT { @局部变量=表达式 } [ ,…n ]
• SET只能给一个变量赋值,而SELECT可以给多个变量赋值。 • 两种格式可以通用,建议首选使用SET,而不推荐使用
SELECT语句。 表达式中可以包含SELECT语句子查询,但只能是集合函数 返回的单值。且必须用圆括号括起来。 SELECT也可以直接使用查询的单值结果给局部变量赋值。 如:SELECT @局部变量=表达式或字段名
数 • @@connections:SQL Server最近一次启动后已连接或尝试连接的次数 • @@version :本地SQL Server服务器的版本信息
实验三 T-SQL编程

实验三 T-SQL编程实验三T-SQL编程一、实验目的1、掌握批处理、脚本的概念2、掌握SQL Server中局部变量、全局变量和内置函数的概念和应用3、掌握SQL Server流程控制语句的使用4、掌握SQL Server三种用户自定义函数的创建和使用方法5、掌握游标的建立和使用6、掌握事务的建立和使用二、实验内容1、恢复sales数据库。
2、使用变量(1)新建查询。
(2)在编辑窗口输入如下内容: Use sales G0Declare @maxpricee moneySelect @maxprice=max(price)from Products Where price is not null G0Select [@maxprice]= @maxprice Print @@rowcount(3)解释每一命令的语义,执行以上语句,系统报错,说明错误原因并改正。
错误原因:必须声明标量变量\。
改正后的语句:3、使用函数(1)新建查询。
(2)在编辑窗口,按要求编写T-SQL语句: 1)编写并记录使用ROUND()函数的示例。
SELECT ROUND(price,1)as unitprice FROM products2)编写并记录使用SUBSTRING()函数的示例。
SELECT substring(name,1,2) FROM products3)编写并记录使用DATEPART()函数的示例。
SELECT DATEPART(yyyy,OrderDate) AS OrderYear, DATEPART(mm,OrderDate) AS OrderMonth, DATEPART(dd,OrderDate) AS OrderDay FROM OrdersWHERE Orderno=10014)编写并记录显示当前系统用户名的语句。
select system_user4、使用流控制语句(1)新建查询。
(2)在编辑窗口,输入如下内容: USEsales goselect OrderNo,ProductNO,订单等级= Case QtyOrdered When 2 then '3级’ When 90 then '1级’ Else '2级’ EndFrom order_Details3)修改以上的内容,重新划分等级,要求: 1)当qtyordered的值不低于100时,为1级;2)当qtyordered的值在区间[50,100)上时,为2级; 3)当qtyordered的值在区间[20,50)上时,为3级; 4)当qtyordered的值在区间[10,20)上时,为4级;5)当qtyordered的值小于10时,为5级;(4)记录修改后的T-SQL语句。
实验3 T-SQL语言对数据库和表的操作

实验3 T-SQL语言对数据库和表的操作
1.实验目的
1)掌握使用T-SQL创建、删除和修改数据库。
2)掌握使用T-SQL创建、删除和修改数据表。
3)掌握使用T-SQL插入、修改和删除表中的数据。
2.实验内容
1)使用T-SQL创建和管理数据库。
2)使用T-SQL创建和管理数据表。
3)SQL SERVER 2005系统数据类型。
4)数据的插入、修改和删除。
3.实验步骤
1)Study数据库的相关操作
a)使用T-SQL语言根据实验2中的内容创建Study数据库,并创建学生
情况表Student,课程表Course,学生成绩表Score。
b)使用T-SQL语言在Student、Course、XS_Score表中插入数据。
2)兼职网数据库的相关操作
a)整理兼职网E-R图,再次确定实体间的联系;
b)将E-R图转化为关系模式;
c)使用T-SQL语言创建兼职网数据库;
d)根据关系模式使用T-SQL语言创建表;
e)在对应的表中插入数据;。
实验3T-SQL流程控制和函数

实验3T-SQL流程控制和函数课程数据库原理及应⽤_ 实验名称 T-SQL流程控制和函数教师审批签字⼀.实验⽬的1.熟练掌握变量的定义、赋值与使⽤。
2.熟练掌握常⽤基本运算符。
3.熟练掌握流程控制语句,尤其是条件语句和循环语句。
4.熟悉并掌握常⽤的系统函数。
5.理解什么是标量函数、内嵌表值函数及多语句表值函数。
6.熟练掌握⾃定义函数的定义和调⽤⽅法。
⼆.实验内容及要求对CPXS数据库,完成如下任务:1.创建⼀名为CustomerName的局部变量,并在SELECT语句中使⽤该变量查找“客户D”购买产品的情况(包括产品名称、单价)。
2.⽤T-SQL语⾔编程输出3~300之间能被7整除的数。
3.查询CP表中各种产品的产品编号、产品名称和价格,对其价格按以下规则进⾏转换:若价格⼩于1000,替换为“廉价产品”;若价格在1000-2000之间,替换为“⼀般产品”;若价格⼤于2000⼩于5000,替换为“昂贵产品”;若价格⼤于5000,替换为“奢侈品”;列标题更改为“评价”。
4.使⽤系统函数,计算今天距“2012-1-1”还剩多少天。
5.根据产品编号,查询该产品的名称;(函数名为udf_GetCPName)6.根据客户编号,统计其在某个时期内所购买的商品名称、数量及⾦额(函数名为udf_GetCPListByCID);对函数udf_GetCPListByCID,查询“客户A”在“2011-10-1”到“2011-10-7”期间交易的销售⽇期、产品名称、销售数量和销售⾦额,并按销售⽇期升序排序。
三.实验过程及结果1.use CPXSGODECLARE @CustomerName char(20);SET @CustomerName='客户D';SELECT b.产品名称,b.价格FROM dbo.客户 a,dbo.产品 b,dbo.销售 cWHERE c.产品编号=b.产品编号and a.客户编号=c.客户编号AND a.客户名称=@CustomerName2.DECLARE @m int,@n intset @m=3set @n=0while @m<300BEGINset @n=@m%7if @n=0 select @m as numset @m=@m+1END3.use CPXSGOSELECT产品编号,产品名称,价格,casewhen价格<1000 then'廉价产品'when价格<2000 then'⼀般产品'when价格<5000 then'昂贵产品'when价格>5000 then'奢侈产品'end AS评价from产品4.SELECT DATEDIFF(DAY,GETDATE(),'2012-1-1')AS'剩余天数'5.USE CPXSGOCREATE FUNCTION udf_GetCPName(@num char(6))returns varchar(30) as begindeclare @pn varchar(30)select @pn=(select产品名称from产品where产品编号=@num)return @pnendselect dbo.udf_GetCPName('S00002')产品名称6.USE CPXSGOCREATE FUNCTION udf_GetCPListByCID(@num char(6))returns @tongji table (销售⽇期datetime,产品名称varchar(30),销售数量int,销售⾦额decimal(18,0))asbegininsert @tongjiselect c.销售⽇期,b.产品名称,c.数量,c.销售额from客户 a,产品 b,销售 cwhere a.客户编号=c.客户编号and b.产品编号=c.产品编号and a.客户编号=@num and c.销售⽇期between'2011-10-1'and '2011-10-7' returnendUSE CPXSGOdeclare @id char(6)select @id=(select客户编号from客户where客户名称='客户A')select*from udf_GetCPListByCID(@id)order by销售⽇期asc四.实验中的问题及⼼得通过这次实验让我深⼊了解到变量的定义、赋值与使⽤、常⽤基本运算符、流程控制语句,尤其是条件语句和循环语句、常⽤的系统函数、内嵌表值函数及多语句表值函数,并且掌握⾃定义函数的定义和调⽤⽅法。
实验三 利用T-SQL语句管理数据库

实验三利用T-SQL语句管理数据库一、实验目的与要求1.掌握利用T-SQL语句创建数据库的方法2.掌握利用T-SQL语句修改数据库的方法3.掌握利用T-SQL语句删除数据库的方法二、实验准备1.了解利用T-SQL语句创建、修改、删除数据库的方法三、实验内容使用T-SQL语句创建一个数据库。
①要求数据库名为MYDB,数据库中包含一个数据文件,逻辑文件名为MY_DB_DATA,操作系统文件名为MY_DB_DATA.MDF,文件的初始容量为5MB,最大容量为15MB,文件容量递增值为2MB。
②事务日志文件的逻辑文件名为MY_DB_LOG,操作系统文件名为MY_DB_LOG.LDF,文件的初始容量为3MB,最大容量为10MB,文件容量递增为1MB。
③创建完成后要对其进行修改,添加一个数据文件,逻辑文件名为MY_DB_DATA1,操作系统文件名为MY_DB_DATA1.NDF,文件的初始容量为3MB,最大容量为15MB,文件容量递增值为2MB。
④将事务日志文件的最大容量改为20MB,文件容量递增值改为2MB。
⑤将创建的数据库删除。
1. 利用T-SQL语句创建数据库(1)打开查询分析器,输入如下语句:CREATE DATABASE MYDBON(NAME='MY_DB_DATA',FILENAME='D:\PROGRAM FILES\Microsoft SQL Server\MSSQL\data\MY_DB_DATA.MDF', SIZE=5, MAXSIZE=15, FILEGROWTH=2)LOG ON(NAME='MY_DB_LOG',FILENAME='D:\PROGRAM FILES\Microsoft SQL Server\MSSQL\data\MY_DB_LOG.LDF', SIZE=3, MAXSIZE=10, FILEGROWTH=1)GO(2)按“F5”来执行,创建MYDB数据库。
第08章 数据库的过程控制——T-SQL程序设计_第3稿

第八章数据库的过程控制——T-SQL程序设计使用Transcat-SQL(可简称为T-SQL)语言进行程序设计是SQL Server的主要应用形式之一。
不论是C/S结构(即客户机/服务器模式)还是基于B/S结构的应用程序都必须对数据库中数据进行的处理描述成T-SQL语句的形式,并通过向服务器端发送T-SQL语句才能实现对数据的查询与更新。
为了将一系列的操作在通过网络提交时减少网络流量,提升应用系统的性能,都将那些操作描述成T-SQL程序的形式提交。
本章将要介绍Transcat-SQL语言的编程基础、Transcat-SQL语句中流程控制语句、系统函数与用户自定义函数、游标的使用等知识。
8.1 任务的提出一天,一脸愁容的晓灵又来到了郝老师的办公室。
郝老师问:“晓灵呀!又是什么事把你给愁成这样啦?经过这一段时间的学习,你的数据库知识水平及专业技能突飞猛进啊!。
”晓灵说:“郝老师,您就别拿我开玩笑了,我都快愁死了。
确实通过前几章的学习,我学会了在SQL Server 2000数据库系统中创建和管理数据库、基本表、索引和视图等数据库对象,也能够完成数据的查询与数据更新任务。
但是现在我还是愁啊!”郝老师说:“那你现在还愁些什么啊?给我说说,看我能不能给你解决一下”。
晓灵说:“对于前面的那些数据库操作,单独完成哪一个任务,我都没有问题。
但现在的问题是,如果需要对执行的结果进行判断或都需要根据某些数据值的不同,需要采取不同的处理方法,这些我就不会了。
”郝老师说:“噢,这个问题呀!解决这个问题并不难,你不要太着急了。
其实这个问题的核心就是需要对执行SQL语句的流程进行控制。
你以前不是学习过C语言吗?有C语言的流程控制语言做基础,解决这个问题不在话下。
”“解决SQL语句的流程控制问题,需要学习T-SQL语言的编程技术。
其内容通常来说包括常量和变量的使用、程序流程的控制、函数的调用、游标的使用等几个方面。
”郝老师接着说,“通过学习T-SQL语言的编程技术,我们还可以实现对一系列完整、复杂的任务通过使用一组SQL语句的方式来完成。
实验三用TransSQL语句创建数据库和表结构

实验三 用T_L语句创建数据库和表
一、实验目的
1. 掌握使用Transact-SQL语句创建数
据库、基本表 和修改基本表结构。
2. 掌握数据库的整体结构以及约束、缺
省等概念。
二、实验内容
(一)(1).数据库的两个文件放在D:\DATA文件夹下 (2).数据库数据文件的初始大小为5M,日志文件的 初始大小为1M,都10%增长 (二)假设要创建的学生选课数据库以下有几个关系模 式:用SQL语句创建: 系(系编号,系名称,系主任);
学生 ( 学号 , 姓名 , 性别 , 年龄 , 电话 , 系编号 );
(三)修改表结构 1.在已经存在的学生表中增加一个邮件地址“Semail” 的新属性列,允许为空; 2.修改学生表中Sname的数据类型为VARCHAR(20); 3.把学生表中的电话属性删掉。 4.在学生表中限定年龄大于15岁。
作业上交
• 把实验题目保存成.txt文件上传到网络课 堂
课程 ( 课程号 , 课程名称 , 学分 ); 选课 ( 学号 , 课程号 , 成绩 );
教师(工号,姓名,性别,出生日期,职称,工资,电话
号码,系编号)
有如下规定:
1.在系表中,系编号为主码;
2.在学生表中,学号为主码,姓名不空,年龄缺省值 为21,性别为‘男’或‘女’,系编号为学生表的外码; 3.在课程表中,课程号为主码; 4.在选课表中,学号和课程为主码,成绩值在0∽100 之间,学号和课程号分别为外码; 5.在教师表中,教师编号为主码,性别为‘男’或 ‘女’,系编号为外码。
T-SQL语言的使用方法.

学习目标
了解T-SQL程序设计中数据类型 熟知常量、变量的定义 掌握流程控制语句的使用方法
掌握函数的定义及调用方法
主要任务
任务一:常量、变量与数据类型 任务二:运算符与表达式
任务三:流程控制语句
任务四:系统内置函数
任务五:用户定义函数
任务一:常量、变量与ቤተ መጻሕፍቲ ባይዱ据类型
(2)BIT数据类型 BIT表示可以取值为0、1或者NULL的整数数据类型。 (3)LARGE OBJECTS数据类型 LARGE OBJECTS(LOBS);可以存储最大为2GB的数据对象,常常被 用来存储大容量的文本数据、加载模块和音频/视频文件。Transact SQL支持两种不同的指定和访问LOBS的方式,一种是使用 VARCHAR(MAX)、NVARCHAR(MAX)和VARBINARY(MAX)数据类型, 另一种是使用TEXT/IMAGE数据类型。
任务一:常量、变量与数据类型
4、 Miscellaneous数据类型 TransactSQL中支持的某些数据类型并不属于先前介绍过的数据类型中的 任何一种,我们将它们归结为Miscellaneous数据类型。 (1)BINARY和VARBINARY数据类型 BINARY和VARBINARY数据类型分别用来表示固定长度和可变长度的 BINARY数据类型,如表6-3所示。
+$4678
-$4678
任务一:常量、变量与数据类型
10、 uniqueidentifier常量 uniqueidentifier常量是指表示GUID(全局唯一标志符)的字符串。 可以使用字符或者二进制字符串格式指定,它由32个任意字符组成。 例如,以下就是有效的GUID:
T-SQL_常用内置函数和操作

T-SQL_常⽤内置函数和操作数据操作SELECT --从数据库表中检索数据⾏和列INSERT --向数据库表添加新数据⾏DELETE --从数据库表中删除数据⾏UPDATE --更新数据库表中的数据数据定义CREATE TABLE --创建⼀个数据库表DROP TABLE --从数据库中删除表ALTER TABLE --修改数据库表结构CREATE VIEW --创建⼀个视图DROP VIEW --从数据库中删除视图CREATE INDEX --为数据库表创建⼀个索引DROP INDEX --从数据库中删除索引CREATE PROCEDURE --创建⼀个存储过程DROP PROCEDURE --从数据库中删除存储过程CREATE TRIGGER --创建⼀个触发器DROP TRIGGER --从数据库中删除触发器CREATE SCHEMA --向数据库添加⼀个新模式DROP SCHEMA --从数据库中删除⼀个模式CREATE DOMAIN --创建⼀个数据值域ALTER DOMAIN --改变域定义DROP DOMAIN --从数据库中删除⼀个域数据控制GRANT --授予⽤户访问权限DENY --拒绝⽤户访问REVOKE --解除⽤户访问权限事务控制COMMIT --结束当前事务ROLLBACK --中⽌当前事务SET TRANSACTION --定义当前事务数据访问特征程序化SQLDECLARE --为查询设定游标EXPLAN --为查询描述数据访问计划OPEN --检索查询结果打开⼀个游标FETCH --检索⼀⾏查询结果CLOSE --关闭游标PREPARE --为动态执⾏准备SQL 语句EXECUTE --动态地执⾏SQL 语句DESCRIBE --描述准备好的查询局部变量declare @id char(10)set @id = '10010001'select @id = '10010001' 全局变量必须以@@开头IF ELSEdeclare @x int,@y,int @z intselect @x = 1,@y = 2,@z=3if @x > @yprint 'x > y' --打印字符串'x > y'else if @y > @zprint 'y > z'else print 'z > y'CASEuse panguupdate employeeset e_wage =casewhen job_level = ’1’ then e_wage*1.08when job_level = ’2’ then e_wage*1.07when job_level = ’3’ then e_wage*1.06else e_wage*1.05endWHILE CONTINUE BREAKdeclare @x int @y int @c intselect @x = 1 @y=1while @x < 3beginprint @x --打印变量x 的值while @y < 3beginselect @c = 100*@x + @yprint @c --打印变量c 的值select @y = @y + 1endselect @x = @x + 1select @y = 1endWAITFOR--例:等待1 ⼩时2 分零3 秒后才执⾏SELECT 语句waitfor delay '00:00:03'select 1--例:等到晚上11 点零8 分后才执⾏SELECT 语句waitfor time '15:03:00'select 2SELECT select *(列名) from table_name(表名) where column_name operator valueex:(宿主)select * from stock_information where stockid = str(nid)stockname = 'str_name'stockname like '% find this %'stockname like '[a-zA-Z]%' ---- ([]指定值的范围)stockname like '[^F-M]%' ---- (^排除指定范围)--------- 只能在使⽤like关键字的where⼦句中使⽤通配符)or stockpath = 'stock_path'or stocknumber < 1000and stockindex = 24not stocksex = 'man'stocknumber between 20 and 100stocknumber in(10,20,30)order by stockid desc(asc) --------- 排序,desc-降序,asc-升序order by 1,2 --------- by列号stockname = (select stockname from stock_information where stockid = 4)--------- ⼦查询--------- 除⾮能确保内层select只返回⼀个⾏的值,否则应在外层where⼦句中⽤⼀个in限定符select distinct column_name from table_name --------- distinct指定检索独有的列值,不重复select stocknumber ,"stocknumber + 10" = stocknumber + 10 from table_nameselect stockname , "stocknumber" = count(*) from table_name group by stockname having count(*) = 2 --------- group by 将表按⾏分组,指定列中有相同的值--------- having选定指定的组select * from table1, table2where table1.id *= table2.id -------- 左外部连接,table1中有的⽽table2中没有得以null表⽰table1.id =* table2.id -------- 右外部连接select stockname from table1union [all] ----- union合并查询结果集,all-保留重复⾏select stockname from table2insert insert into table_name (Stock_name,Stock_number) value ("xxx","xxxx")value (select Stockname , Stocknumber from Stock_table2)---value为select语句updateupdate table_name set Stockname = "xxx" [where Stockid = 3]Stockname = defaultStockname = nullStocknumber = Stockname + 4delete delete from table_name where Stockid = 3truncate table_name ----------- 删除表中所有⾏,仍保持表的完整性drop table table_name --------------- 完全删除表alter table -------- 修改数据库表结构 alter table database.owner.table_name add column_name char(2) null .....sp_help table_name ---- 显⽰表已有特征create table table_name (name char(20), age smallint, lname varchar(30))insert into table_name select ......... ----- 实现插⼊列的⽅法(创建新表)alter table table_name drop constraint Stockname_default ---- 删除Stockname的default约束常⽤函数-----统计函数-----AVG --求平均值COUNT --统计数⽬MAX --求最⼤值MIN --求最⼩值SUM --求和AVGuse panguselect avg(e_wage) as dept_avgWagefrom employeegroup by dept_id MAX--求⼯资最⾼的员⼯姓名use panguselect e_name from employeewhere e_wage = (select max(e_wage) from employee)STDEV()STDEV()函数返回表达式中所有数据的标准差STDEVP()STDEVP()函数返回总体标准差 VAR()VAR()函数返回表达式中所有值的统计变异数 VARP()VARP()函数返回总体变异数 -----算术函数-----三⾓函数SIN(float_expression) --返回以弧度表⽰的⾓的正弦COS(float_expression) --返回以弧度表⽰的⾓的余弦TAN(float_expression) --返回以弧度表⽰的⾓的正切COT(float_expression) --返回以弧度表⽰的⾓的余切反三⾓函数ASIN(float_expression) --返回正弦是FLOAT 值的以弧度表⽰的⾓ACOS(float_expression) --返回余弦是FLOAT 值的以弧度表⽰的⾓ATAN(float_expression) --返回正切是FLOAT 值的以弧度表⽰的⾓ATAN2(float_expression1,float_expression2) --返回正切是float_expression1 /float_expres-sion2的以弧度表⽰的⾓DEGREES(numeric_expression) --把弧度转换为⾓度返回与表达式相同的数据类型可为INTEGER/MONEY/REAL/FLOAT 类型RADIANS(numeric_expression) --把⾓度转换为弧度返回与表达式相同的数据类型可为INTEGER/MONEY/REAL/FLOAT 类型EXP(float_expression) --返回表达式的指数值LOG(float_expression) --返回表达式的⾃然对数值LOG10(float_expression)--返回表达式的以为底的对数值SQRT(float_expression) --返回表达式的平⽅根取近似值函数CEILING(numeric_expression) --返回>=表达式的最⼩整数返回的数据类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型FLOOR(numeric_expression) --返回<=表达式的最⼩整数返回的数据类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型ROUND(numeric_expression) --返回以integer_expression 为精度的四舍五⼊值返回的数据类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型ABS(numeric_expression) --返回表达式的绝对值返回的数据类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型SIGN(numeric_expression) --测试参数的正负号返回零值正数或-1 负数返回的数据类型与表达式相同可为INTEGER/MONEY/REAL/FLOAT 类型PI() --返回值为π即.1415926535897936RAND([integer_expression]) --⽤任选的[integer_expression]做种⼦值得出 -1 间的随机浮点数-----字符串函数-----ASCII() --函数返回字符表达式最左端字符的ASCII 码值CHAR() --函数⽤于将ASCII 码转换为字符, 如果没有输⼊~ 255之间的ASCII 码值CHAR 函数会返回⼀个NULL 值LOWER() --函数把字符串全部转换为⼩写UPPER() --函数把字符串全部转换为⼤写STR() --函数把数值型数据转换为字符型数据LTRIM() --函数把字符串头部的空格去掉RTRIM() --函数把字符串尾部的空格去掉LEFT(),RIGHT(),SUBSTRING() --函数返回部分字符串CHARINDEX(),PATINDEX() --函数返回字符串中某个指定的⼦串出现的开始位置SOUNDEX() --函数返回⼀个四位字符码, SOUNDEX函数可⽤来查找声⾳相似的字符串但SOUNDEX函数对数字和汉字均只返回值DIFFERENCE() --函数返回由SOUNDEX 函数返回的两个字符表达式的值的差异--0:两个SOUNDEX 函数返回值的第⼀个字符不同--1:两个SOUNDEX 函数返回值的第⼀个字符相同--2:两个SOUNDEX 函数返回值的第⼀⼆个字符相同--3:两个SOUNDEX 函数返回值的第⼀⼆三个字符相同--4:两个SOUNDEX 函数返回值完全相同同QUOTENAME() --函数返回被特定字符括起来的字符串select quotename('abc', '{'),quotename('abc')--运⾏结果如下: {abc} [abc]REPLICATE() --函数返回⼀个重复character_expression 指定次数的字符串select replicate('abc', 3),replicate( 'abc', -2)--运⾏结果如下: abcabcabc NULLREVERSE() --函数将指定的字符串的字符排列顺序颠倒REPLACE() --函数返回被替换了指定⼦串的字符串select replace('abc123g', '123', 'def')--运⾏结果如下: abcdefgSPACE() --函数返回⼀个有指定长度的空⽩字符串STUFF() --函数⽤另⼀⼦串替换字符串指定位置长度的⼦串-----数据类型转换函数-----CAST() 函数语法:CAST() (<expression> AS <data_ type>[ length ])CONVERT() 函数语法:CONVERT() (<data_ type>[ length ], <expression> [, style])select cast(100+99 as char),convert(varchar(12), getdate())--运⾏结果如下: 199 10 17 2012-----⽇期函数-----DAY() --函数返回date_expression 中的⽇期值MONTH() --函数返回date_expression 中的⽉份值YEAR() --函数返回date_expression 中的年份值DATEADD(<datepart> ,<number> ,<date>) --函数返回指定⽇期date 加上指定的额外⽇期间隔number 产⽣的新⽇期DATEDIFF(<datepart> ,<number> ,<date>) --函数返回两个指定⽇期在datepart ⽅⾯的不同之处DATENAME(<datepart> , <date>) --函数以字符串的形式返回⽇期的指定部分DATEPART(<datepart> , <date>) --函数以整数值的形式返回⽇期的指定部分GETDATE() --函数以DATETIME 的缺省格式返回系统当前的⽇期和时间--取某年某⽉的第⼀天和最后⼀天以当前⽇期为例--当⽉天数select day(dateadd(ms,-3,DATEADD(m, DATEDIFF(m,0,getdate())+1,0)))---当⽉第⼀天select dateadd(d,-day(getdate())+1,getdate())---当⽉最后⼀天select dateadd(d,-day(getdate()),dateadd(m,1,getdate()))--明年上⽉的最后⼀天此时select dateadd(d,-day(getdate()),dateadd(m,12,getdate()))--当⽉第⼀个星期⼀SELECT DATEADD(wk, DATEDIFF(wk, '', DATEADD(dd, 6 - DAY(getdate()), getdate())), '')-----系统函数-----APP_NAME() --函数返回当前执⾏的应⽤程序的名称COALESCE() --函数返回众多表达式中第⼀个⾮NULL 表达式的值COL_LENGTH(<'table_name'>, <'column_name'>) --函数返回表中指定字段的长度值COL_NAME(<table_id>, <column_id>) --函数返回表中指定字段的名称即列名DATALENGTH() --函数返回数据表达式的数据的实际长度DB_ID(['database_name']) --函数返回数据库的编号DB_NAME(database_id) --函数返回数据库的名称HOST_ID() --函数返回服务器端计算机的名称HOST_NAME() --函数返回服务器端计算机的名称IDENTITY(<data_type>[, seed increment]) [AS column_name])--IDENTITY() 函数只在SELECT INTO 语句中使⽤⽤于插⼊⼀个identity column列到新表中select identity(int, 1, 1) as column_name into newtable from oldtableISDATE() --函数判断所给定的表达式是否为合理⽇期SELECT ISDATE(GETDATE())--运⾏结果为:1ISNULL(<check_expression>, <replacement_value>) --函数将表达式中的NULL 值⽤指定值替换ISNUMERIC() --函数判断所给定的表达式是否为合理的数值NEWID() --函数返回⼀个UNIQUEIDENTIFIER 类型的数值select NEWID()--运⾏结果为:D9F0E16E-DABF-4170-916F-0660A9B7EAF5NULLIF(<expression1>, <expression2>)--NULLIF 函数在expression1 与expression2 相等时返回NULL 值若不相等时则返回expression1 的值SELECT NULLIF('dsssdsadasdasdd','dsssdsadasdasdd')--运⾏结果为:NULL。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
河南工业大学实验报告
课程数据库原理及应用_ 实验名称 T-SQL流程控制和函数
一.实验目的
1.熟练掌握变量的定义、赋值与使用。
2.熟练掌握常用基本运算符。
3.熟练掌握流程控制语句,尤其是条件语句和循环语句。
4.熟悉并掌握常用的系统函数。
5.理解什么是标量函数、内嵌表值函数及多语句表值函数。
6.熟练掌握自定义函数的定义和调用方法。
二.实验内容及要求
对CPXS数据库,完成如下任务:
1.创建一名为CustomerName的局部变量,并在SELECT语句中使用该变量查找“客
户D”购买产品的情况(包括产品名称、单价)。
2.用T-SQL语言编程输出3~300之间能被7整除的数。
3.查询CP表中各种产品的产品编号、产品名称和价格,对其价格按以下规则进行转
换:若价格小于1000,替换为“廉价产品”;若价格在1000-2000之间,替换为“一般产品”;若价格大于2000小于5000,替换为“昂贵产品”;若价格大于5000,替换为“奢侈品”;列标题更改为“评价”。
4.使用系统函数,计算今天距“2012-1-1”还剩多少天。
5.根据产品编号,查询该产品的名称;(函数名为udf_GetCPName)
6.根据客户编号,统计其在某个时期内所购买的商品名称、数量及金额(函数名为
udf_GetCPListByCID);对函数udf_GetCPListByCID,查询“客户A”在“2011-1-1”
到“2011-9-30”期间交易的销售日期、产品名称、销售数量和销售金额,并按销售日期升序排序。
三.实验过程及结果
(说明:要写出相关SQL语句,实验结果可以是运行画面的抓屏,抓屏图片要尽可能的小。
)
7.创建一名为CustomerName的局部变量,并在SELECT语句中使用该变量查找“客
户D”购买产品的情况(包括产品名称、单价)。
USE CPXS
GO
DECLARE @CustomerName CHAR(20);
SET @CustomerName= '客户D';
SELECT 产品.产品名称,产品.价格
FROM 产品,客户,销售
WHERE 客户名称=@CustomerName AND 客户.客户编号=销售.客户编号AND 产品.
产品编号=销售.产品编号
8.用T-SQL语言编程输出3~300之间能被7整除的数。
DECLARE @i int
set @i=3
while @i<=300
BEGIN
IF @i%7=0
select @i '被7整除的数'
SET @i=@i+1
END
9.插询CP表中各种产品的产品编号、产品名称和价格,对其价格按以下规则进行转
换:若价格小于1000,替换为“廉价产品”;若价格在1000-2000之间,替换为“一般产品”;若价格大于2000小于5000,替换为“昂贵产品”;若价格大于5000,替换为“奢侈品”;列标题更改为“评价”。
USE CPXS
SELECT 产品名称,
CASE
WHEN 价格<1000 then'廉价产品'
WHEN 价格<2000 then'一般产品'
WHEN 价格<5000 then'昂贵产品'
WHEN 价格>5000 then'奢侈品'
END AS 评价
FROM 产品
10.使用系统函数,计算今天距“2012-1-1”还剩多少天。
DECLARE @day int
SET @day=DA TEDIFF(day,GETDA TE(),'2012-1-1')
PRINT @day
11.根据产品编号,查询该产品的名称;(函数名为udf_GetCPName)
USE CXS
GO
CREATE FUNCTION udf_GetCPName(@b char(20))RETURNS char(20)
AS
BEGIN
DECLARE @a char(20)
SELECT @a=(SELECT产品名称
FROM产品
WHERE产品编号=@b )
RETURN @a
END
12.根据客户编号,统计其在某个时期内所购买的商品名称、数量及金额(函数名为
udf_GetCPListByCID);对函数udf_GetCPListByCID,查询“客户A”在“2011-1-1”
到“2011-9-30”期间交易的销售日期、产品名称、销售数量和销售金额,并按销售日期升序排序。
四.实验中的问题及心得
许多语句的用法还是不熟悉,不能很好的变换,练习不够,记不清不知道在什么情况用什么语句。