使用 EXISTS 的子查询
使用 EXISTS 关键字引入一个子查询时,就相当于进行一次存在测试。外部查询的 WHERE 子句测试子查询返回的行是否存在。子查询实际上不产生任何数据;它只返回 TRUE 或 FALSE 值。
使用 EXISTS 引入的子查询语法如下:
WHERE[NOT]EXISTS(subquery)
下面的查询查找所有出版商业书籍的出版商的名称:
USE pubs
SELECT pub_name
FROM publishers
WHERE EXISTS
(SELECT *
FROM titles
WHERE pub_id = publishers.pub_id
AND type = 'business')
下面是结果集:
pub_name
--------------------
New Moon Books
Algodata Infosystems
(2 row(s) affected)
若要确定该查询的结果,请按照顺序考虑每个出版商的名称。该值是否会使子查询至少返回一行?换句话说,该值是否会使存在测试的计算值为 TRUE?
在此例中,第一个出版商的名称为 Algodata Infosystems,标识号为 1389。titles 表中是否有 pub_id 为 1389 并且 type 为 business 的行?如果有,那么 Algodata Infosystems 应为所选值之一。对其它每个出版商名称重复相同的过程。
注意,使用 EXISTS 引入的子查询在以下几方面与其它子查询略有不同:
- EXISTS 关键字前面没有列名、常量或其它表达式。
- 由 EXISTS 引入的子查询的选择列表通常几乎都是由星号 (*) 组成。由于只是测试是否存在符合子查询中指定条件的行,所以不必列出列名。
由于通常没有备选的、非子查询的表示法,所以 EXISTS 关键字很重要。尽管一些使用 EXISTS 表示的查询不能以任何其它方法表示,但所有使用 IN 或由 ANY 或 ALL 修改的比较运算符的查询都可以通过 EXISTS 表示。
以下是使用 EXISTS 和等效的备选方法的查询示例。
有两种方法可以找到与出版商住在同一城市中的作者:
USE pubs
SELECT au_lname, au_fname
FROM authors
WHERE city =ANY
(SELECT city
FROM publishers)
-- Or
USE pubs
SELECT au_lname, au_fname
FROM authors
WHERE exists
(SELECT *
FROM publishers
WHERE authors.city = publishers.city)
下面是任一查询的结果集:
au_lname au_fname
-------- --------
Carson Cheryl
Bennet Abraham
(2 row(s) affected)
以下两个查询查找由位于以字母 B 开头的城市中的任一出版商出版的书名:
USE pubs
SELECT title
FROM titles
WHERE pub_id IN
(SELECT pub_id
FROM publishers
WHERE city LIKE 'B%')
— 或
USE pubs
SELECT title
FROM titles
WHERE EXISTS
(SELECT *
FROM publishers
WHERE pub_id = titles.pub_id
AND city LIKE 'B%')
下面是任一查询的结果集:
title
----------------------------------------------------
The Busy Executive's Database Guide
Cooking with Computers: Surreptitious Balance Sheets
You Can Combat Computer Stress!
Straight Talk About Computers
But Is It User Friendly?
Secrets of Silicon Valley
Net Etiquette
Is Anger the Enemy?
Life Without Fear
Prolonged Data Deprivation: Four Case Studies
Emotional Security: A New Algorithm
(11 row(s) affected)
分享到:
相关推荐
浅析SQL中WHERE EXISTS子查询 SQL(Structured Query Language)是一种功能强大、通用的关系数据库语言,而SQL语言的核心是SELECT语句,其中WHERE子句的条件表达式表现得灵活而复杂,和谓词DISJunctive所形成的嵌套...
这篇文档探讨了如何通过对比教学法,将关系代数中的除法运算与SQL中的exists子查询相结合,帮助学生更深入地理解这两种概念。 关系代数中的除法运算,首先需要理解的是关系代数的基本概念。关系代数是一种抽象的...
SQL 子查询总结 SQL 子查询是一种在 SQL 语言中嵌套在另...子查询是 SQL 语言中的一种强有力的工具,可以帮助开发者实现复杂的查询操作。但是,在使用子查询时需要注意其限制和注意事项,以确保查询的性能和正确性。
- **子查询**:在主查询内部嵌套另一个查询,例如,使用IN、比较符(如>、<)和EXISTS操作符进行条件筛选。 - **组合查询**:通过UNION或UNION ALL组合多个查询的结果集,或者使用子查询进行更复杂的查询操作。 -...
在 SQL Server 2005 中,`EXISTS` 是一个非常实用的子句,用于检查子查询是否返回至少一行数据。如果子查询返回至少一行数据,则 `EXISTS` 返回 TRUE;反之则返回 FALSE。`EXISTS` 子句通常用于提高查询性能,特别是...
exists 是 SQL 中最常用的子查询操作符之一,用于检测子查询是否返回至少一个记录。exists 的使用场景非常广泛,包括对多表之间的关系进行查询、检测记录的存在性等。 在 SQL 中,exists 的基本语法为: ```sql ...
4. **使用EXISTS或NOT EXISTS**:EXISTS测试子查询是否返回任何行,而不关心实际返回的值。这在判断某些条件是否满足时非常有用,而不需要实际获取数据。 5. **在UPDATE、DELETE和INSERT语句中使用**:子查询也可以...
在SQL查询中,`EXISTS`和`NOT EXISTS`是两个非常重要的子查询操作符,它们主要用于判断子查询是否返回结果。本篇文章将详细介绍这两个关键字的用法,并通过实例进行解析。 首先,`EXISTS`的语法是:主查询中的条件...
### 在ADO(SQL)中使用SELECT的语法之六——子查询的使用方法 #### 一、子查询概述 在SQL查询语言中,子查询是一个非常重要的概念。子查询是指在一个SQL命令内部嵌套另一个完整的SQL查询命令。通过使用子查询,我们...
### MS_SQL Server 多表查询与子查询详解 #### 一、子查询概述 在 SQL 语言中,当一个查询语句被嵌套在另一个查询的查询条件之中时,我们称之为**子查询**(Subquery)。子查询总是被写在圆括号中,并且可以被用在...
2. **子查询优化**:尽可能使用`EXISTS`代替`IN`,特别是在子查询结果较大时。 3. **分页优化**:在进行分页查询时,考虑使用`LIMIT`和`OFFSET`来减少不必要的数据检索。 ### 结论 通过对`IN`与`EXISTS`的对比分析...
在SQL查询中,`EXISTS`与`NOT EXISTS`是非常实用的子查询操作符,它们主要用于检测是否存在满足一定条件的数据行。相较于`IN`、`NOT IN`等操作,`EXISTS`与`NOT EXISTS`具有更高的效率,尤其是在处理大型数据集时。 ...
掌握子查询、内连接和外连接的使用,能够帮助我们更高效地从数据库中提取所需信息。子查询可以在主查询中嵌套,用于筛选或提供条件;内连接用于获取两个表的匹配行;而外连接则保留了所有单边数据,无论是否有匹配。...
它所在的查询属于相关子查询,即子查询的查询条件依赖于外层父查询的某个属性值,处理过程一般为: 取外层查询的第一个元组,根据它与内层查询相关的属性值处理内层查询,若where子句返回true,则将此元组放入结果表...
EXISTS 是一种条件判断运算符,用于判断子查询是否返回结果集。如果子查询返回结果集,则条件成立,否则不成立。其基本语法为: `EXISTS ()` 其中,`<query>` 是子查询语句。如果子查询返回结果集,则条件成立,...
**Exists** 和 **Not Exists** 子句通常用于检查子查询是否返回任何行,它们不会返回实际的数据,仅返回一个布尔值。 1. **Exists** - **语法结构**: ```sql SELECT * FROM t1 WHERE EXISTS (SELECT 1 FROM t2...
本教程将深入探讨子查询的使用及其在SQL Server中的应用。 首先,使用子查询的主要原因是将复杂的查询逻辑分步处理,使SQL语句更易于理解和维护。子查询可以作为WHERE子句中的条件组成部分,帮助我们筛选满足特定...
例如,EXISTS子查询用于检查子查询是否返回至少一行数据,而ANY和ALL则分别用于比较子查询的结果与外部查询中的值。 子查询在实际应用中非常广泛,可以用于聚合函数(如MAX、MIN、AVG等)、联接操作、多表查询等...