SQL Server2012 T-SQL 基础教程

第一章 T-SQL查询与编程的背景

   SQL Server 排序规则(collation)

1.3 创建表和定义数据完整性

 /* U:代表用户表,P:存储过程  -----*/

     IF OBJECT_ID ('dbo.SixCampaign', 'U') IS NOT NULL

           DROP TABLE dbo.SixCampaign

第二章 单表查询

2.1 SELECT语句的元素

       topselect top(5) WITH TIES *

               FROM  ORDER BY 字段 DESC ----返回与检索到的第5行中最后一行Orderby字段值相同的其它所有行

       OFFSET-FETCH

               select * FROM  Order by 字段 OFFSET 50 ROWS FETCH NEXT 25 ROWS ONLY

                                                                OFFSET 0 ROW FETCH First(NEXT) 25 ROWS ONLY

     逻辑处理顺序:1.FROM 

                        2.WHERE

                        3.GROUP BY

                        4.HAVING

                        5.SELECT (表达式、DISTINCT)

                        6.ORDER BY TOP/OFFSET-FETCH

2.2 谓词和运算符

     运算符优先级(从最高到最低):

                                   1.() 圆括号

                                   2.* 乘号、除号、取余

                                   3.+ 正号、负号、加号 串联、减号

                                   4.=、>、<、>=、<=、<>、!=、!>、!< 比较运算符

                                   5.NOT

                                   6.AND

                                   7.Between INLIKEOR

                                   8.= 赋值

2.3 CASE 表达式  

      ISNULLISNULL(字段,'') 返回第一个非NULL的参数值 函数

      COALESCE(字段1,字段2,字段3,.............) (标准):返回第一个非NULL

      IIF:IIF(表达式,1,0),满足表达式时返回,否则返回0

      CHOOSECHOOSE(<index>,<expr1>,<expre2>,<expre3>),返回列表中指定索引的表达式

2.4 NULL 标记

      where [字段]='XX'  [字段]<>'XX' 输出结果中均不包含 NULL 值结果集,如需输出 NULL 结果集:[字段] IS NULL [字段]=NULL 错误)

2.5 同时操作

2.6 使用字符数据

      where [字段] COLLATE Latin1_General_CS_AS = N'davis'  ----区分大小写

      运算符和函数:   1.字符串连接(加号运算符和CONCAT函数) +号连接时如果某字段为NULL 则返回NULLCONCAT([字段1],' '+[字段2],' '+[字段3])

                             2.Substring

                             3.Left RIGHT

                             4.LEN 字符数 DATALENGTH 字节长度 函数 LEN会删除字符串尾随空格 

                             5.CHARINDEX函数:返回子字符串在字符串中第一次出现的位置

                             6.PATINDEX函数:返回模式在字符串中第一次出现的位置,例如 select PATINDEX ('%[0-9]%', 'abcc123hh7c'输出结果:5

                             7.REPLACE函数

                             8.REPLICATE函数:按照指定的次数重复字符串,例如 select REPLICATE ('abc', 3输出结果:abcabcabc

                             9.STUFF函数

                             10.UPPERLOWER函数:分别返回输入字符串的全部大写或小写字符

                             11.RTRIMLTRIM函数:分别删除尾随或前导空格后的输入字符串

                             12.FORMAT函数:将输入值格式化成一个字符串, 例如 select FORMAT (123, '0000000'输出结果:0000123

                             13.LIKE谓词:LIKE '[ABC]%'  LIKE '[^A-E]%'LIKE '%[_]%' or LIKE '%!_%'ESCAPE'!' 转义字符

2.7 使用日期和时间数据

      select GETDATE(),CURRENT_TIMESTAMP ,getutcdate(), sysdatetime(),sysutcdatetime (),sysdatetimeoffset()

     CASTCONVERTPARSE函数,及其TRY_对应函数  (标准使用CAST

     DATEADDDATEDIFFDATEPARTDATENAMEYEARMONTHDAY  、ISDATE 

     2012FROMPARTSEOMONTH返回月末日期

     DATEFROMPARTSselect DATEFROMPARTS (2015, 8,1 输出结果:2015-08-01

2.8 查询元数据

第三章 连接

      Cross join 笛卡尔积 

第四章 子查询

第五章 表表达式

     表表达式:派生表、公用表表达式(CTE)、视图、内嵌表值函数(内嵌TVF

    递归CTE:默认递归100

5.3 视图

     1.ENCRYPTION :可用于创建或修改视图、存储过程、触发器、用户自定义函数 UDF   

        SELECT  OBJECT_DEFINITION(OBJECT_ID('视图名')):获取视图定义文本,前提条件是该视图未定义ENCRYPTION 选项

        Alter View 视图名 WITH ENCRYPTION。。。。。:EXEC sp_helptext '视图名 -----对象‘视图名’的文本已加密

                        SELECT  OBJECT_DEFINITION(OBJECT_ID('视图名')) ---返回NULL

     2.SCHEMABINING选项:对视图和UDF可用,它将被引用对象的架构和列绑定到引用对象架构中。它指示不能删除被引用对象,也不能删除或修改被引用的列。

     3.Check Option选项:目的是防止出现视图修改与视图筛选的冲突,假设已存在一个视图查询定义。

           Alter View *** With SCHEMABINING

           As

          Select *** From ** where **

           with Check Option 

           Go

5.4 内嵌表值函数 :通过传递参数查询表

5.5 APPLY运算符

      Cross Apply:(Cross join

      Outer Apply:(Left join

第六章 集合运算符

6.1 UNION运算符

     UnionAB的并集

     union AllA+B

6.2 INTERSECT运算符

      IntersectAB的交集  (和谓词EXISTS

      Intersect all:如果A出现3行,B 5行,则返回minimum(x,y),返回3行

6.3 EXCEPT运算符

      ExceptA-BAB的差异

6.4 优先级 :1)INTERSECT;2)UNION/EXCEPT

6.5 规避不支持的逻辑阶段

第七章 查询

7.1 开窗函数

     SUM(*) OVER(Partition by * order by * Rows Between Unbounded preceding and current row) --窗口的框架子句

                          Unbounded following窗口分区的最后一行    框架位于分区开始                     当前行

7.1.1 排名开窗函数

        ROW_NUMBER() OVER(Partition by [Values1] Order by [Values2])1 2 3 4...

        RANK() OVER(Partition by [Values1] Order by [Values2])1 2 2 4。。。。

        DENSE_RANK() OVER(Partition by [Values1] Order by [Values2])1 2 2 3.。。。

        NTILE(10) OVER(Partition by [Values1] Order by [Values2])10个分区,每个分区的行数为总行数除以10取整,如果有余数从开头的分区依次添加一条额外行。

7.1.2 偏移开窗函数

        LAG([字段1],n,x) OVER(Partition By [字段2] Order by ***):按照分区返回前n行【字段1】的值,没有返回值时默认为“x”,后两个参数没有时默认返回前一行,且无返回值时默认为NULL

        LEAD:返回下一行值

        FIRST_VALUE:返回分区的第一行的某指定字段值

        LAST_VALUE:返回分区的最后一行的指定字段值

7.1.3 聚合窗口函数

        SUM([字段1]) Over(Partiotion BY *** order by ****)Over部分均可省略

7.2 透视数据

      PIVOT

7.3 逆透视数据

      UNPIVOT

7.4 分组集

      SQL能够在同一查询中定义多个分组集,包括Group By子句的Grouping setsCubeRollup从属子句,以及GroupingGrouping_ID函数。

     Group by Grouping sets(分组1),(分组2),(分组3)

     Group by Cube([a],[b],[c]):这3个字段的所有组合分组集和不分组的情况,((a,b,c),(a,b),(a,c),(b,c),(a),(b),(c),())

     Group by Rollup(a,b,c):其假定层次结构为a>b>c,分组集为((a,b,c),(a,b),(a),()

     函数:Grouping([字段]),如果该列是当前分组集的成员返回0,否则返回1;

               Grouping_ID(a,b,c)4中组合方式,b2中组合方式,c1种,以0表示为分组集成员,1不是分组集成员,(a,b)分组集时该函数返回:0*4+1*2+1*1=1

第八章 数据修改

       数据操作语言(Data Manipulation LanguageDML):包括SELECT、INSERT、UPDATE、DELETE、TRUNCATE MERGE语句。

8.1 插入数据

    1.INSERT VALUES:插入多行数据时以逗号分隔,可以将其作为表值构造函数以标准方式构造一个派生表,如

              SELECT * From  (Values (1,'20150701',4,'B'),(2,'20150702',1,'A'),(3,'20150703',3,'C'')) AS O(OrderID,OrderDate,EmpID,Custid);

    2.INSERT SELECT

    3.INSERT EXEC:将存储过程或动态SQL批处理返回的结果集插入到目标表中。

              INSERT INTO [Table](Values.....)  EXEC 存储过程

    4.SELECT INTO

    5.BULK INSERT:将来自文件的数据插入到一个现有表中。

              BULK INSERT 表名 FROM '文件路径'

                  WITH

                       (

                          DATAFILETYPE = 'char' ,  ----数据文件类型,如char、native

                          FIELDTERMINATOR = ',' ,    ------字段终止符,如逗号

                          ROWTERMINATOR = '\n'  ---行终止符,如换行符

                       );

8.1.6 标识列属性和序列对象

    1.标识列属性:identity自增长列:identity(第一个值,增量值 ,可以使用更为通用的$identity 形式(SELECT $identity FROM 表名)

8.2 删除数据

    1.DELETE

    2.TRUNCATE

8.3 更新数据

    1.UPDATE 

8.4 合并数据

    1.MERGE()

 1 Merge into CHH_Owner AS T
 2 
 3 Using (select * from VEDK_Owner where MyFlag in (0 ,1)) AS S
 4 
 5 on T .Tmagic= s.tmagic and t.magic =s. magic and t. location=s .location
 6 
 7 when matched
 8 
 9 then update set t.Surname =s. Surname,t .Address= s.Address ,t. Email=s .Email,
10 
11                 t.MOBILE =s. MOBILE,t .Telephone_1= s.Telephone_1 ,t. Telephone_2=s .Telephone_2, t.Fdate =s. Fdate
12 
13 when not matched --目标表中没有,源表中有
14 
15 then insert values( s.Tmagic ,s. Magic,s .Location, s.VIN ,s. SaleDate,s .Surname, s.Address ,s. Email,s .MOBILE, s.Telephone_1 ,s. Telephone_2,s .Fdate, 1,'2500-12-31' )
16 
17 --when Not matched by source --目标表中存在,源表中不存在
18 
19 --then delete

 

8.5 通过表表达式修改数据

8.6 使用TOP和OFFSET-FETCH修改

8.7 OUTPUT子句  inserted deleted

第九章 事务和并发处理

9.1 事物

    事物是一个工作单元,可能包含查询和修改数据以及修改数据定义等多个活动。

    显示定义事物的开始:BEGIN TRAN(或BEGIN TRANSACTION

    显示定义事物的结束:COMMIT TRAN

    如果不希望提交事物(即要撤销修改):ROLLBACK TRAN (或 ROLLBACK TRANSACTION

    事物的四个属性(ACID):原子性、一致性、隔离性、持续性

9.2 锁和阻塞

 

 

第十章 可编程对象

      

 

      

posted @ 2017-03-26 11:08  TINGL  阅读(2248)  评论(0编辑  收藏  举报