zoukankan      html  css  js  c++  java
  • 今天学习啦所谓的高级语言啦

                     今天又回到啦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 仓库(仓库号)

                          好啦今天就总结到这里啦,嘿嘿,今天的比较多吧,但是还是要好好练习的啦,嘿嘿。

    我是小白,新建立了一个的群:461431726,希望在这里和大家一起交流,共同学习。前端的话建议加群:646564351,谢谢
  • 相关阅读:
    英语语法
    elk笔记2.0
    zabbix4.0-centos6 报错坑,是因为有3.0的包
    jenkins 用户授权
    python随记
    jenkins
    zabbix3.0、4.0 agent安装配置
    常用
    document.createElement()方法
    581. Shortest Unsorted Continuous Subarray(LeetCode)
  • 原文地址:https://www.cnblogs.com/dyxd/p/4160353.html
Copyright © 2011-2022 走看看