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现在不想写了,后面有更新可能会写上.....
    --署名:黄飘龙

  • 相关阅读:
    Leetcode 92. Reverse Linked List II
    Leetcode 206. Reverse Linked List
    Leetcode 763. Partition Labels
    Leetcode 746. Min Cost Climbing Stairs
    Leetcode 759. Employee Free Time
    Leetcode 763. Partition Labels
    搭建数据仓库第09篇:物理建模
    Python进阶篇:Socket多线程
    Python进阶篇:文件系统的操作
    搭建数据仓库第08篇:逻辑建模–5–维度建模核心之一致性维度2
  • 原文地址:https://www.cnblogs.com/holong2003/p/3090574.html
Copyright © 2011-2022 走看看