1、T-SQL中各子句在逻辑上按照以下顺序进行处理

1、 FROM 2、 WHERE 3、 GROUP BY 4 、HAVING 5、 SELECT 6、ORDER BY

查询实例:

 SELECT EMPID,  YEAR(ORDERDATE) AS ORDERYEAR, COUNT(*) AS NUMBERORDERS
FROM SALES.ORDERS
WHERE CUSTID=71
GROUP BY EMPID,YEAR(ORDERDATE)
HAVING COUNT(*)>1
ORDER BY EMPID,ORDERYEAR

2、WHERE 阶段只返回让逻辑表达式为TRUE的那些行,不过。要时刻记住 T-SQL 使用的是 三值谓词逻辑 ,所以逻辑表达式的结果可以为 TRUE, FALSE, UNKNOWN。在三值逻辑中,“返回TRUE" 与 ”不返回FALSE“ 并完全一样。如果要WHERE 阶段返回逻辑表达式计算结果为 TRUE 的行,就不会反悔逻辑表达式计算结果为FALSE 或UNKNOWN 的那些行。

3、GROUP BY 将WHERE 中查询到的行 按”组“进行组合。如果涉及到分组,那么GROUP BY 阶段之后的所有阶段(包括HAVING SELECT 以及GROUP BY )的操作对象将是组。

4、聚合函数(COUNT,SUM,AVG,MIN,MAX)所有的聚合函数都会忽略 NULL值 只有一个例外 COUNT(*)。

5、DISTINCT 排除重复 唯一关键字

6、OVER 子句,为行定义一个窗口,以便进行特定运算。可以把行的窗口简单地认为是运算符要操作的一个行的集合。

7、T-SQL 中支持的谓词: IN BETWEEN LIKE

  IN 用于检查一个值(或标量表达式)是否与一组元素中的至少一个相等

8、查询 NULL  用

REGION IS NULL 而不能用 REGION = NULL

9、同时操作概念:即在同一逻辑查询处理阶段中出现的所有表达式都是同时进行计算。

10、[^<字符列或范围>]通配符 例如 ‘[^A-E]’表示 不属于 A-E

  表示不属于指定字符列或范围内的任意单个字符。

11、表运算符: JOIN APPLY PIVOT UNPIVOT

  JOIN 对两个表进行操作:联接有三种基本类型 交叉联接 内联接 外联接

  交叉联接 -> 笛卡儿积

  内联接-> 笛卡儿积,过滤

  外联接->笛卡儿积,过滤,添加外部行

  内联接:先进行笛卡儿积运算,INNER JOIN 为默认连接方式,可直接用JOIN  关键字在 ON 条件后进行过滤。

12、外联接: LEFT(OUTER) JOIN (左保留),RIGHT(OUTER) JOIN(右保留),FULL(OUTER) JOIN(都保留)

  外联接会应用内联接所应用的两个逻辑处理步骤(笛卡尔积和ON过滤)此外还多加一个外联接特有的第三部。添加外部行。

  ON 子句中的过滤条件不是最终的,换句话说,ON 子句中的条件并不能最终决定保留表中部分行是否会在结果中出现,而只是判断是否能够匹配另一边表中的某些行。

13、辅助表的建立:

SET NOCOUNT ON;
USE 数据库名;
IF OBJECT_ID('NUMS','U') IS NOT NULL DROP TABLE NUMS;
CREATE TABLE NUMS(N INT NOT NULL PRIMARY KEY);
DECLARE @I AS INT=1;
BEGIN TRAN
WHILE @I<=10000
BEGIN
INSERT INTO NUMS VALUES(@I);
SET @I=@I+1;
END
COMMIT TRAN
SET NOCOUNT OFF;

14、先对两个表执行外联接,再和第三个表执行内联接。如果在内联接ON 子句中的条件是对来自外联接非保留表的列和第三个表的列进行比较,那么所有的外不行就会被过滤掉。

15、如果标量表达式的值与子查询返回值中的任何一个值相等,IN 谓词的计算结果就为 TRUE

16、EXISTS 谓词返回 TRUE的结果:它的输入时一个子查询,如果子查询能够返回任何行,该谓词则返回TRUE 否则返回 FALSE

  EXISTS 使用的是二值逻辑。

17、开窗函数 OVER()

   调用格式 函数名(列) OVER(选项)

   COUNT(*) OVER() 对于查询结果的每一行都返回所有符合条件的行的条数。若OVER 关键字后括号为空,则开窗函数会对结果集中所有行进行聚合运算。

    

//例
SELECT FNAME,FCITY,FAGE,FSALARY,
COUNT(*) OVER(PARTITION BY FCITY)//表示对结果集按 FCITY 进行分区
FROM T_PERSON

18、DISTINCT 必须放在开头,作用于单列的话,去除重复,作用多列的话,必须多列都不同才会被去除。

T-SQL 语句的理解的更多相关文章

  1. Beego 学习比较8:SQL语句

    SQL语句 1>     常用的SQL语句 1->新增  insert into 表名(字段A,字段B,…) Values(字段A值,字段B值,…) 2->更新  update 表名 ...

  2. 做项目单个功能的时候要理解需求和sql语句。

    做项目单个功能的时候要理解需求和sql语句.最好直接按照给出来的sql语句或者存储过程来写,避免有极其细微的差别所造成的不同. 做宜春国税二期的时候有个功能叫夜间开票情况,钻取明细时由于没理解sql语 ...

  3. Flask关于请求表单的粗浅应用及理解+简单SQL语句温习

    1.请求表单 请求表单的知识点是flask数据请求中很小的一部分,首先要了解一下GET和POST请求:http://www.w3school.com.cn/tags/html_ref_httpmeth ...

  4. 说说我对SQL语句执行顺序的理解,以SQL Server为例

    有人说SQL语句难学,其实并不难!只要掌握了基本的语句执行顺序,用程序化的思维分析结构,再难的问题也会迎刃而解! 假设有如下表emp 现在要求 列出员工姓名(ename)中不含A的所有人按照部门编号( ...

  5. 关于SQLSERVER中用SQL语句查询的一些个人理解

    作为一个编程菜鸟说真的很难有什么见解,也就是写给一些刚学习编程的人,希望能给他们一些帮助吧! SQLSERVER作为刚开始入门学习的数据库,SQL语句也并不算太难!说白了也就是建库,建表,建约束,对数 ...

  6. 深入理解 LINQ to SQL 生成的 SQL 语句

    Ø  简介 在 C# 中与数据交互最常用的语句就是 LINQ 了,而 LINQ to SQL 是最直接与数据库打交道的语句,它可以根据 LINQ 语法生成对应的 SQL 语句,在数据库中去执行.本文主 ...

  7. sqlite sql语句关键字GROUP BY的理解

    第一遍看GROUP BY的介绍时,没看懂. SQLite 的 GROUP BY 子句用于与 SELECT 语句一起使用,来对相同的数据进行分组.在 SELECT 语句中,GROUP BY 子句放在 W ...

  8. 理解SQL原理,写出高效的SQL语句

    我们做软件开发的,大部分人都离不开跟数据库打交道,特别是erp开发的,跟数据库打交道更是频繁,存储过程动不动就是上千行,如果数据量大,人员流动大,那么我们还能保证下一段时间系统还能流畅的运行吗?我们还 ...

  9. 简单理解ORM,实体类生成查询SQL语句

    目前有很多开源的ORM项目,大多情况下也不需要我们重复去造轮子,我们只需要了解轮子怎么造的,怎么用就可以,下面简单说一下怎么通过实体生成一个SQL语句: 先建立2个Attribute类,TableAt ...

  10. SQL语句中带有EXISTS谓词的子查询的理解与使用

    EXISTS:代表存在量词. 在SQL中,把具有全称量词的谓词查询问题转换成等价的存在量词的谓词查询予以实现. 如有三个表,Student(Sno,Sname),Course(Cno,Cname),S ...

随机推荐

  1. JSON 字符串中的中括号和大括号区别详解

    json 变量有两种可能, 可能是一个对象, (类似 类的实例), 也可能是一个数组!! 主要是要 从 ""语义" 上来分析, 到底该用 大括号还是用中括号: 如果从语义 ...

  2. break prefab instance的原理

    prefab可无限apply: 如果把一个模块做成了prefab,这个prefab可能在同一个scene中添加多个,甚至添加到了多个scene中.设所有这些实例为instance(1),instanc ...

  3. Java 基础【13】 文件(文件夹) 创建和删除

    使用 java.io.file 创建文件(文件夹),算是 java 最基础的知识,但实战项目中还是需要知晓细节. 比如 File 类中的 mkdir() 和 mkdirs() 的区别. JDK API ...

  4. 在oracle中,如何当前系统时间往前推7天

    ' day from dual 另附: 当前时间减去7分钟的时间 ' MINUTE from dual 当前时间减去7小时的时间 ' hour from dual 当前时间减去7天的时间 ' day ...

  5. iOS真机调试引入第三方库(如友盟等)编译时候,出现错误提示

    用Xcode 7 beta 3在真机(iOS 8.3)上运行一下工程,结果发现工程编译不过.看了下问题,报的是以下错误: MARK:解决方法:在building Setting 中设置bitCode ...

  6. 什么是js面向对象??

    简单的来说就是键值对,写一个函数,然后传值进去,   function Person(name,age){           this.name = name;           this.age ...

  7. JavaScript数组的方法

    push()     :将参数加载到数组的最后,返回数组的长度 pop()    :删除数组的最后一个元素,返回删除的值 shift()      :删除数组的第一个元素,返回删除的值 unshift ...

  8. Extjs 知识体系1-dom操作

    操作dom 主要是Ext.element,主要是简单的操作 Ext.dom.CompositeElement // 操作dom集合 ps:Extjs 使用字面量{} 形式,不支持链式操作 一.获取元素 ...

  9. firefox屏蔽广告真是太好了

    在ubuntu上使用firefox有些页面的广告很多,很讨厌. 突然想到是否可以把这些广告屏蔽掉.在网上搜索了一下,发现有个 adblock plus插件,安装上发现广告没有了,很干净. 开源软件就是 ...

  10. shell判断条件整理

    1.字符串判断 str1 = str2 当两个字符串串有相同内容.长度时为真 str1 != str2 当字符串str1和str2不等时为真 -n str1 当字符串的长度大于0时为真(串非空) -z ...