2015-10-20 sql2

                                                                  SQL SERVER(二)

三.插入,更新,删除,添加

    3.1insert插入

       insert into student(sno,sname,sage)

                values('1001'张三','28')   

       insert into student      

                values('1001'张三','28','女')

    3.2update修改

       update student set sno=30,sname='李四'where sage='25'    --修改student表,让sage=25的数据的sno修改为30,sname修改为李四

    3.3delete删除

       delete student where sno='1002'   --删除学号等于1002的数据

       drop table Users    --删除表Users

sletct * from
     (select sno,row_number() over(order by sno)as row from student)student
where row between 6 and 10

    3.4alter添加

         alter table student

         add

         ssex int null 

    3.5复杂查询

         select sno,sname,avg(sorce)

         from student

         group by sno,sname

         having count(*)>=4    //查询至少修了四门课程的学生学号,姓名以及平均成绩的SQL语句

         select distinct [name] from student   //查出student 中不重复的name

         select count(distinct name) from student   //查出student  中不重复的name的数量

 四.约束

     4.1.UNIQUE约束与PK的区别:

                一张表只能有一个PK,但可以有多个UNIQUE约束

                PK约束定义主键不能为空,但UNIQUE可以为空值

         方法:点"管理索引和键"---"添加"---"类型"选择"唯一键"---"列"添加进多个UNIQUE--关闭保存

         作用:当那多个unique同时都相同的时候,就会报错,实现了实体的完整性。

     4.2check约束

        方法:设计---列名右键---"管理check约束"---"添加"---"常规"表达式---写入你要约束的键值的表达式比如:laborage>0 and laborage<=100

                ---"关闭"保存

        作用:约束一个键值,实现域完整性,数据的完整性

        sql语句:

                creat table T1

               (

                  工资 money not null check(工资 between 2000 and 4000)

               )

 五.获取当前时间

    select year(getdate())   ------//获取当前的年

   select month(getdate()) ------//获取当前的月

   select day(getdate()) ---------//获取当前的天

   select year(birthday) from student   //从student表中获取birthday的年份

   select * from employ where month(birthday)=8   // 打印出8月份过生日的员工的所有信息

   select * from employ where year(getdate())-year(birthday)>25// year(getdate())为当前年份,打印出年龄大于25岁的员工的所有信息

   select dateadd(yy,100,getdate())//当天加上100年的时间,getdate()也可以换成具体的某一天比如写成:'2108/12/31'

   select dateadd(mm,1,getdate())//当天加上1个月的时间

   select dateadd(dd,100,getdate())//当天加上100天的时间

   select datediff(yy,getdate(),'2108/12/31')//当天距离2108/12/31还有多少年

   select datediff(mm,getdate(),'2108/12/31')//当天距离2108/12/31还有多少月

六.isnull

   select sno,sage,ssex,isnull(smame,'')               //为null的sname用kong显示出来

   select title,content,isnull(categoryID,0) from news  //为null的categoryID用0显示出来

七.case行判断

   select sno,sname,case

   when(sno=1)then '第一'

   when(sno=2)then '第二'

   end as biecheng

   from student

                                                                  SQL SERVER(三)

 

一.索引

   索引分为:聚集索引--------每一个表只能有一个聚集索引一般是主键

              非聚集索引-------每一个表可以有多个非聚集索引

   注意事项:默认情况下,SQL Server会默认主键为聚集索引,这样会造成资源的浪费。

   创建索引:  在“索引/键”对话框中单击“添加”。

                   从“选定的主/唯一键或索引”列表中选择新索引。

                   在网格中选择“创建为聚集的”,然后从该属性右侧的下拉列表中选择“是”。保存表时将在数据库中创建索引。

二.存储过程

      优点:在创建时进行编译,以后每次执行存储过程不需要再编译,而一般的SQL语句要每执行一次编译一次

               所以一些复杂逻辑的SQL建议写在存储过程里面和一些经常被调用到的SQL建议写在存储过程里面

               安全性高,可设定只有某些用户才具有指定存储过程的使用权

       sql语句:

       create proc 存储名

       (

          @name varchar(200),

          @age  int

       )

      as

      select * from Category where [name]=@name and age=@age

   

      查看结果:执行exec 存储名 'xudads',11

      更改/删除存储过程:ALTER proc

                                 Drop proc

三.触发器

     触发器是一种特殊的存储过程,它是在数据在进行增、删、改的时候同时进行的操作,相当于一个事件。

     新建一个触发器:

          create trigger 触发器名称

          ON  表名

          after delete /* 有三种INSERT,DELETE,UPDATE*/

          AS

          begin

          select * from deleted /*在删除后同时查出删除后的内容*/

          end

          GO

 

 

 

 

 

posted @ 2015-10-24 14:53  以深  阅读(228)  评论(0编辑  收藏  举报
TOP