`

SQL基础总结(七):子查询

 
阅读更多

本系列blog源自前年写的SQL学习笔记,汇总一下发上来。(1月份发了前三篇笔记,原以为后面的笔记误操作删了,今天在硬盘里又找到了,一起发上来)

--------------------------------

不要在子查询中使用ORDER BY子句,子查询返回的中间结果是看不到的,对子查询排序没有意义。

子查询是单个SELECT 语句,不能使用UNION连接多个SELECT语句作为子查询。

子查询可以使用它自身的FROM子句或外部查询的FROM子句中表的列。

 

子查询是不使用联结将一个表与另一个表建立关联的方法。

 

在既可以使用子查询,又可以使用联结的情况下,在查询通常比联结查询要快。

 

内外连接都可以写作子查询。

在外部查询子句中包含仅出现在内部查询表的列是非法的。

 

简单子查询和相关子查询

简单子查询是指能够独立于外部查询的子查询,它在整个语句中只运行一次。

相关子查询无法独立于外部查询,它是依赖于外部查询结果的内部查询,如果语句需要针对外部查询的每一行在内部查询中处理一个表,就需要用到相关子查询。

 

简单子查询

DBMS通过执行一次内部查询来得出结果,并将结果提交到外部查询。

简单子查询先于并独立于它的外部查询执行。

 

相关子查询的特点如下:

1.与简单子查询的执行顺序和执行次数不同。

2.因为它依赖于外部查询得到的值,所以无法独立于外部查询执行。

3.它重复执行——为外部查询选择的每一候选行执行一次。

4.它总是引用外部查询FROM子句指定的表。

5.它使用限定列名来引用外部查询确定的值。

 

相关子查询基本语法如下:

SELECT outer_column

FROM outer_table

WHERE outer_column_value IN (SELECT inner_column FROM inner_table WHERE inner_column=outer_columns)

 

在包含子查询的语句中,列名隐式地限定为那个同一嵌套层次FROM子句所引用的表。

显示说明表名,就不会出错。

 

当空值出现的时候,如果不删除它们就有可能出现意外的结果。

 

使用子查询作为列表达式:SQL允许在SELECT子句中嵌入一个子查询。

用来作为列表达式的子查询必须是标量子查询。一个标量子查询返回单一值(一行一列的结果),在子查询中使用聚合函数或限制性WHERE条件,以保证该子查询只返回一行。

 

可以在FROM子句中使用子查询。

可以在UPDATEINSERTDELETE子句中使用子查询作为列表达式。

 

使用IN测试集合成员资格

子查询的SELECT子句只可以包含一个表达式或列名。

子查询必须返回一列零行或多行,子查询返回超过一列会引发错误。

WHERE | HAVING test_column [NOT] IN (subquery)

 

使用ALL比较所有子查询的值

可以用关键字ALL来确定一个值是否小于或大于子查询的所有值。

<ALL表示小于每个子查询的返回值,就是小于最小值。

>ALL表示大于每个子查询的返回值,就是大于最大值。

=ALL很少用,除非子查询返回同一个值,否则=ALL永远返回假。

子查询必须返回一列(零行或多行值),返回多于一列的值将引发错误。

如果子查询返回0行,ALL条件为真。

WHERE | HAVING test_column > ALL(subquery)

 

使用ANY比较某些子查询的值

ANY功能类似于ALL,确定是否一个值等于、大于、小于子查询的结果中的某个值。

<ANY意味着小于至少一个子查询返回值,即小于最大值。

>ANY意味着大于至少一个子查询返回值,即大于最小值。

=ANY等价于IN

如果子查询返回0行,ANY条件为假。

WHERE | HAVING test_column < ANY(subquery)

 

使用EXISTS检测存在性

EXISTSNOT EXISTS不比较值,而是在子查询结果中确定存在或不存在行。

存在性检测不比较值,而是在子查询结果中确定存在或不存在行。

子查询通常是相关子查询。

子查询可以返回任意数量的行和列。

因为EXISTS 只是简单检测满足子查询条件的行是否存在,列出具体列名是没有必要的,与行中实际值是多少也并无关系。所以可以使用SELECT *来检索所有的列。

所有INALLANY可以用EXISTSNOT EXISTS代替。

行中只包含空值的子查询算作一行。

 

WHERE | HAVING [NOT] EXISTS(subquery)

如果subquery返回一行或多行,EXISTS测试结果为真。如果subquery返回0行,EXISTS测试结果为假。NOT对结果取反。

如果子查询返回至少一行,EXISTS检测为真,NOT EXISTS检测为假。如果子查询返回零行,EXISTS检测为假,NOT EXISTS检测为真。

分享到:
评论

相关推荐

    SQL语句总结

    10. **子查询(Subqueries)**:子查询是在另一个查询内部的查询,它可以作为外部查询的一部分,提供临时的结果集。 11. **连接(Joins)**:除了基础的JOIN操作,还有自连接(Self JOIN)和多表连接,用于处理涉及...

    SQL子查询、内连接和外连接查询

    在提供的描述中,有两处使用了子查询: 1. `sno not in(select snofrom Select_Course as SCwhere cno in(select cno from Coursewhere SC.cno=@Cno ))` 这里的子查询`select cno from Course where SC.cno=@Cno`...

    sql练习总结sql经验总结

    6. 子查询:嵌套查询,可以在主查询中使用一个或多个查询,以获取更复杂的查询结果。 三、数据库设计原则 1. 第一范式(1NF):确保每列都不可再分,避免冗余数据。 2. 第二范式(2NF):在1NF基础上,消除非主...

    面试SQL经典总结

    - 子查询:在查询中嵌套查询,以满足更复杂的数据获取需求。 - 联接的优化:理解索引、连接类型优化、笛卡尔积避免等,提高查询性能。 - 分区和分桶:在大数据场景下,学习如何使用分区表和分桶来处理大规模数据...

    Microsoft SQL Server 2008技术内幕:T-SQL查询(第二卷)

    主要内容包括SQL的基础理论、查询优化、查询算法及复杂度,以及在使用子查询、表表达式、排名函数、数据聚合和透视转换、TOP和APPLY、数据修改、分区表、特殊数据结构等实际应用时会遇到的各种高级查询问题和解决...

    (第二卷)Microsoft SQL Server 2008技术内幕:T-SQL语言基础

    主要包括SQL的基础理论、逻辑查询处理、SELECT查询、连接和子查询、表表达式、过滤和分组、透视转换、修改数据、事务和一致性的处理、可编程对象等内容。  书中并非系统地罗列T-SQL的各种语法元素,而是结合实践中...

    数据库基础之sql语句总结

    本篇文章将全面总结SQL语句的基础知识,为数据库学习者提供基础指导。 1. **查询操作** - **查表结构**:使用`DESC 数据表名`可以查看表的字段名称、数据类型和是否允许为空等信息。 - **单表查询** - **简单...

    (第一卷)Microsoft.SQL.Server.2008技术内幕:T-SQL语言基础

    主要包括SQL的基础理论、逻辑查询处理、SELECT查询、连接和子查询、表表达式、过滤和分组、透视转换、修改数据、事务和一致性的处理、可编程对象等内容。  书中并非系统地罗列T-SQL的各种语法元素,而是结合实践中...

    SQL数据的查询和更新实验报告报告.pdf

    - **子查询限制条件**:在主查询中嵌入子查询,满足特定条件 - **相关子查询**:子查询的结果取决于外部查询的每一行 - **不相关子查询**:子查询独立于外部查询,只执行一次 - **谓词子查询**: - **IN, NOT IN**...

    SQL基础教程-Mick-示例程序&习题答案

    - 子查询:嵌套在其他查询中的查询,用于获取满足特定条件的子集数据。 - 分页查询:LIMIT和OFFSET组合使用,实现查询结果的分页显示。 3. SQL示例程序: Mick的教程可能包含各种实际操作示例,如创建数据库模型...

    Microsoft SQL Server 2005技术内幕:T-SQL查询

    第1章 T-SQL查询和编程基础  1.1 理论背景  1.2 SQL SERVER体系结构  1.3 创建表和定义数据完整性  1.4 总结 第2章 单表查询  2.1 SELECT语句的元素  2.2 谓词和运算符  2.3 CASE表达式  2.4 NULL...

    SQL查询语言及应用

    子查询是指在一个查询语句中嵌套另一个查询语句。子查询可以出现在SELECT、FROM或WHERE子句中。 ```sql SELECT * FROM table1 WHERE column IN (SELECT column FROM table2); ``` 2. **联结查询**: 联结...

    MS SQL 基础语句教程

    #### 第七天:子查询 - **建立一个子查询**:子查询是一个被嵌入到另一个查询中的查询。 - **在子查询中使用汇总函数**:展示了如何在子查询中使用COUNT、SUM等汇总函数。 - **子查询的嵌套**:可以在一个子查询中...

    ORACLE SQL :经典查询练手系列文章汇总.pdf

    ### 一、Oracle SQL基础查询 1. **基本查询语句**:`SELECT`语句是SQL中最常用的查询语句,用于从一个或多个表中检索数据。例如,从`scott.emp`表中选择所有列,可以使用`SELECT * FROM scott.emp;`。 2. **条件...

    SQL语句精华总结.doc

    以上就是文档中提到的SQL语句精华,涵盖了基础的查询、更新、联接、聚合函数以及复杂的子查询和比较运算符的使用,这些都是SQL编程中常见的操作。熟练掌握这些知识点对于处理数据库操作至关重要,也是SQL面试和日常...

    SQL Server基础总结

    根据提供的文件信息,本文将对SQL Server的基础知识点进行详细的总结与解释。这将涵盖数据库管理语言(DDL)、数据操作语言(DML)、数据控制语言(DCL)等关键概念,并结合具体的示例来帮助读者更好地理解和掌握...

    Microsoft SQL Server 2008技术内幕:T-SQL查询(英文版)

    - **子查询**:介绍如何使用子查询来处理复杂的数据筛选需求。 - **表表达式**:探讨CTE(公用表表达式)和派生表的概念及其应用场景。 - **排名函数**:学习使用ROW_NUMBER()、RANK()等函数来进行数据排序和分组...

    SQLserver资料|sql基础教程|sql基础案例|sql入门教程

    5. 子查询:在查询中嵌套查询,用于获取满足特定条件的数据。 6. 视图:创建虚拟表,基于一个或多个表的查询结果。 7. 存储过程和函数:预编译的SQL语句集合,可以有输入、输出参数,用于提高性能和代码复用。 二...

    sql中文查询手册

    1. 子查询:在查询中嵌套另一个查询,用于获取满足特定条件的结果集。例如: ```sql SELECT * FROM 表1 WHERE 字段 IN (SELECT 字段 FROM 表2 WHERE 条件); ``` 2. 联接查询:包括内连接(INNER JOIN)、外连接...

Global site tag (gtag.js) - Google Analytics