sql中with as的用法练习

在工作中经常看到有人使用with as,查询很顺畅,也很快,很好奇,在网上也有不少资料,看了大神的文章,也练习一下。

首先给出两位位大神文章的链接,介绍十分详细:http://www.cnblogs.com/fygh/archive/2011/08/31/2160266.html

另一位大神的文章:http://www.cnblogs.com/CareySon/archive/2011/12/12/2284740.html

为了自己更好地理解,还是老实练习一下(概念方面的请参考上面的链接):

sql脚本,方便以后随时练习:

 1 create table #Dept
 2  (
 3    ID INT,
 4    Name nvarchar(30)
 5  )
 6  insert #Dept
 7  select 1,‘上海一区‘
 8  union all
 9  select 2,‘苏州一区‘
10  union all
11  select 3,‘南京一区‘
12  union all
13  select 4,‘上海二区‘
14  union all
15  select 5,‘苏州二区‘
16  union all
17  select 6,‘南京二区‘
18
19
20
21 create table #Proj
22 (
23   ID INT,
24   DeptID INT,
25   Name nvarchar(30)
26 )
27
28
29 insert #Proj
30 select 1,1,‘九寨沟旅游‘
31 union all
32 select 2,2,‘黄山探险‘
33 union all
34 select 3,5,‘月光码头自助‘
35 union all
36 select 4,5,‘海底捞火锅‘
37 union all
38 select 5,6,‘睡大觉‘
39 union all
40 select 6,3,‘看电影‘
41 union all
42 select 7,2,‘长白山旅游‘
43 union all
44 select 8,5,‘香港维多利亚坐船‘
45 union all
46 select 9,2,‘发奖金啦‘

现在的需求是:找出要求部门包含“苏州”的项目表中的数据,一般来说,这样的需求一个简单的子查询就可以了,如下:

这只是嵌套了一层子查询,不太复杂,如果多层,可读性就很差,大神使用了这样一种方式:

这种方式虽然容易维护,但会带来性能上的损失,毕竟为了一个查询建了一张表嘛。

下面隆重祭出CTE:公用表表达式。

时间: 2024-11-05 12:18:01

sql中with as的用法练习的相关文章

SQL中SUBSTRING函数的用法

功能:返回字符.二进制.文本或图像表达式的一部分 语法:SUBSTRING ( expression, start, length ) SQL 中的 substring 函数是用来抓出一个栏位资料中的其中一部分.这个函数的名称在不同的资料库中不完全一样: MySQL: SUBSTR(), SUBSTRING() Oracle: SUBSTR() SQL Server: SUBSTRING() 参数: expression 字符串.二进制字符串.文本.图像.列或包含列的表达式.请勿使用包含聚合函数

SQL中IN和EXISTS用法的区别

NOT IN SELECT DISTINCT MD001 FROM BOMMD WHERE MD001 NOT IN (SELECT MC001 FROM BOMMC) NOT EXISTS,exists的用法跟in不一样,一般都需要和子表进行关联,而且关联时,需要用索引,这样就可以加快速度 select DISTINCT MD001 from BOMMD WHERE NOT EXISTS (SELECT MC001 FROM BOMMC where BOMMC.MC001 = BOMMD.MD

Sql Server REPLACE函数的使用;SQL中 patindex函数的用法

Sql Server REPLACE函数的使用 REPLACE用第三个表达式替换第一个字符串表达式中出现的所有第二个给定字符串表达式. 语法REPLACE ( ''string_replace1'' , ''string_replace2'' , ''string_replace3'' ) 参数''string_replace1'' 待搜索的字符串表达式.string_replace1 可以是字符数据或二进制数据. ''string_replace2'' 待查找的字符串表达式.string_re

PL/SQL 中Returning Into的用法

ORACLE的DML语句中可以指定RETURNING INTO语句.RETURNING INTO语句的使用在很多情况下可以简化PL/SQL编程,少一次select into语句. DELETE操作:RETURNING返回的是DELETE之前的结果: INSERT操作:RETURNING返回的是INSERT之后的结果: UPDATE操作:的RETURNING语句是返回UPDATE操作之后的结果. -- Created on 2015/11/5 星期四 by YANCONG-ZHANG -- Ret

SQL中的CASE的用法

CASE在SQL语句中,很有点类似java等高级编程语言中的switch这样子的多分枝语句,但是有点不同的是,case后面接的是when,另外,when的后续分枝有点类似if后面接else.这个是我的个人认识,case ..when..then..[else].. 下面,看看MySQL的帮助信息,可以看到case的基本语法结构: 1 topics: #CASE的两种基本用法 2 CASE OPERATOR 3 CASE STATEMENT 4 5 MariaDB [mysql]> help ca

SQL中的一些关键字用法

1.where 条件筛选结果 select * from `表名` where `列名`='value' 上诉语句的意思是在某表中查询某列名等于某特定值得所有列 2.Like 模糊查询 select *from `表名` where `列名`like `高%`; 上诉语句意思是在某表中查询某列名以高开头的所有列 注:%在后 以....开头 %在前 以...结尾 %...% 包含.... 当然模糊查询中还有下划线,一个下划线代表一个字符 3.group by 分组查询 分组家你具有将具有相同特征的

sql中exists和notexists用法总结(并和in的比较)

首先头脑中有三点概念: 1.EXISTS子查询找到的提交 NOT EXISTS 子查询中 找不到的提交 说明:不要去翻译为存在和不存在,把脑袋搞晕. 2.建立程序循环的概念,这是一个动态的查询过程.如 FOR循环 . 3.Exists执行的流程Exists首先执行外层查询,再执行内存查询,与IN相反. 流程为首先取出外 层中的第 一 元组, 再执行内层查询,将外层表的第一元组代入,若内层查询为真,即有结果 时.返回外层表中的第一元组,接着取出第二元组,执行相同的算法.一直到扫描完外层整表 . ?

SQL中 patindex函数的用法

返回pattern字符串在表达式expression里第一次出现的位置,起始值从1开始算. pattern字符串在expression表达式里没找就返回0,对所有有效的文本和字符串就是有效的数据类型. 描述一下此函数的具体用法: 1. PATINDEX ( '%pattern%' , expression ) '%pattern%'的用法类似于 like '%pattern%'的用法,也就是模糊查找其pattern字符串是否是expression找到,找到并返回其第一次出现的位置. 如: sel

SQL中group by的用法

group by即按照给定字段对结果集进行分组,从字面意义上理解就是根据"by"指定的规则对数据进行分组,所谓的分组就是将一个"数据集"划分成若干个"小区域",然后针对若干个"小区域"进行数据处理. group by的写法: 1.select 字段列表/* from 表名 group by 字段列表 2.select 字段列表/* from 表名 group by 字段列表 having 过滤条件 group by的特点: 常