Sqlserver 中exists 和 in

如图,现在有两个数据集,左边表示#tempTable1,右边表示#tempTable2。现在有以下问题:
1.求两个集的交集?
2.求tempTable1中不属于集#tempTable2的集?
先创建两张临时表:
create table #tempTable1
(
argument1 nvarchar(50),
argument2 varchar(20),
argument3 datetime,
argument4 int
);
insert into #tempTable1(argument1,argument2,argument3,argument4)
values('preacher001','',GETDATE()-1,1);
insert into #tempTable1(argument1,argument2,argument3,argument4)
values('preacher002','',GETDATE()-2,2);
insert into #tempTable1(argument1,argument2,argument3,argument4)
values('preacher003','',GETDATE()-3,3);
insert into #tempTable1(argument1,argument2,argument3,argument4)
values('preacher004','',GETDATE()-4,4);
insert into #tempTable1(argument1,argument2,argument3,argument4)
values('preacher005','',GETDATE()-5,5);
insert into #tempTable1(argument1,argument2,argument3,argument4)
values('preacher006','',GETDATE()-6,6);
insert into #tempTable1(argument1,argument2,argument3,argument4)
values('preacher007','',GETDATE()-7,7);
insert into #tempTable1(argument1,argument2,argument3,argument4)
values('preacher008','',GETDATE()-8,8);
create table #tempTable2
(
argument1 nvarchar(50),
argument2 varchar(20),
argument3 datetime,
argument4 int
);
insert into #tempTable2(argument1,argument2,argument3,argument4)
values('preacher001','',GETDATE()-1,1);
insert into #tempTable2(argument1,argument2,argument3,argument4)
values('preacher0010','',GETDATE()-10,10);
insert into #tempTable2(argument1,argument2,argument3,argument4)
values('preacher003','',GETDATE()-3,3);
insert into #tempTable2(argument1,argument2,argument3,argument4)
values('preacher004','',GETDATE()-4,4);
insert into #tempTable2(argument1,argument2,argument3,argument4)
values('preacher009','',GETDATE()-9,9);
比如,我现在以#tempTable1和#tempTable2的argument1作为参照
1.求两集的交集:
1)in 方式
select * from #tempTable2 where argument1 in
(select argument1 from #tempTable1)
2)exists 方式
select * from #tempTable2 t2 where exists
(select * from #tempTable1 t1 where t1.argument1=t2.argument1)

2.求tempTable1中不属于集#tempTable2的集
1)in 方式
select * from #tempTable1 where argument1 not in
(select argument1 from #tempTable2)
2)exists 方式
select * from #tempTable1 t1 where not exists
(select * from #tempTable2 t2 where t1.argument1=t2.argument1)

3)exists对应数据的行索引
例如现在有两张表tbl_customer,tbl_phone,其中一个客户对应一个或多个电话信息,在维护电话号码时,往往会显示例如客户姓名、客户性别、修改人、修改时间等等点,查看选中的客户电话详细记录时可以查看该客户名义下的所有电话号码信息;因为是维护的客户电话号码,所以这里的修改人和修改时间应该针对的是当前客户对应的所有电话号码的最新修改时间,那么在提取这些数据时,可以使用 max() 和 exists获取这一个特别数据。
(
id number(12) not null,
customer_id number(12),
phonenumber varchar(20),
isdeleted char(1),
syscreatedatetime date,
syscreater number(12),
syslastmodifytime date,
syslastmodifier number(12)
)
(
id number(12) not null,
name varchar(50),
gender char(1),
isdeleted char(1),
syscreatedatetime date,
syscreater number(12),
syslastmodifytime date,
syslastmodifier number(12)
)
查询语句这样写:
select distinct c.name,
(select syslastmodifytime
from tbl_phone
where exists (select max(t.syslastmodifytime)
from tbl_vip_phone t
where t.customer_id = a.id)
and rownum = 1) as syslastmodifytime,
(select syslastmodifier
from tbl_phone
where exists (select max(t.syslastmodifytime)
from tbl_vip_phone t
where t.customer_id = a.id)
and rownum = 1) as syslastmodifier
from tbl_customer c
join tbl_phone p
on c.isdeleted = 0
and p.isdeleted = 0
and c.id = p.customer_id
Sqlserver 中exists 和 in的更多相关文章
- SQLServer中exists和except用法
一.exists 1.1 说明 EXISTS(包括 NOT EXISTS)子句的返回值是一个BOOL值.EXISTS内部有一个子查询语句(SELECT ... FROM...),我将其称为EXIST的 ...
- SqlServer中exists和in的区别
1.in 2.exists
- Sqlserver中一直在用又经常被忽略的知识点一
已经有快2个月没有更新博客了,实在是因为最近发生了太多的事情,辞了工作,在湘雅医院待了一个多月,然后又新换了工作...... 在平时的工作中,Sqlserver中许多知识点是经常用到的,但是有时候我们 ...
- (转)笔记320 SQLSERVER中的加密函数 2013-7-11
1 --SQLSERVER中的加密函数 2013-7-11 2 ENCRYPTBYASYMKEY() --非对称密钥 3 ENCRYPTBYCERT() --证书加密 4 ENCRYPTBYKEY() ...
- [转]在SqlServer 中解析JSON数据
在Sqlserver中可以直接处理Xml格式的数据,但因为项目需要所以要保存JSON格式的数据到Sqlserver中在博客:Consuming JSON Strings in SQL Server ...
- SQLSERVER中按年月分组
SQLSERVER中按年月分组 一个表有三个字段id,dt,d 分别存放id,时间,数值 id dt d 1 2004-08-11 12:12:00.000 9 2 2005-09- ...
- Sqlserver中的触发器
一 什么是触发器 1.1 触发器的概念 触发器(trigger)是SQL server来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行是由事件来触发,当对一个表进行操作( ...
- 【SqlServer】解析SqlServer中的事务
目录结构: contents structure [+] 事务是什么 控制事务 数据并发访问产生的影响 事务的隔离级别 锁 NOLOCK.HOLDLOCK.UPDLOCK 死锁分析 在这篇Blog中, ...
- 关于T-SQL中exists或者not exists子查询的“伪优化”的做法
问题起源 在使用t-sql中的exists(或者not exists)子查询的时候,不知道什么时候开始,发现一小部分人存在一种“伪优化”的一些做法,并且向不明真相的群众传递这一种写法“优越性”,实在看 ...
随机推荐
- Oracle 11g 修改字符集 为 ZHS16GBK
方法一:sqlplus “用户/密码 as sysdba” sqlplus “sys/sys as sysdba” 方法二:sqlplus/nolog SQL> conn /as sysdba ...
- golang坑1
:=比较方便,不过今天掉进了一个小坑 var ( foo *XXX ) func bar() { fmt.Println(foo.abc) } func main() { foo, err := XX ...
- oracle根据视图删除表
delete from t_fwaqjcjl where zcbm in (select zcbm from view_fwaqjcjl where 1=1 )
- 决策树 -- C4.5算法
C4.5是另一个分类决策树算法,是基于ID3算法的改进,改进点如下: 1.分离信息 解释:数据集通过条件属性A的分离信息,其实和ID3中的熵: 2.信息增益率 解释:Gain(A)为获的A ...
- faceBook Pop动画库手动添加版本
本人将pop的框架直接拖进工程里面然后按照教程导入头文件#import "POP.h"发现报找不到文件的错误,于是我手动将pop库里面所有类似于#import <POP/XX ...
- 【OC简介-类和对象】
OC与C语言相比,体现的是一种面向对象的思想.OC完全兼容C语言 OC中大多数类前面都有前缀NS,来源于乔布斯NextStep团队,被苹果收购后保留了所有基本语法,合并到Foundation中 OC语 ...
- Eclipse下Tomcat设置
1,Eclipse建立Tomcat服务 1.1 新建Server 首先这里是指,jee版的Eclipse.Eclipse是没有像MyEclipse那样集成Tomcat的,需要我们自己设置. New - ...
- 如何让MVC6在IIS上面跑
asp.net5的MVC6发布出来的结果和MVC5之前版本的相差太远了,直接在本地的IIS服务器上面是不可能运行的. 看了汤姆大叔的MVC6项目发布与部署,讲了很多丰富的知识点.但是对于立即要解决问题 ...
- 黑马程序员+ADO.Net基础(下)
---------------<a href="http://edu.csdn.net"target="blank">ASP.Net+Android ...
- mongoDB研究笔记:分片集群的工作机制
上面的(http://www.cnblogs.com/guoyuanwei/p/3565088.html)介绍了部署了一个默认的分片集群,对mongoDB的分片集群有了大概的认识,到目前为止我们还没有 ...