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. 通过端口 8080 连接到主机 localhost 的 TCP/IP 连接失败

    错误:“connect timed out.请验证连接属性,并检查 SQL Server 的实例正在主机上运行,且在此端口接受 TCP/IP 连接,还要确保防火墙没有阻止到此端口的 TCP 连接.”这 ...

  2. python基础之循环结构以及列表

    python基础之编译器选择,循环结构,列表 本节内容 python IDE的选择 字符串的格式化输出 数据类型 循环结构 列表 简单购物车的编写 1.python IDE的选择 IDE的全称叫做集成 ...

  3. C#.NET 大型通用信息化系统集成快速开发平台 4.1 版本 - 数据权限增强、范围权限增强

    并不是不想做B\S的管理工具,只是精力实在不够,由于用户权限管理组件是基础组件.所以C\S的也无妨,不会有几个人在乎Oracle,SQLServer是否不b\s的,注重的是功能性能,请大家不要纠结与是 ...

  4. jquery插件treetable使用

    下载后treetable插件后只需要保留jquery.treetable.css样式文件,jquery.treetable.theme.default.css皮肤文件和jquery.treetable ...

  5. 缩小窗口时CSS背景图出现右侧空白BUG的解决方法

    页面容器(#wrap)与页面头部(#header )为100%宽度.而内容的容器(#page)为固定宽度960px.浏览窗口缩小而小于内容层宽度时会产生宽度理解上的差异.如下图所示窗口宽度大于内容层宽 ...

  6. document.forms用法

    1.FF中不能接受document.forms("formname")的使用,ie中可以 最好改成document.forms["formname"]的下标用法 ...

  7. 谈谈我的入门级实体框架Loogn.OrmLite

    每次看到有新的ORM的时候,我总会留意一下,因为自己也写过一个这样的框架,人总是有比较之心的.我可能会down下来跑一跑,也可能不会这么做,这个取决于跑起来的难易程度.我是很懒的,有XML配置或其他稍 ...

  8. JDBC连接各种数据库的地址名称

    oracle    driverClass:oracle.jdbc.driver.OracleDriver    url:jdbc:oracle:thin:@127.0.0.1:1521:dbname ...

  9. mysql的基本命令行操作

    mysql>CREATE DATABASE imooc; //创建数据库 mysql> USE imooc ;//选择数据库 mysql> SELECT DATABASE();//查 ...

  10. ajax 多个表单值问题,表单序列化加其它表单值

    $.ajax({ type: "post", url: "{:u('cart/totalByCard')}?t="+Math.random(9999), dat ...