SQL笔记

根据李天生SQL Server 2008视频教程学习所得

——————————————————————————————————————————————————————————————————————————————

一、SQL Server讲解

1、标识种子和标识自增量:

         标识种子:从多少开始增加

         标识自增量:每次增加多少

2、T-SQL语句

  创建数据库:create  database 仓库1

  删除(一个或者多个)数据库:drop  database  仓库1,仓库2

  更改数据库名称:exec  sp_renamedb  仓库1,仓库2

3、关键字:一个表中在一列中绝对不会相同的字段

4、外部关键字:字段在本表中不是关键字,在其它表中是关键字

5、主键:一列,它的值能唯一区分表中每一行

  主键可以使用多个列,所有主键应该满足以下条件:

  满足以下条件:

    * 任意两行都不具有相同的主键值

    * 每个行都必须具有一个主键值(主键列不允许NULL值)

二、T-SQL语句详解

1、 创建数据库:

  

  name         数据库名

  filename   文件所在名

  size            数据库文件初始化大小

  maxsize    最大文件大小

  filegrowth         增长率

2、创建表

  

  建表设置主键,标识种子和标示量identity(1,1),初始自增AUTO_INCREMENT=100

     create  table  user(id  int  identity(1,1)  primary  key  auto_ increment);

3、修改表名称

    exec sp_rename "techer","教师表"

4、增加表字段

    alert from techer add Email VARCHAR(60) default ‘123@qq.com’

5、修改表字段

    alert from techer

    alert column A varchar(50)

6、删除表字段

    drop column A

7、更改表字段记录值

    update techer set A=100,B=100,C=100,D=100 where A=1

8、删除表记录

    delete  from  techer  where  A=100

9、新增表字段记录

    insert  into  techer(A,B,C,D)  values(100,100,100,100)

10、使用IN关键字(表示字段值在指定集范围内的)

    select  *  from  techer  where  A  in(0,1,100)

11、where子句检索是否为NULL值的列(IS  NULL空值检查

    select name from HR_APPLYPLAN where orgId IS NULL;

    select name from HR_APPLYPLAN where orgId IS NOT NULL;

12、where子句使用BETWEEN操作符检索(可能漏掉开始结束时间的数据)

    select * from techer where createDate BETWEEN '2017-6-16' and '2017-6-23';

    select * from techer where A NOT BETWEEN 20 and 100;

13、distinct关键字指示消除重复值,返回一列中不同的值——(放在列前面)

    

    select distinct state from HR_APPLYPLAN;

14、嵌套查询

              select  *  from  techer  where  A>=(select  A  from  techer  where  B=100)

15、 多表嵌套查询

              select  *  from  techer  where  A  in(select  A  from  techer  where  B=100)

16、排序检索的数据

    * 子句控制检索数据的排序——(Order  By)

      select name from HR_APPLYPLAN order by createDate;

    * Order  By增加ALL关键字,分组会使用所有行的值,即使规定不能显示

    * 子句控制检索数据按两个列排序

      Select  name  from  APPLYPLAN  order by  createDate,createUser;

    * 子句控制检索数据按升序(asc)/降序(desc)排序

      select * from HR_APPLYPLAN order by createDate desc;

      select * from HR_APPLYPLAN order by createDate asc;

      /

               * 子句检索对多个列进行排序,则都需要指定关键字

      select * from HR_APPLYPLAN order by createDate desc,name desc;

    * 检索字段让其为中文名称显示

      select personnel_No as 序号,personnel_name as 姓名 from rsgl_personnel_BaseInfo

      

    * 检索前n行用top关键字:

      select top 5 * from HR_APPLYPLAN;

              * 检索前百分之n数据用percent关键字

      select top 10 percent * from HR_APPLYPLAN;

    * 使用完全限定表名列名的方式检索数据库

      select HR_APPLYPLAN.name from wxtDb.dbo.HR_APPLYPLAN;

         17、统计函数

             COUNT函数——只统计有内容的

                  统计所有记录行数

                  select  COUNT(*)  as  行数  from  techer;

                  统计单独一列记录行数

                  select  COUNT(name)  as  行数  from  techer;

             SUM函数——统计总和

                  select  SUM(工资)  as  工资  from  techer;

             AVG函数——统计列平均值

                  select  AVG(年龄)  as  年龄  from  techer;

             MAX函数——求列最大值

                  select  MAX(工资)  as  最高工资  from  techer;

             MIN函数——求列最小值

                  select  MIN(工资)  as  最低工资  from  techer;

         18、函数的综合运用(compute  by)——排序的字段中要和分组的字段相同

                  select  *  from  techer  order  by  名称,年龄  compute  max(工资), min(工资), sum(工资), age(工资)  by  年龄;

      

         19、分组汇总(group  by)——通过某字段分组(having为分组设定条件)

                  select  姓名,MAX(工资)  as  最高工资  from  techer  group  by  姓名  having  SUM(工资)>5000;

         20、谓词查询( exists )——exists判断有一个符合条件集合即可查询

                  select  *  as  最高工资  from  techer  where  not  exists(select  *  from  techer  where  A=100);

         21、谓词查询( any )——any集合中任意一个值

                  select  *  as  最高工资  from  techer  where  工资>any(select  *  from  techer  where  A=100);

                  谓词查询( all )——all集合中所有值

                  select  *  as  最高工资  from  techer  where  工资>all(select  *  from  techer  where  A=100);

         22、检索表扩展

    1、过滤数据

                       * where子句操作符说明

      

    2、数据过滤

                       * 组合多个where子句检索(以多个AND子句或OR子句的方式)

                           select name from HR_APPLYPLAN where id>5 AND state=1;

        

                       * where子句组合使用OR子句,表示数据库匹配任一条件

                           select id,name,state from HR_APPLYPLAN where id<5 OR state=1;

        

                       * where子句组合AND和OR子句,会优先选择AND子句,需要使用”()”分组

                           优先级排序:not  》 and  》  or

                           select * from HR_APPLYPLAN where (id>10 OR id<5) AND state='0';

        

                       * where子句NOT操作符——(否定后面的所有条件

                           select * from HR_APPLYPLAN where id NOT IN(5 ,7, 10);

        

3、通配符过滤

                       * LIKE操作符

        百分号(%)通配符:(‘%’匹配不了以NULL做列值的行)

                                    ‘a%’          以a起头的列值

                                    ‘%a%’               列值包含a

                                    ‘%a’          以a结束的列值

                                    ‘a%b’                以a起头b结束的列值

                                    select * from HR_APPLYPLAN where name like '%%';

        下划线(_)通配符:与’%’的作用一样,但是只能匹配单个字符而不是多个,所以可以使用多个下划线

          select * from HR_APPLYPLAN where name like '第_年';

           

                           当值中存在百分号%或下划线_,使用escape运算符

                               select * from HR_APPLYPLAN where name like '%/%%' escape '/';

          select * from HR_APPLYPLAN where name like '%*%%' escape '*';

                           以上SQL语句使用escape关键字指定字符解释通配符

          

                       * 正则表达式

                           进行OR匹配(类似OR操作符)

23、查询出的记录结果存储到另一个表中

                  select * into 教师表 from techer where name='于'

24、集合

                  ①、原字段基础上更新表记录

                          update  教师表  set  姓名='教师表'+姓名

                  ②、集合并运算(union)

                          select * from 教师表 union select * from techer

                  ③、集合交运算(interset)

                          select * from 教师表 interset select * from techer

         25、连接查询

                  ①、普通连接查询

        select * from student,techer where student.NO=techer.A

        select * from student,techer where NO=A

        

                  ②、超连接查询

                          1、内连接

        select * from student inner join techer on student.NO=techer.A

        

                          2、左连接——保证左边表中所有记录都显示,不管是否满足后面条件

        select * from student left join techer on student.NO=techer.A

        

                          3、右连接——保证右边表中所有记录都显示,不管是否满足后面条件

        select * from student right join techer on student.NO=techer.A

        

        4、全连接——左右两个表不管是否满足条件,都显示出来

        select * from student full join techer on student.NO=techer.A

三、约束

四、T-SQL编程

①、数据类型

         1、整数数据类型(Bigint)(Int)(Smallint)(Tinyint)

         2、浮点数据类型(real)(Float)(Decimal)(Numreic)

         3、二进制数据类型(Binary)(Varbinary)(Uniqueidentifier)

                  *       二进制大型对象(binary large object)——异常巨大的数据对象

         4、逻辑数据类型(true)(false)

         5、文本数据类型(Text)(Ntext)

         6、图形数据类型(Image)

         7、字符型数据类型(char)(nchar)(varchar)(nvarchar)

         8、日期时间数据类型(DateTime)(SmallDateTime)

         9、货币数据类型(Money)(SmallMoney)

         10、自定义数据类型(SYSNAME)

         11、可变数据与表数据类型(SQL-VARIANT)(TABLE)

②、局部变量

         局部变量使用'@'声明

         1、声明:使用declare

         2、赋值:

                  Set:为单一变量赋值

        DECLARE @A int,@B CHAR(60),@C CHAR(60)

                  Select:同时为多个变量赋值

        SET @A=100

        SELECT @B='于',@C='文杰'

         3、输出:

                  Print:输出一个变量

                  Select:同时输出多个变量

        print @A

        SELECT @B,@C

         ③、全局变量

                  全局变量使用'@@'引用

         ④、注释

                  多行注释:/*  abcde  */

       单行注释:--

         ⑤、程序块(就是'{}'):

       Bigin … End

         ⑥、判断语句(使用and连接多条件):

       IF  @A>=80 and @B<=90

       ELSE

    case判断语句(直接使用返回值赋值给变量):

       set @C=

       case   when @A>=80 and @B<=90 then '良好'

        when @A>=90 and @B<=100 then '优秀'

        else '不及格'

       end

    while判断语句(输出80以内所有整数):——整数与字符串之间连接用','

      while @A<=80

      bigin

        set @B=@B+@A

        set @A=@A+1

      end

      select '80以内所有整数:',@B

    循环退出语句:

      breakcontinue

         ⑦、goto语句:跳转到指定标签,执行语句

      goto AAA

        print ''

        if @A<80 goto AAA

五、函数

1、三角函数:SIN(浮点数)、COS(浮点数)、TAN(浮点数)、COT(浮点数)

2、反三角函数:ASIN(浮点数)、ACOS(浮点数)、ATAN(浮点数)

3、角度弧度转换函数:角度转弧度:DEGREES  ——  弧度转角度:RADIANS

4、幂函数:EXP(浮点数)、LOG(浮点数)、LOG10(浮点数)、SQRT(浮点数)

5、取近似值函数:CELLING(数字)、FLOOR(数字)、ROUND(数字,整型)

6、符号函数:ABS(数字)、SIGN(数字)

7、随机函数(0~1之间的一个浮点数):RAND()

8、圆周率函数:PI()

9、字符串函数:

  字符转ASCII码值:ASCII()

  ASCII码值转字符:CHAR()

  字符串全转换成大写:UPPER()

  字符串全转换成小写:LOWER()

  数字转换成字符:str(数字,转换后长度,保留小数位)

10、字符串长度函数:LEN()

  去除字符串空格函数:去除头部:ltrim()   ——   去除尾部:rtrim()

  截取字符串函数:

    从左到右:LEFT(字符串,字符个数)

    从右到左:RIGHT(字符串,字符个数)

    指定截取:SUBSTRING(字符串,开始位置,字符个数)

  重复字符函数:REPLICATE(字符串,重复次数)

  反向函数:REVERSE(字符串)

  替换函数:REPLACE(字符串,替换前字符,替换后字符)

  指定替换函数:STUFF(字符串,开始位置,结束位置,替换字符串)

  加空格函数:space(空格数)

  数字类型转换函数:   cast(转换变量  as  转换数据类型)

            convert(转换数据类型,转换变量)

11、日期函数:

  系统时间:GETDATE()

  年月日:year(GETDATE())、month()、day()

  提取日期部分:

    DATENAME(提取部分, GETDATE())——返回值:字符型

    DATEPART(提取部分, GETDATE())——返回值:整型

  日期加减:DATEADD(DAY,数字,GETDATE())——数字正数是增加,负数减少

  日期之间的差:DATEDIFF(DAY,开始日期,结束日期)

12、创建函数:

  create  Function  函数名(@A  int)  returns  int

       as

       begin

  return @A

  end

  调用函数: select  dbo.函数名(参数)

  修改函数: alter function  函数名()

六、存储过程

七、游标

八、触发器

九、数据库安全与备份

十、报表

  SQL Server报表是完整的基于服务器的平台,可以创建、管理和发布报表

  使用SQL Server自带工具SQL Server Business实现数据库报表

——————————————————————————————————————————————————————————————————————————————

待续。。。。。。。

posted @ 2018-04-13 15:21  想名字头痛  阅读(303)  评论(0编辑  收藏  举报