SQL server高级语法
1. 公共表达式CTE
公用表表达式 (CTE) 具有一个重要的优点,那就是能够引用其自身,从而创建递归 CTE。递归 CTE 是一个重复执行初始 CTE 以返回数据子集直到获取完整结果集的公用表表达式。
如下面的例子,可以递归把组织名放到一起。
其实CTE的作用就相当于子查询

2.窗口函数、分区函数
窗口函数和聚集函数一样都是对定义的行集(组)进行聚集,但是不像聚集一样只返回一个值,窗口函数可以为每个组返回多个值,执行聚集的行组是窗口(因此称为‘窗口函数’)。窗口函数是在聚集函数的基础上加了一个 over(),所有的聚集函数都可以利用这种方式转换成窗口函数。窗口函数是最后才执行的,在order by 之前,where和group
by之后
Partition By分区子句:可以根据partition by子句定义行的分区或组,以完成聚集,如果使用空括号,那么整个结果集就是分区,窗口函数将对它进行聚集计算,可以把Partition By看成是移动的Group By,可以用Partition By对定义的行组计算聚集(当遇到新的组时复位),并返回每个值(每个组中的成员),而不是用一个组表示表中这个值的所有实例。

窗口函数除了用于聚集函数sum,count,avg等之外,还有row_number(计算行数),rank(排名),lead()
,lag()前移后移 在日常工作中使用也很大;
3.FOR XML Path
这个在sql server中的作用主要是把行数据转列。在mysql中有group_concat,DB2中有listagg,而sql server中没有,所以用for xml path
如下,我要取得年月,直接查询是这样的

当我在后面加上了for xml path 后就得到了一行的结果:

用字符串处理函数去掉前面的第一个逗号,就可以得到一个可用的字符串,用于存储过程之类的;
4.PIVOT 和UNPIVOT 行列转换函数
PIVOT:行转列,下面的代码实现的是,选择orderid为71774和71780的两个产品作为列名,以productID作为行,得到汇总数据

UNPIVOT 列转行
贴一个官方教程的例子:
运行结果:

5.Merge 的应用 主要用于更新数据,贴一个我写的存储
6.动态sql
文本拼接语句 缺点:1.容易被注入,被黑 最好不用
2.容易报错,如西安的拼音 xi'an
7.ON条件 在使用left jion时,on和where条件的区别如下:
on条件是在生成临时表时使用的条件,它不管on中的条件是否为真,都会返回左边表中的记录。
where条件是在临时表生成好后,再对临时表进行过滤的条件。这时已经没有left join的含义(必须返回左边表的记录)了,条件不为真的就全部过滤掉
举个例子:
先创建t1,t2两个表
以下是限制left join 左边的表的结果,可以看到上面的才是我们想要的结果

以下是限制t2的结果,可以发现把条件放在on后面才是我们想要的结果

8.Except 和Intersect
比较两个查询的结果,返回非重复值。
EXCEPT 从左查询中返回右查询没有找到的所有非重复值。
INTERSECT 返回 INTERSECT 操作数左右两边的两个查询都返回的所有非重复值,即二者交集。
还是用刚刚的表,t1中是ABC,t2中是BCD
那么EXCEPT返回的是A
INTERSECT返回的是BC


SQL server高级语法的更多相关文章
- 15 个经常使用的 SQL Server 高级语法
1.case-end (详细的值) case后面有值,相当于c#中的switch case 注意:case后必须有条件,而且when后面必须是值不能为条件. -----------------case ...
- SQL server存储过程语法及实例(转)
存储过程如同一门程序设计语言,同样包含了数据类型.流程控制.输入和输出和它自己的函数库. --------------------基本语法-------------------- 一.创建存储过程cr ...
- Sql Server 基础语法
来自:http://www.cnblogs.com/AaronYang/archive/2012/04/24/2468093.html Sql Server 基础语法 -- 查看数据表 select ...
- SQL SERVER常用语法记录
用于记录SQL SERVER常用语法,以及内置函数. 以下语句包含: WITH 临时表语法 ROW_NUMBER()内置函数,我一般主要是用来分页.针对于查出来的所有数据做一个数字排序 分页的BETW ...
- SQL Server高级内容之case语法函数
1.Case函数的用法 (1)使用类似:switch-case与if-else if. (2)语法: case [字段] when 表达式 then 显示数据 when 表达式 then 显示数据 ...
- SQL SERVER常用语法汇总
阅读目录 一.SQL分类 二.基础语句 三.sql技巧 四.(MS SQL Server)SQL语句导入导出大全 回到目录 一.SQL分类 DDL—数据定义语言(CREATE,ALTER,DROP,D ...
- SQL SERVER With语法[转]
今天在论坛上看到一个举例,关于sql server 的示例.1/25/50/100美分,多少种可能拼凑成2美元. 看了其中第一条语法,放在SQL SERVER中测试,发现真的列举出所有组合成2美元的方 ...
- SQL Server 事务语法
事务全部是关于原子性的.原子性的概念是指可以把一些事情当做一个单元来看待.从数据库的角度看,它是指应全部执行或全部都不执行的一条或多条语句的最小组合. 为了理解事务的概念,需要能够定义非常明确的边界. ...
- 数往知来 SQL SERVER 基本语法<七>
sqlserver学习_01 启动数据库 开始->cmd->进入控制台 sqlcmd->-S .\sqlexpress 1> 如果出现表示数据库"sqle ...
随机推荐
- git 的简单使用(2)
一般情况下,你通常直接在文件管理器中把没用的文件删了,或者用rm命令删了: $ rm test.txt 你可以使用 git rm test.txt来删除 然后用git commit -m " ...
- ubuntu_linux /boot/grub/grub.conf
==========================================UBUNTU /boot/grub/grub.conf文件============================ ...
- C#关键字详解第四节
位 Unicode 字符 char在C#中与C语言不同,他表示的是16位无符号进制的数,在计算机中他是被用来存储字符但是他只能用来存 储一个文字,与string不同string可以存储多个文字或字符, ...
- ZooKeeper的下载方法
1.进入官网: https://zookeeper.apache.org/releases.html 2.进入服务器列表: http://www.apache.org/dyn/closer.cgi/z ...
- A java code
With the help of LiJun I got a piece of JAVA code. With this code, I can do below things like connec ...
- 让devstack中的vm訪问外网
devstack默认会建立一个Public网络,地址为172.24.4.0/24,可是这个网络并非运营商分配给我们的网络.所以仅仅能通过nat的方式让devstack建立的虚拟机訪问外网. br-ex ...
- Oracle EBS 从Web界面进入责任时,提示不存在可用的有效责任
Oracle EBS 从Web界面进入责任时,提示不存在可用的有效责任 每次在Web界面,点击某一责任的功能时,弹出Form.会提示错误:对不起,不存在可用的有效责任. ...
- 【JavaScript】正則表達式
正則表達式,也不是第一次与它见面了.在我们学习ASP.NET视频的时候,验证控件的那个实例中.就有提到过它. 那个时候.都是在控件的属性中自己设置的,用的原理就是正則表達式,当时得感觉就是方便,强大, ...
- uiautomator +python 安卓UI自动化尝试
使用方法基本说明:https://www.cnblogs.com/mliangchen/p/5114149.html,https://blog.csdn.net/Eugene_3972/article ...
- wordpress相关
事故:wordpress不论什么页面所有是404 not found,找不到不论什么页面. 解决:在nginx.conf中80port以下的凝视消除掉. location ~ \.php$ { ...