使用 EXISTS 和 NOT EXISTS 查找交集与差集
公司主营业务:成都网站制作、成都做网站、移动网站开发等业务。帮助企业客户真正实现互联网宣传,提高企业的竞争能力。创新互联建站是一支青春激扬、勤奋敬业、活力青春激扬、勤奋敬业、活力澎湃、和谐高效的团队。公司秉承以“开放、自由、严谨、自律”为核心的企业文化,感谢他们对我们的高要求,感谢他们从不同领域给我们带来的挑战,让我们激情的团队有机会用头脑与智慧不断的给客户带来惊喜。创新互联建站推出临泉免费做网站回馈大家。
使用 EXISTS 和 NOT EXISTS 引入的子查询可用于两种集合原理的操作:交集与差集。两个集合的交集包含同时属于两个原集合的所有元素。差集包含只属于两个集合中的第一个集合的元素。
city 列中 authors 和 publishers 的交集是作者和出版商共同居住的城市的集合。
USE pubs
SELECT DISTINCT city
FROM authors
WHERE EXISTS
(SELECT *
FROM publishers
WHERE authors.city = publishers.city)
下面是结果集:
city
--------
Berkeley
(1 row(s) affected)
当然,该查询可以写成一个简单的联接。
USE pubs
SELECT DISTINCT authors.city
FROM authors INNER JOIN publishers
ON authors.city = publishers.city
city 列中 authors 和 publishers 的差集是作者所居住的、但没有出版商居住的所有城市的集合,也就是除 Berkeley 以外的所有城市。
USE pubs
SELECT DISTINCT city
FROM authors
WHERE NOT EXISTS
(SELECT *
FROM publishers
WHERE authors.city = publishers.city)
该查询也可以写成:
USE pubs
SELECT DISTINCT city
FROM authors
WHERE city NOT IN
(SELECT city
FROM publishers)
--整个约束就可以了
--创建表时创建约束
create table t1(col1 int not null check(col1 =50 and col1 = 90
and col1 =201 and col1 = 299))
--为已知表添加约束
alter table t1
add constraint CK_cardID check (
col1 =50 and col1 = 90
and col1 =201 and col1 = 299
)
--不明白可以随时问我 希望采纳
只用数据某一字段进行子查询是行不通的,因为你有三个字段为联合主腱,如果acode=bcode并不能保证abbrq=bbbrq和ay=by.
正确的方法是左外连接,如果左表a有右表b所没有的任何记录,该记录右表b任何字段为空
select a.* from tableA a left join tableB b on a.acode=b.bcode and a.abbrq=b.bbbrq and a.ay=b.by where b.bcode is null