IF OBJECT_ID('tempdb..#Purchase', 'U') IS NOT NULL
DROP TABLE #Purchase;

CREATE TABLE #Purchase
(
PurchaseID INT IDENTITY(1, 1) ,
CustomerID INT ,
ProductCode CHAR(1) PRIMARY KEY CLUSTERED ( PurchaseID )
);
INSERT INTO #Purchase
( CustomerID ,
ProductCode
)
SELECT 1 ,
'A'
UNION ALL
SELECT 1 ,
'B'
UNION ALL
SELECT 2 ,
'A'
UNION ALL
SELECT 2 ,
'B'
UNION ALL
SELECT 2 ,
'D'
UNION ALL
SELECT 3 ,
'A'
UNION ALL
SELECT 3 ,
'B'
UNION ALL
SELECT 3 ,
'D'
UNION ALL
SELECT 3 ,
'A'
UNION ALL
SELECT 3 ,
'D'
UNION ALL
SELECT 4 ,
'A'
UNION ALL
SELECT 4 ,
'B'
UNION ALL
SELECT 4 ,
'C'
UNION ALL
SELECT 5 ,
'A'
UNION ALL
SELECT 5 ,
'B'
UNION ALL
SELECT 5 ,
'A'
UNION ALL
SELECT 5 ,
'B'
UNION ALL
SELECT 5 ,
'C'
UNION ALL
SELECT 5 ,
'D'
UNION ALL
SELECT 6 ,
'A'
UNION ALL
SELECT 6 ,
'A'
UNION ALL
SELECT 6 ,
'D'
UNION ALL
SELECT 6 ,
'E'
UNION ALL
SELECT 7 ,
'B'
UNION ALL
SELECT 7 ,
'B'
UNION ALL
SELECT 7 ,
'D'
UNION ALL
SELECT 7 ,
'E'
UNION ALL
SELECT 8 ,
'A'
UNION ALL
SELECT 9 ,
'B';

SELECT a.CustomerID ,
a.PurchaseID ,
a.ProductCode
FROM #Purchase a
WHERE ProductCode IN ( 'a', 'b' )
AND NOT EXISTS ( SELECT *
FROM #Purchase b
WHERE a.CustomerID = b.CustomerID
AND ProductCode NOT IN ( 'a', 'b' ) );

SELECT a.CustomerID ,
a.PurchaseID ,
a.ProductCode
FROM #Purchase a
WHERE CustomerID IN (
SELECT CustomerID
FROM #Purchase b
WHERE ProductCode IN ( 'a', 'b' )
GROUP BY CustomerID
HAVING COUNT(DISTINCT ProductCode) = ( SELECT COUNT(DISTINCT ProductCode)
FROM #Purchase c
WHERE c.CustomerID = b.CustomerID
) );

SELECT CustomerID
FROM #Purchase
WHERE ProductCode IN ( 'A', 'B' )
GROUP BY CustomerID
HAVING COUNT(DISTINCT ProductCode) = 2
EXCEPT
--===== Find Customers that bought "C".
SELECT CustomerID
FROM #Purchase
WHERE ProductCode IN ( 'C' );

SELECT *
FROM #Purchase;

SQL 集合例子的更多相关文章

  1. sql 游标例子 根据一表的数据去筛选另一表的数据

    sql 游标例子 根据一表的数据去筛选另一表的数据 DECLARE @MID nvarchar(20)DECLARE @UTime datetime DECLARE @TBL_Temp table( ...

  2. SQL存储过程例子

    存储过程呢,学校里学习的都是简单的.这里是我在工作的时候写的存储过程,贴出来,其中公司相关我都XXX代替了 (注:这个例子可以算是动态SQL的例子了,写死的是静态SQL,这个很灵活的传入参数的是动态S ...

  3. 转 SQL集合函数中利用case when then 技巧

    SQL集合函数中利用case when then 技巧 我们都知道SQL中适用case when then来转化数据库中的信息 比如  select (case sex when 0 then '男' ...

  4. 详解SQL集合运算

    以前总是追求新东西,发现基础才是最重要的,今年主要的目标是精通SQL查询和SQL性能优化. 本系列[T-SQL基础]主要是针对T-SQL基础的总结. [T-SQL基础]01.单表查询-几道sql查询题 ...

  5. SQL集合运算 差集 并集 交

    SQL-3标准中提供了三种对检索结果进行集合运算的命令:并集UNION:交集INTERSECT:差集EXCEPT(在Oracle中叫做 MINUS).在有些数据库中对此的支持不够充分,如MySql中只 ...

  6. 通过反射生成SQL的例子

    全文摘自http://www.cnblogs.com/g1mist/p/3227290.html,很好的一个实例. 反射提供了封装程序集.模块和类型的对象.您可以使用反射动态地创建类型的实例,将类型绑 ...

  7. 7 SQL 集合运算

    7 集合运算 7-1 表的加减法 本章将会和大家一起学习“集合运算”操作.在数学领域,“集合”表示“(各种各样的)事物的总和”:在数据库领域,表示“记录的集合”.具体来说,表.视图和查询的执行结果都是 ...

  8. SQL集合函数中利用case when then 技巧

    我们都知道SQL中适用case when then来转化数据库中的信息 比如  select (case sex when 0 then '男' else '女' end) AS sex  from ...

  9. SQL集合运算参考及案例(一):列值分组累计求和

    概述 目前企业应用系统使用的大多数据库都是关系型数据库,关系数据库依赖的理论就是针对集合运算的关系代数.关系代数是一种抽象的查询语言,是关系数据操纵语言的一种传统表达方式.不过我们在工作中发现,很多人 ...

随机推荐

  1. redis 任务队列

    使用Redis实现任务队列 说到队列很自然就能想到Redis的列表类型,3.4.2节介绍了使用LPUSH和RPOP命令实现队列的概念.如果要实现任务队列,只需要让生产者将任务使用LPUSH命令加入到某 ...

  2. openfire消息发送

    找了一些demo,做了一些示例,演示了基于xmpp协议的openfire的客户端之间消息的发送. 代码需要两个包,smack.jar ,smackx.jar. 第一个代码,只是点对点发送消息的,不涉及 ...

  3. 自己从0开始学习Unity的笔记 I (C#字符串转换为数字)

    我基本上从0开始学习编程,运算符基本上跳过,因为知道了 “=”这个符号相当于赋值,然后“==”才是等于,其他和普通运算符号差不都,也就跳过了. 最基础的赋值那种,我看了下代码,似乎没什么难度,估计新手 ...

  4. .Net Core + DDD基础分层 + 项目基本框架 + 个人总结

    为什么要写这篇文章 1,在大半年前,公司开发任务比较轻松,自己不知道干什么,但是又想要学习技术,比较迷茫,后面我接触到了博客园,看了一个帖子,深有感触,我当时不知道学习什么,于是我信息给他,他居然回复 ...

  5. Day 9 函数的初识1

    def my_len(): l1 = [1,2,3,5,6] print(111) print(222) return print(333)print(my_len()) 一.函数的定义1.遇到ret ...

  6. 使用hex编码绕过主机卫士IIS版本继续注入

    本文作者:非主流 测试文件的源码如下: 我们先直接加上单引号试试: http://192.168.0.20/conn.asp?id=1%27 很好,没有报错.那我们继续,and 1=1 和and 1= ...

  7. 记自己的第一个完整的java web项目

    我是从asp.net平台转到java平台的.基于asp.net平台开发网站的快速便捷性,工作几年来大小网站多少也写了6.7个.但是转到java后,因为是在一家大公司,而且做的功能也比较单一,局限于此, ...

  8. Nginx+Tomcat搭建负载均衡

    一.       工具 nginx-1.8.0 apache-tomcat-6.0.33 二.    目标 实现高性能负载均衡的Tomcat集群: 三.    步骤 1.首先下载Nginx,要下载稳定 ...

  9. Swift 里集合类型协议的关系

      Sequence A type that provides sequential, iterated access to its elements. 是最基础的协议,可以通过迭代来获取它的元素 ...

  10. 多线程:多读少写锁(Readers–writer lock)

    先来几个同义词 readers–writer (RW) lock shared - exclusive lock multiple readers/single-writer lock multi-r ...