• sql基础复习


    --1、while循环
    declare @sum int
    declare @i int
    set @i=1
    set @sum=0
    while(@i<101)
    begin
     set @sum =@sum+@i
     set @i=@i+1
       if(@i>90)
       print @i
    end
    print @sum
    
    --2、goto语句
    declare @num int
    set @num=100
    flag:
    print @num
    select @num=@num+1
    while(@num<106)goto flag
    print '------------------'
    print @num
    
    --3、表变量
    
    declare @mytable table(nam nvarchar(50),num nvarchar(50))
    
    insert into @mytable select ClassName,ClassNum  from dbo.tb_Class
    
    select * from @mytable
    
    --4、局部临时表,全局临时表
    
    --局部临时表
    create table #temp_tb(
     id int,
     pwd nvarchar(50)
    )
    
    --全局临时表
    create table ##temp_tb(
     id int,
     pwd nvarchar(50)
    )
    
    --5、批量导入数据并创建临时表
    select ClassName,ClassNum into #temp from dbo.tb_Class
    select * from #temp
    
    --6、区间查询 between and (not between and)
    
    select * from tb_class where classnum between 1200 and 1500
    
    select * from tb_class where classnum not between 1200 and 1500
    
    --7、in变量,is null is not null,去重复distinct
    
    --8、随机查询、子查询
    
    select top 1 * from tb_class order by newid()
    
    --9、行号
    
    select '行号'=identity(int,1,1),classname,classnum into #temp from tb_class
    select * from #temp
    
    --模糊查询 like not like "% _ []"通配符
    
    select * from tb_class where className like '高%[^三]'
    
    select * from tb_class where des like '[a-z]%'
    
    select * from tb_class where ClassNum like '[^1]%'
    
    select * from tb_class where des like '%100/%%' escape '/'
    
    select * from tb_class where des+ClassName like '%[二在]%'
    
    
    --case 语句、类型转换 cast显示转换
    select *,班级=
    case 
    when ClassNum>1500 then '大班'
    when ClassNum=1500 then '中班'
    when ClassNum<1500 then cast(ClassNum as nvarchar(20))
    end
    from tb_class
    
    
    --类型转换 1,cast 2,Convert
    select convert(nvarchar(20),getdate(),111)as 时间格式
    
    --去除空格 rtrim ltrim
    
    select ltrim('       中国    人         ')as title
    
    --截取字符串substring
    
    select substring('中华人民共和国',3,2) as title
    
    --字符插入sutff
    
    select stuff('中华共和国',3,0,'人民') as title
    
    --计算字符长度 len
    select len('中华人民共和国')
    
    --字符串大小写lower upper
    --字符串替换replace
    select replace('中*华*人*民*共*和*国','*','-')
    
    --获取字符所在位置
    
    select substring('010-99998888',0,charindex('-','010-99998888'))
    
    --日期函数
    select year(getdate())
    select month(getdate())
    select day(getdate())
    select datepart(year,getdate())
    select datepart(hh,getdate())
    
    select datename(dw,getdate()) as 今天星期几
    
    select datename(ww,getdate()) as 本周是一年的第几周
    
    select datename(yy,getdate()) as 年份
    
    select datename(dy,getdate()) as 今天是一年中的第几天
    
    select datediff(d,'2012-11-27','2012-11-30') as 相差天数
    select datediff(hh,'2012-11-27','2012-11-30') as 相差小时
    
    
    select getdate(),dateadd(d,3,getdate()) as 增加三天
    select getdate(),dateadd(hh,3,dateadd(d,3,getdate())) as 增加三天在增加三小时
    
    --排序order by  笔画排序:Chinese_prc_stroke_cs_as_ks_ws,音序排序:chinese_prc_cs_as
    
    select * from tb_class order by des collate Chinese_prc_stroke_cs_as_ks_ws
    
    select * from tb_class order by des collate Chinese_prc_cs_as
    
    --动态排序
    
    declare @myorder int
    set @myorder=2
    select * from tb_class order by case @myorder
    when 1 then classnum
    when 2 then id
    end
    desc
    
    --聚合函数,where(作用单行) 和 having(作用多行)区别
    
    select count(distinct classname) from tb_class
    
    --游标  sql语句面向一个集合操作,游标面向逐条记录的操作
    declare cur_s cursor 
    for select * from tb_class
    for read only --只读游标
    for update of classname--更新游标
    
    declare @cur_ss cursor--游标变量
    
    open cur_s
    
    fetch next from cur_s
    
    while @@FETCH_STATUS=0
    begin
    fetch next from cur_s
    end
    
    close cur_s
    --释放游标
    deallocate cur_s
    
    --存储过程是一组为了完成特定功能的SQL语句集合,创建Create、修改Alter、删除Drop
    create procedure GetClassInfo
    (
    @id int,
    @ClassName nvarchar(50),
    @Sum int output--存储过程返回值一种情况
    )
    as
    begin 
    select @Sum=sum(ClassNum)from tb_Class where id>@id and ClassName=@ClassName
    declare @AllSum int
    select @AllSum=sum(ClassNum)from tb_Class
    return @AllSum--存储过程返回值另一种情况
    end
    go
    declare @sum int
    declare @AllSum int
    EXEC @AllSum=GetClassInfo 1,'高三',@sum output
    select @sum as 总数,@AllSum as 全部总数
    
    --重命名存储过程
    exec sp_rename 'GetClassInfo','ReNameGetInfo'
    --监视存储过程
    exec sp_monitor
    --返回参数含义
    --   *last_run: 上次运行时间
    --
    --      *current_run:本次运行的时间
    --
    --      *seconds: 自动执行存储过程后所经过的时间
    --
    --      *cpu_busy:计算机CPU处理该存储过程所使用的时间
    --
    --      *io_busy:在输入和输出操作上花费的时间
    --
    --       *idle:SQL Server已经空闲的时间
    --
    --       *packets_received:SQL Server读取的输入数据包数
    --
    --       *packets_sent:SQL Server写入的输出数据包数
    --
    --        *packets_error:SQL Server在写入和读取数据包时遇到的错误数
    --
    --        *total_read: SQL Server读取的次数
    --
    --         *total_write: SQLServer写入的次数
    --
    --         *total_errors: SQL Server在写入和读取时遇到的错误数
    --
    --          *connections:登录或尝试登录SQL Server的次数
    
     
    
    
    --自动执行存储过程
    --sp_procoption [@procName=] 'procedure', [@optionName=] 'option', [@optionValue=] 'value'
    --         [@procName=] 'procedure': 即自动执行的存储过程
    --
    --         [@optionName=] 'option':其值是startup,即自动执行存储过程
    --
    --         [@optionValue=] 'value':表示自动执行是开(true)或是关(false)
    exec sp_procoption @procName='masterproc', @optionName='startup', @optionValue='true' 
    
    --自定义函数
    --标量函数
    create function myfunAdd(@a int,@b int)
    returns int
    as
    begin
    declare @c int
    set @c=@a+@b
    return @c
    end
    go
    declare @a1 int,
            @b1 int,
            @c1 int
    set @a1=8
    set @b1=7
    set @c1=School.dbo.myfunAdd(@a1,@b1)
    print @c1
    
    --表值函数
    create function GetTable()
    returns table
    as
    return (select * from tb_class)
    
    select * from School.dbo.GetTable()
    
    --触发器,特殊的存储过程,嵌套触发器、递归触发器
    
    create trigger mytrigger
    on tb_Class
    for update,delete,insert--三种触发器
    as
    update tb_student set age=age+1 where id =1
    
    update tb_Class set des='???' where id =1
    delete from tb_Class where id=6
    
    
    --事务
    begin try
    begin transaction
    insert into tb_class values('特色班',100,'描述')
    insert into tb_student([name],sex,age,classid) values('小刘',1,22,5)
    commit transaction
    end try
    begin catch
    rollback
    end catch
    
    --保存事务
    begin transaction
    insert into tb_class values('特色二班',100,'描述')
    insert into tb_student([name],sex,age,classid) values('小二',1,22,5)
    save transaction save1
    insert into tb_class values('特色三班',100,'描述')
    insert into tb_student([name],sex,age,classid) values('小叁',1,22,5)
    rollback transaction save1
    commit transaction
    
    --事务并发控制
    begin tran
    select * from dbo.tb_Class with(holdlock)
    waitfor delay '00:00:10'
    commit tran
    
    
    update tb_Class set ClassNum=200 where id=12
    select * from tb_Class
    
    --视图
    
    --创建约束,主键约束、外键约束、唯一约束、check约束、default约束
    
    --创建表设置字段
    create table ss
    (
     id int identity(1,1) not null constraint pk_id primary key
    
    )
    
    --修改表设置字段
    alter table dbo.tb_Class
    add constraint pk_id primary key(id)
    -- drop constraint pk_id --删除主键
    --add constraint un_ss unique(id)--唯一约束
    add constraint ch_sex check (like '[0-1]')
    add constraint de_sex default 1 for sex
    
    alter table dbo.tb_student
    add constraint fk_classid
    foreign key(classid)
    references tb_Class (id)
  • 相关阅读:
    任务1 Kittenblock应用初步设置,第14章 图形化编程与代码对照解读
    第13章Arduino编程参考
    任务12 Arduino感温亮灯
    性能优化------内存优化1
    安卓OOM和Bitmap图片二级缓存机制(二)
    安卓OOM和Bitmap图片二级缓存机制
    通过BitmapFactory.decodeByteArray把byte[]转成Bitmap出现的OOM的解决方法
    理解Android Java垃圾回收机制
    java设计模式----代理模式
    通过代理Activity模式,以移花接木的方式,加载sd卡目录下的apk界面
  • 原文地址:https://www.cnblogs.com/nidakun/p/3739180.html
Copyright © 2020-2023  润新知