T-SQL 语句的理解

时间:2022-08-27 17:20:39

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关于请求表单的粗浅应用及理解&plus;简单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. 自定义漂亮的Android SeekBar样式

    系统自带的SeekBar真是太难看了,不能容忍! 只能自己做了,先来张效果图 第1个Seekbar 背景是颜色,thumb是图片,上代码: <SeekBar android:id="@ ...

  2. RabbitMQ学习总结 第二篇:快速入门HelloWorld

    目录 RabbitMQ学习总结 第一篇:理论篇 RabbitMQ学习总结 第二篇:快速入门HelloWorld RabbitMQ学习总结 第三篇:工作队列Work Queue RabbitMQ学习总结 ...

  3. c&plus;&plus;学习笔记之变量

    变量的命名规则:标示符要能体现含义,变量的名字一般用小写,用户自己定义的类一般第一个字母大写,如果标示符有多个单词组成,则需要加下划线.' 变量声明和定义的关系:程序有多个文件组成,有时候需要再多个文 ...

  4. O-C相关-07-&commat;property关键字简介与使用

    基本概念:在O-C中,创建完类之后还需要给一个类添加属性和方法,之前说过的set和get方法比较繁琐,因此引入了@property 这个编译器指令.@property 是一个编译器指令.所谓的编译器指 ...

  5. iOS监听模式系列之NSNotificationCenter的简单使用

    NSNotificationCenter 对于这个没必要多说,就是一个消息通知机制,类似广播.观察者只需要向消息中心注册感兴趣的东西,当有地方发出这个消息的时候,通知中心会发送给注册这个消息的对象.这 ...

  6. 怎么随时获取Spring的上下文ApplicaitonContext,和Spring管理的Bean

    BeanFactory接口 Interface BeanFactory getBean <T> T getBean(String name, Class<T> required ...

  7. GDOI2018 涛涛摘苹果 &lbrack;CDQ分治&rsqb;

    传送门我会让你知道哪里有题面吗(逃 思路 显然不能模拟苹果下掉的过程,考虑计算每个苹果对询问的贡献. 显然一开始就有的苹果可以看做第0天变出来的,于是只需要考虑变出来的苹果了. 设当前询问节点\(x\ ...

  8. hive spark版本对应关系

    查看hive source下面的pom.xml,可以找到官方默认发布的hive版本对应的spark版本,在实际部署的时候,最好按照这个版本关系来,这样出现兼容问题的概率相对较小. 下面面列出一部分对应 ...

  9. spring概念简介、bean扫描与注册实现方式

    写在前面:本文作为整理,包含很多个人理解,有跳跃成份,初学者如果看晕了,可以先看其它同类文章,或者……多看几遍. 一.概念部分: 1.spring概念:网上有很多 2.spring核心:IOC(DI) ...

  10. JSONObject与JSONArray

    最近在学习过程中用到了稍微复杂点的json数据需要将json数据解析出来,这里就截取一部分作为例子 1.JSONObject介绍 JSONObject-lib包是一个beans,collections ...