zoukankan      html  css  js  c++  java
  • mssql数据库基本语句总结(2)

      1 use cstn
      2 go
      3 --建立一个check约束
      4 alter table Student add constraint CK_Studetn_tSAge check(tsage between 0 and 100)
      5 go 
      6 
      7 --对貂禅的年龄进行修改
      8 update Student set tSAge=19 where tSId=9
      9 go 
     10 
     11 --select语句的执行过程
     12 select tsgender,count(1)--5从分完组的并经过筛选的结果中,取得能够得到列,构成新的结果集
     13 from student            --1从表中取结果集合
     14 where tsage>18          --2对集合内容进行筛选,得到新的结果集
     15 group by tsgender       --3对结果集进行分组  
     16 having count(*)>1       --4对分组后的结果进行筛选
     17 order by count(*) desc  --6最后对结果进行排列得到游标(非集合的结果,如果有top等就能从新变成集合)
     18 go
     19 --通配符 :_通配单个字符,%通配多个字符,^非通配符,[]选一通配符,在中括号中选一个匹配,带有转意的功能如[%],[[]等
     20 select * from Student
     21 go 
     22 --增加几列为后通配符做对比(一条语句加入多行信息写法)
     23 insert into Student(tsid,tsname,tsage)
     24 select 11,N'关飞',28
     25 select 11,N'关飞飞',28
     26 select 11,N'关飞飞云',28
     27 select 11,N'关%飞云',28
     28 --修改下主键某个值
     29 set identity_insert student on
     30 insert into  student(tid,tsid,tsname,tsage) values(21,11,N'关雨关%羽',28)
     31 set identity_insert student off
     32 go --????更新不了找原因???——>答案:不能update语句,但是能insert与语句而且要标明要插入的列的列明!!!!
     33 
     34 --事物回滚后主键自增2,不管有没有出错。
     35 begin tran 
     36 begin try
     37 insert into Student(tsid,tsname,tsage)
     38 select 11,N'关飞关',28 union all
     39 select 11,N'关飞飞',28 union all
     40 select 11,N'关飞飞云',28 union all
     41 select 11,N'关%飞云',28
     42 end try
     43 begin catch 
     44 commit
     45 end catch
     46 insert into student values (11,N'关雨_关%羽',28,N'')--测试主键是否自增,结果有
     47 go
     48 --通配符来选则对比
     49 select *from Student where tSName like N'关_'
     50 select *from Student where tSName like N'关__'
     51 select *from Student where tSName like N'关%'
     52 select *from Student where tSName like N'关[%]%'
     53 go 
     54 
     55 select * from Student
     56 go
     57 --局部临时表#表名,全局临时表##表名+两种表的插入方法
     58 select * into ##stu from student where tsgender=N''--表不存在插入表方法,*也可以用你要插入的字段代替
     59 go
     60 select* from ##stu 
     61 go
     62 insert into ##stu --!!!这种插入是插入的表头,不是接着表末尾插入的!!!!!且是要已经存在的表才可以这么插入表
     63 select tsid,tsage,tsname from student where tsgender=N'' order by tsid desc
     64 go
     65 drop table ##stu
     66 go
     67 
     68 --创建一个视图(!!!!注:在视图的查询语句中必须为每一列创建一个列明,如果列没有列名的话!!!!)
     69 create view vw1
     70 as
     71 select 
     72 *,
     73 case 
     74     when tsage>20 and tsage<25 then N'青少年'
     75     when tsage>=25 then N'成年了'
     76     when tsage<=20 then N'小屁孩'
     77     else N'没人要啦'
     78 end  -----没有给列取名字,所以报错,此时没有取名的列不作为视图的一部分,!!!此时没有报错的列一起生成了视图!!!!
     79 from Student
     80 go
     81 --修改视图时候用alter关键字代替create
     82 alter view vw1
     83 as
     84 select 
     85 *,
     86 case 
     87     when tsage>20 and tsage<25 then N'青少年'
     88     when tsage>=25 then N'成年了'
     89     when tsage<=20 then N'小屁孩'
     90     else N'没人要啦'
     91 end  as 称呼-----给列取名字,不报错了
     92 from Student
     93 go
     94 
     95 select * from vw1
     96 go
     97 
     98 --创建一个存储过程
     99 --(优点1.提前在数据编译好的,所以速度比较快2.提高系统安全性,防止spl注入攻击3.降低了网络流量,代码直接存储于数据库中,所以不会产生大量T-sql语句的代码流量。4.允许模块化程序设计,类似方法复用)
    100 --(缺点1.代码可读性差,相当难维护2.很多存储过程不支持面向对象的设计,无法采用面向对象的方式将业务逻辑进行封装,从而无法形成通用的可支持复用的业务逻辑框架。3.可移植性差,使用存储过程封装业务逻辑限制了应用程序的可移植性。这里不详细说明。。。)
    101 create proc  usp_insert_stu 
    102 @id int,
    103 @name nvarchar(10),
    104 @age int=45,
    105 @gender nchar(2)=N''
    106 as
    107 begin 
    108 insert into student values(@id,@name,@age,@gender)
    109 end
    110 go
    111 --修改存储过程
    112 alter proc  usp_insert_stu 
    113 @id int,
    114 @name nvarchar(10),
    115 @age int=45,
    116 @gender nchar(2)=N''
    117 as
    118 begin 
    119 insert into student values(@id,@name,@age,@gender)
    120 end
    121 go
    122 --执行一个存储过程
    123 exec usp_insert_stu 12,N'黄忠6'
    124 go
    125 --删除一个存储过程
    126 drop proc usp_insert_stu
    127 go
    128 select * from student
    129 delete from student where tid>22
    130 --总结视图和存储过程:1.视图和存储过程都是有as语法的2.视图一定不能有begin end,而存储过程可有可无,但是建议写上3.要修改时候两者直接把creat改为alter即可,这是其他语句(除了触发器!如下)所没有的特点!!!
    131 
    132 
    133 
    134 --和视图和存储过程有相似语法的——触发器
    135 select *into ##test from student--1创建一个测试用的临时表导入student数据
    136 truncate table ##test--2删除数据达到仅保留表结构的特点
    137 --创建一个触发器(和事件类比,执行delete update 或者insert后(after或者代替(instead of))触发某个事件(那个看关键字用哪个)
    138 go
    139 create trigger tri_Student_delete_after 
    140 on student after  delete 
    141 as
    142 begin
    143       insert into ##test
    144     select tid,tsid,tsname,tsage from deleted
    145 end
    146 go
    147 
    148 --修改下触发器的语法create 改为 alter即可
    149 alter trigger tri_Student_delete_after 
    150 on student after  delete 
    151 as
    152 begin
    153     set identity_insert ##test on
    154       insert into ##test(tid,tsid,tsname,tsage) 
    155     select tid,tsid,tsname,tsage from deleted
    156 end
    157 --测试下delete的触发器
    158 delete from student where tid>22
    159 select * from #test
    160 --删除一个触发器
    161 drop trigger tri_Student_delete_after 
    162 --触发器小小总结:1.触发器里头不要有太复杂的代码,因为触发器没有结束事件就没有结束。2.在修改或者创建触发器的时候要么单独执行要么在语句开头加个go,(表示上一个语句的结束(不准确的说法啊~确切的说是go之前是作为一个代码段发给数据库操作的)),因为create trigger和alter trigger语句必须是查询批次中第一句~~!!!!
    163 
    164 --游标的使用(效率低下,最好不要用)========(在视图,子查询,内联函数,派生表中只能是集合不能是游标)=====不解释
    165 --自己看书去吧,游标cursor内容和级联jion现在不想写了,后面有更新可能会写上.....
    166 --署名:黄飘龙

    use cstn
    go
    --建立一个check约束
    alter table Student add constraint CK_Studetn_tSAge check(tsage between 0 and 100)
    go

    --对貂禅的年龄进行修改
    update Student set tSAge=19 where tSId=9
    go

    --select语句的执行过程
    select tsgender,count(1)--5从分完组的并经过筛选的结果中,取得能够得到列,构成新的结果集
    from student            --1从表中取结果集合
    where tsage>18          --2对集合内容进行筛选,得到新的结果集
    group by tsgender       --3对结果集进行分组 
    having count(*)>1       --4对分组后的结果进行筛选
    order by count(*) desc  --6最后对结果进行排列得到游标(非集合的结果,如果有top等就能从新变成集合)
    go
    --通配符 :_通配单个字符,%通配多个字符,^非通配符,[]选一通配符,在中括号中选一个匹配,带有转意的功能如[%],[[]等
    select * from Student
    go
    --增加几列为后通配符做对比(一条语句加入多行信息写法)
    insert into Student(tsid,tsname,tsage)
    select 11,N'关飞',28
    select 11,N'关飞飞',28
    select 11,N'关飞飞云',28
    select 11,N'关%飞云',28
    --修改下主键某个值
    set identity_insert student on
    insert into  student(tid,tsid,tsname,tsage) values(21,11,N'关雨关%羽',28)
    set identity_insert student off
    go --????更新不了找原因???——>答案:不能update语句,但是能insert与语句而且要标明要插入的列的列明!!!!

    --事物回滚后主键自增2,不管有没有出错。
    begin tran
    begin try
    insert into Student(tsid,tsname,tsage)
    select 11,N'关飞关',28 union all
    select 11,N'关飞飞',28 union all
    select 11,N'关飞飞云',28 union all
    select 11,N'关%飞云',28
    end try
    begin catch
    commit
    end catch
    insert into student values (11,N'关雨_关%羽',28,N'男')--测试主键是否自增,结果有
    go
    --通配符来选则对比
    select *from Student where tSName like N'关_'
    select *from Student where tSName like N'关__'
    select *from Student where tSName like N'关%'
    select *from Student where tSName like N'关[%]%'
    go

    select * from Student
    go
    --局部临时表#表名,全局临时表##表名+两种表的插入方法
    select * into ##stu from student where tsgender=N'男'--表不存在插入表方法,*也可以用你要插入的字段代替
    go
    select* from ##stu
    go
    insert into ##stu --!!!这种插入是插入的表头,不是接着表末尾插入的!!!!!且是要已经存在的表才可以这么插入表
    select tsid,tsage,tsname from student where tsgender=N'女' order by tsid desc
    go
    drop table ##stu
    go

    --创建一个视图(!!!!注:在视图的查询语句中必须为每一列创建一个列明,如果列没有列名的话!!!!)
    create view vw1
    as
    select
    *,
    case
     when tsage>20 and tsage<25 then N'青少年'
        when tsage>=25 then N'成年了'
        when tsage<=20 then N'小屁孩'
     else N'没人要啦'
    end  -----没有给列取名字,所以报错,此时没有取名的列不作为视图的一部分,!!!此时没有报错的列一起生成了视图!!!!
    from Student
    go
    --修改视图时候用alter关键字代替create
    alter view vw1
    as
    select
    *,
    case
     when tsage>20 and tsage<25 then N'青少年'
        when tsage>=25 then N'成年了'
        when tsage<=20 then N'小屁孩'
     else N'没人要啦'
    end  as 称呼-----给列取名字,不报错了
    from Student
    go

    select * from vw1
    go

    --创建一个存储过程
    --(优点1.提前在数据编译好的,所以速度比较快2.提高系统安全性,防止spl注入攻击3.降低了网络流量,代码直接存储于数据库中,所以不会产生大量T-sql语句的代码流量。4.允许模块化程序设计,类似方法复用)
    --(缺点1.代码可读性差,相当难维护2.很多存储过程不支持面向对象的设计,无法采用面向对象的方式将业务逻辑进行封装,从而无法形成通用的可支持复用的业务逻辑框架。3.可移植性差,使用存储过程封装业务逻辑限制了应用程序的可移植性。这里不详细说明。。。)
    create proc  usp_insert_stu
    @id int,
    @name nvarchar(10),
    @age int=45,
    @gender nchar(2)=N'男'
    as
    begin
    insert into student values(@id,@name,@age,@gender)
    end
    go
    --修改存储过程
    alter proc  usp_insert_stu
    @id int,
    @name nvarchar(10),
    @age int=45,
    @gender nchar(2)=N'女'
    as
    begin
    insert into student values(@id,@name,@age,@gender)
    end
    go
    --执行一个存储过程
    exec usp_insert_stu 12,N'黄忠6'
    go
    --删除一个存储过程
    drop proc usp_insert_stu
    go
    select * from student
    delete from student where tid>22
    --总结视图和存储过程:1.视图和存储过程都是有as语法的2.视图一定不能有begin end,而存储过程可有可无,但是建议写上3.要修改时候两者直接把creat改为alter即可,这是其他语句(除了触发器!如下)所没有的特点!!!

    --和视图和存储过程有相似语法的——触发器
    select *into ##test from student--1创建一个测试用的临时表导入student数据
    truncate table ##test--2删除数据达到仅保留表结构的特点
    --创建一个触发器(和事件类比,执行delete update 或者insert后(after或者代替(instead of))触发某个事件(那个看关键字用哪个)
    go
    create trigger tri_Student_delete_after
    on student after  delete
    as
    begin
       insert into ##test
        select tid,tsid,tsname,tsage from deleted
    end
    go

    --修改下触发器的语法create 改为 alter即可
    alter trigger tri_Student_delete_after
    on student after  delete
    as
    begin
        set identity_insert ##test on
       insert into ##test(tid,tsid,tsname,tsage)
        select tid,tsid,tsname,tsage from deleted
    end
    --测试下delete的触发器
    delete from student where tid>22
    select * from #test
    --删除一个触发器
    drop trigger tri_Student_delete_after
    --触发器小小总结:1.触发器里头不要有太复杂的代码,因为触发器没有结束事件就没有结束。2.在修改或者创建触发器的时候要么单独执行要么在语句开头加个go,(表示上一个语句的结束(不准确的说法啊~确切的说是go之前是作为一个代码段发给数据库操作的)),因为create trigger和alter trigger语句必须是查询批次中第一句~~!!!!

    --游标的使用(效率低下,最好不要用)========(在视图,子查询,内联函数,派生表中只能是集合不能是游标)=====不解释
    --自己看书去吧,游标cursor内容和级联jion现在不想写了,后面有更新可能会写上.....
    --署名:黄飘龙

  • 相关阅读:
    vim cheat
    latex base
    latex font
    lstings
    使用React 如何设计 模板自定义的框架
    react hooks 的更进一步适应性使用
    IDEA反编译jar包源码
    Redis Lua实战
    Spring AOP拦截并打印controller层请求日志
    漏桶算法和令牌桶算法的区别
  • 原文地址:https://www.cnblogs.com/holong2003/p/3090574.html
Copyright © 2011-2022 走看看