今天又回到啦SQL Servel语言的学习啦,嘿嘿,感觉这些都是我迫不及待要学习的啦,在这学习的每一天感觉好多的知识都是我乐意去学习的啦,我来到这里就是因为知道自己有太多不会的东西啦,所以每当接受新的知识时间感觉自己可以很轻松的学习啦,不是逼迫的自己的感觉真好啦,我在我们上完课后练习啦一遍,然后感觉对着电脑时间太长啦,于是就出去飘啦一圈休息一下下啦。学习固然重要,但是疲劳的感觉好难受啦,我们还是要学会调节下自己的状态啦,当然,以后工作啦也会是这样的吧,当有项目工作啦,我们就忘记啦休息吧,或许那时间正在焦虑的思考怎么结局问题忘记啦休息,嘿嘿,一定要记得给自己片刻停留的气息,让自己心晴气爽啦。好啦,下面总结下我今天学习的数据库系统操作的高级语言啦。
一.局部变量与全局变量的定义
我们之前已经学习了C#的基础,那么在Sql中局部变量的定义和C#中是一样的啦,只是定义的格式区别很大啦,下面就写下Sql中局部变量的定义啦
--局部变量 declare @str char(20) --定义参数 select @str ='hello word' --用select给参数赋值 set @str ='hell' --或者用set给参数赋值 print @str --输出@str的值 --全局变量 print @@version --全局变量一般我们使用系统里面给我们写好的
二.流程控制语句的使用
1.条件判断语句(if...else...)
--条件判断语句(if...else...) --某地到青岛的邮政里程为1043,通过邮政局向青岛城区交 "特征专递"邮件, 24小时之内达到。计费每克0.12元 --但超过100克,超过数量每克0.05元,算出邮费 declare @a real, @b int set @a=120 if @a <100 begin --begin end 相当于C#中的花括号的使用方法 set @b=@a*0.12 end else begin set @b=0.12*100+(@a-100)*0.05 end print'距离是'++cast(@a as varchar(50)) print '邮费是'+cast(@b as varchar(50)) --定义一个用户名和密码,判断是否正确 declare @user varchar(20),@pwd varchar(20) select @user ='admin',@pwd ='admin' if @user='zhangsan' begin if @pwd='123' print '用户名或者密码不正确,请重新输入' else print '密码错误' end else if @user='lisi' begin if @pwd='123' print '用户名或者密码不正确,请重新输入' else print '密码错误' end else if @user='admin' begin if @pwd='admin' print '输入正确' else print '密码错误' end else begin set @pwd='密码不正确' end print @pwd
2.while表达式
--while 条件表达式 --begin --命令行或程序 --end --求1-100的和 declare @x int,@sum int select @x=1,@sum=0 while @x>0 and @x<=100 begin set @sum=@sum+@x set @x=@x+1 end print '1-100的和:'+cast(@sum as varchar(20))
3.关键字break的使用
--break的用法 declare @i int,@sum0 int select @i=1,@sum0=0 while @i>0 and @i<=100 begin set @sum0=@sum0+@i set @i=@i+1 if @i>50 --当i>50时间跳出当前循环 break end print '1-50的和:'+cast(@sum0 as varchar(20))
4.关键字continue的使用方法
--continue的用法 declare @num int,@sum1 int select @num=1,@sum1=0 while @num>0 and @num<=100 begin set @num =@num+1 if @num%2=1 continue else set @sum1=@sum1+@num end print '1-100间的偶数的和:'+cast(@sum1 as varchar(20))
5.case语句的使用
--case语句 --case [表达式] -- when 条件表达式1 then 结果1 -- when 条件表达式2 then 结果2 -- ........ -- else -- 结果表达式n -- end --输入学生的成绩 1-100之间,否则就会提示"您输入的成绩不对,成绩应该在0-100之间" --成绩 评语 --90-100 优秀 --80-90 优良 --70-80 中等 --60-70 及格 --60分一下 不及格 declare @score float,@str varchar(50) select @score=53,@str= case when @score>100 or @score<0 then'您输入的成绩格式不对' when @score>=60 and @score<70 then '及格' when @score>=70 and @score<80 then '中等' when @score>=80 and @score<90 then '优良' when @score>=90 and @score<100 then '优秀' else '不及格' end print '评语是:'+@str --查询不同仓库的平均工资 select *,不同仓库的平均工资= case when 仓库号='wh1' then(select AVG(工资) from 职工 where 仓库号='wh1') --在then后面是查询出平均工资 when 仓库号='wh2' then(select AVG(工资) from 职工 where 仓库号='wh2') --即在通过仓库号查询各个仓库号的平均工资 when 仓库号='wh3' then(select AVG(工资) from 职工 where 仓库号='wh3') when 仓库号='wh4' then(select AVG(工资) from 职工 where 仓库号='wh4') end from 职工
三.视图的创建删除以及修改
create view v1 as select 仓库号,城市,面积 from 仓库 create view v2 as select 姓名,工资 from 职工 where 工资>1800 create view v3 as select 仓库.仓库号,仓库.城市,仓库.面积,仓库.创建时间,职工.姓名,职工.性别,职工.工资 from 仓库,职工 where 仓库.仓库号=职工.仓库号 alter view v2 --修改视图 as select 仓库.仓库号,城市,面积 from 仓库 drop view v3 --删除视图 update test set 面积=面积+88 where 仓库号='wh1' --修改视图 delete test where 仓库号='wh1'
四.存储过程的操作
--存贮过程 --create procedure name --创建存储过程 --@parms.... --as --begin --end ---execute name 参数1 参数2 --执行存储过程 --1. create procedure proc_sql as begin declare @i int set @i=0; while(@i<10) begin print char(ascii('a')+@i)+'的ascii码'+cast(ascii('a')+@i as varchar(50)) set @i=@i+1 end end excute proc_sql --2. --无参数的存贮过程执行 create procedure proc2 as begin select * from 职工 where 工资>2000 end execute proc2 --有参数的存贮过程 --3.求三个数中的最大值 create procedure proc4 @x1 int,@x2 int,@x3 int as begin declare @max int if @x1>@x2 set @max=@x1 else set @max=@x2 if @x3>@max set @max=@x3 print '3个数字中的最大值是'+cast(@max as varchar(50)) end execute proc4 15,18,39 --3. create procedure sq7 @mingz int,@maxgz int as select * from 职工 where 工资 between @mingz and @maxgz execute sq7 1500,2000 4. create procedure sq8 @cangkuhao varchar(50), @maxgz int output, @avggz real output as begin select * from 职工 where 仓库号=@cangkuhao select @maxgz=MAX(工资)from 职工 where 仓库号=@cangkuhao select @avggz=AVG(工资) from 职工 where 仓库号=@cangkuhao end declare @x1 int,@x2 real execute sq8 'wh2',@x1 output,@x2 output select @x1 as wh2职工最大工资,@x2 as wh2职工平均工资 execute sp_rename sq7,rocky --重命名
五.触发器
--触发器是一种特殊的存贮过程,他就相当于c#中的事件触发器主要是通过事件触发而被执行的 --create trigger 触发器名称 on 表 for insert[update,delete] as -- begin --程序块 --end create trigger rockyR on 仓库 for update --创建 as begin insert into 仓库(仓库号,城市,面积,创建时间) values('wh01','郑州',1800,'2014-12-12'),('wh02','北京',1700,'2014-12-13'),('wh03','上海',1600,'2014-12-15') end update 仓库 set 面积=面积-10 where 仓库号='wh2' --修改 create trigger rk on 仓库 for insert,update,delete as begin execute xp_sendmail '123456@qq.com' end --alter trigger rockyR on 表名 for insert[update,delete] --修改触发器 drop trigger rk --删除触发器
六.索引的操作
在sql中,讲SQL语句组成一个事务,其目的是保证这一组sql语句能够得到可靠地执行,如果系统中出现了错误阻碍sql的执行,并且只要其中任何一条语句出现错误,事务中所有的sql语句都不会被执行,即要么全部sql执行,要么全不执行,即创建索引的格式如下:
create unique index unique_index on 仓库(仓库号)
好啦今天就总结到这里啦,嘿嘿,今天的比较多吧,但是还是要好好练习的啦,嘿嘿。