T-SQL 语句的理解
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 语句的理解的更多相关文章
- Beego 学习比较8:SQL语句
SQL语句 1> 常用的SQL语句 1->新增 insert into 表名(字段A,字段B,…) Values(字段A值,字段B值,…) 2->更新 update 表名 ...
- 做项目单个功能的时候要理解需求和sql语句。
做项目单个功能的时候要理解需求和sql语句.最好直接按照给出来的sql语句或者存储过程来写,避免有极其细微的差别所造成的不同. 做宜春国税二期的时候有个功能叫夜间开票情况,钻取明细时由于没理解sql语 ...
- Flask关于请求表单的粗浅应用及理解+简单SQL语句温习
1.请求表单 请求表单的知识点是flask数据请求中很小的一部分,首先要了解一下GET和POST请求:http://www.w3school.com.cn/tags/html_ref_httpmeth ...
- 说说我对SQL语句执行顺序的理解,以SQL Server为例
有人说SQL语句难学,其实并不难!只要掌握了基本的语句执行顺序,用程序化的思维分析结构,再难的问题也会迎刃而解! 假设有如下表emp 现在要求 列出员工姓名(ename)中不含A的所有人按照部门编号( ...
- 关于SQLSERVER中用SQL语句查询的一些个人理解
作为一个编程菜鸟说真的很难有什么见解,也就是写给一些刚学习编程的人,希望能给他们一些帮助吧! SQLSERVER作为刚开始入门学习的数据库,SQL语句也并不算太难!说白了也就是建库,建表,建约束,对数 ...
- 深入理解 LINQ to SQL 生成的 SQL 语句
Ø 简介 在 C# 中与数据交互最常用的语句就是 LINQ 了,而 LINQ to SQL 是最直接与数据库打交道的语句,它可以根据 LINQ 语法生成对应的 SQL 语句,在数据库中去执行.本文主 ...
- sqlite sql语句关键字GROUP BY的理解
第一遍看GROUP BY的介绍时,没看懂. SQLite 的 GROUP BY 子句用于与 SELECT 语句一起使用,来对相同的数据进行分组.在 SELECT 语句中,GROUP BY 子句放在 W ...
- 理解SQL原理,写出高效的SQL语句
我们做软件开发的,大部分人都离不开跟数据库打交道,特别是erp开发的,跟数据库打交道更是频繁,存储过程动不动就是上千行,如果数据量大,人员流动大,那么我们还能保证下一段时间系统还能流畅的运行吗?我们还 ...
- 简单理解ORM,实体类生成查询SQL语句
目前有很多开源的ORM项目,大多情况下也不需要我们重复去造轮子,我们只需要了解轮子怎么造的,怎么用就可以,下面简单说一下怎么通过实体生成一个SQL语句: 先建立2个Attribute类,TableAt ...
- SQL语句中带有EXISTS谓词的子查询的理解与使用
EXISTS:代表存在量词. 在SQL中,把具有全称量词的谓词查询问题转换成等价的存在量词的谓词查询予以实现. 如有三个表,Student(Sno,Sname),Course(Cno,Cname),S ...
随机推荐
- AutoCAD2006的安装及CASS7.1的配置破解
-----本文只限于学习交流,商业用途请支持正版! -----转载请注明:http://www.cnblogs.com/mxbs/p/6193190.html 准备: AutoCAD2006.CASS ...
- iOS 2D绘图 (Quartz 2D) 概述
本篇博客原文地址:http://blog.csdn.net/hello_hwc?viewmode=list 由于自己的项目需要,从网络上下载了许多关于绘制图形的demo,只是用在自己的项目中,很多地方 ...
- c语言之【#ifdef】
电脑程序语句,我们可以用它区隔一些与特定头文件.程序库和其他文件版本有关的代码. 1 2 3 #ifdef 语句1 // 程序2 #endif 可翻译为:如果宏定义了语句1则程序2. 作用:我 ...
- CBOW and Skip-gram model
转自:https://iksinc.wordpress.com/tag/continuous-bag-of-words-cbow/ 清晰易懂. Vector space model is well k ...
- CSS编写技巧
1.尽量少的使用全局的重置代码 全局重置代码:*{margin:0; padding:0;}对于熟悉CSS的人来说并不陌生,并且有很多人的第一句CSS代码就是这句.它可以避免不同浏览器的默认间距不同而 ...
- resin启动报错:guava-15.0.jar!/META-INF/beans.xml:5: <beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"> is an unexpected top-level tag. 异常
项目完成,经过本地的测试,最后在部署的时候,发现服务器resin启动失败,报错信息如下:
- net MVC 重定向总结
[HttpPost] public ActionResult StudentList(string StudName, string studName, DateTime BirthDay, Form ...
- PyQt 自定义信号带参数
import sys from PyQt5.QtCore import pyqtSignal, QObject from PyQt5.QtWidgets import QMainWindow, QAp ...
- 教你一招:解决u盘插入计算机时提示格式化,如何恢复u盘中的文件
1.插入U盘时,计算机提示格式化 看到这里,到底是格不格呢?别怕,随便你了. 2.查看U盘属性,发现都为零 怎么办呢?u盘上面有很多重要文件啊!别急,继续往下看. 3.解决办法 (1)下载DiskGe ...
- PE启动菜单修改工具 MsgDiyer(GfxMenu Message制作工具) V2.0.3官方版
MsgDiyer基本功能 1.新建message文件.修改现有message文件:2.自定义背景图片:3.制作message字体,包括行高.大小等(目前不兼容WIN7):4.自定义字库:5.导入外置 ...