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)子查询的时候,不知道什么时候开始,发现一小部分人存在一种“伪优化”的一些做法,并且向不明真相的群众传递这一种写法“优越性”,实在看 ...
随机推荐
- Java猜拳小游戏(剪刀、石头、布)
1.第一种实现方法,调用Random数据包,直接根据“1.2.3”输出“剪刀.石头.布”.主要用了9条输出判断语句. import java.util.Random; import java.util ...
- 一个简单的Windows下的socket程序
服务器端代码server.cpp: #include <stdio.h> #include <WinSock2.h> #pragma comment(lib,"ws2 ...
- 21)pom 中的缺省值(default properties)
1 引言 项目中build 时用到了maven-jar-plugin ,其中有一个 ${project.build.directory} <plugin> <artifactId&g ...
- React的Diff算法
使用React或者RN开发APP如果不知道Diff算法的话简直是说不过去啊.毕竟"知其然,知其所以然"这句老话从远古喊到现代了. 以下内容基本是官网文章的一个总结.压缩.这次要谦虚 ...
- MVVM 在使用 ItemsSource 之前,项集合必须为空
今天在做ListBox和Combobox绑定的时候,都出现过“在使用 ItemsSource 之前,项集合必须为空”的错误. Combobox比较简单,代码如下: <ComboBox x:Nam ...
- PADSPCB权威指南-第三章 预处理(部分)(原创)
PADSPCB权威指南-第三章(部分)豆丁地址:http://www.docin.com/p-707132066.html
- 使用ajax预加载图片
使用Ajax 上面所给出的方法似乎不够酷,那现在来看一个使用Ajax实现图片预加载的方法.该方法利用DOM,不仅仅预加载图片,还会预加载CSS.JavaScript等相关的东西.使用Ajax,比直接使 ...
- Webdriver实现原理
通过研究selenium-webdriver的源码,笔者发现其实webdriver的实现原理并不高深莫测无法揣度.在这里以webdriver ruby binding的firefox-webdrive ...
- JS设计模式初探
目的:设计模式众多,尝试用博客记录下学到的不同设计模式的优劣,方便以后查阅. 前言:半年前看高程的时候看到设计模式这章,云里雾里,不是看不明白,而是不明白为啥要如此麻烦只为创建一个对象.直到最近完成了 ...
- Django的virtualenv环境搭建
安装virtualenv好处多多,可以让当前的项目使用单独的类库,实现系统类库的隔离,所以能够自由地控制当前项目类库的版本,不受系统类库的影响:还有其他N多好处. 下面是安装说明和使用示例: 首先安装 ...