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 ...
随机推荐
- jdbc java数据库连接 5)CallableStatement 接口
CallableStatement执行存储过程(也是预编译语言) 首先在sql中执行以下带有输入参数的代码: DELIMITER $ CREATE PROCEDURE pro_findById(IN ...
- 10款.net 图形插件
在如今这个读图时代,图形图表的可视化数据表现形式已成为一种趋势.因为图表能直观的展示信息.对比和趋势等,所以许多项目开发中都需要用到图表控件,而很多图表控件都是在.NET平台下开发的,今天就为大家推荐 ...
- 【转载】WEB前端开发规范文档
本文转载自谈笑涧<WEB前端开发规范文档> 为 新项目写的一份规范文档, 分享给大家. 我想前端开发过程中, 无论是团队开发, 还是单兵做站, 有一份开发文档做规范, 对开发工作都是很有益 ...
- 20145208《信息安全系统设计基础》实验五 简单嵌入式WEB 服务器实验
20145208<信息安全系统设计基础>实验五 简单嵌入式WEB 服务器实验 20145208<信息安全系统设计基础>实验五 简单嵌入式WEB 服务器实验
- 【jQuery api】isFunction()
<!doctype html> <html lang="en"> <head> <meta charset="utf-8&quo ...
- 软件工程(FZU2015)赛季得分榜,第9回合
目录 第一回合 第二回合 第三回合 第四回合 第五回合 第6回合 第7回合 第8回合 第9回合 第10回合 第11回合 积分规则 积分制: 作业为10分制,练习为3分制:alpha30分: 团队项目分 ...
- 软件工程(FZU2015)赛季得分榜,第10回合(alpha冲刺)
目录 第一回合 第二回合 第三回合 第四回合 第五回合 第6回合 第7回合 第8回合 第9回合 第10回合 第11回合 积分规则 积分制: 作业为10分制,练习为3分制:alpha30分: 团队项目分 ...
- 在servlet中用spring @Autowire注入
今天在改版以前应用程序的时候,发现很多系统是直接用servlet做的.当初也用到了spring,所以自然想到也用spring的@autowire注入来引入service层.但发现如果直接用,有时候成功 ...
- linux-ntpdate同步更新时间
Linux服务器运行久时,系统时间就会存在一定的误差,一般情况下可以使用date命令进行时间设置,但在做数据库集群分片等操作时对多台机器的时间差是有要求的,此时就需要使用ntpdate进行时间同步 安 ...
- CM12.1/13.0编译教程
环境搭建 1.安装64位Ubuntu系统(实体安装.虚拟机安装均可) 注意:要求机器至少4G内存(虚拟机至少分配4G内存),硬盘至少100G空间(源码20G+,编译后整个目录约60~70G) 安装方法 ...