本系列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子句中使用子查询。
可以在UPDATE、INSERT、DELETE子句中使用子查询作为列表达式。
使用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检测存在性
EXISTS和NOT EXISTS不比较值,而是在子查询结果中确定存在或不存在行。
存在性检测不比较值,而是在子查询结果中确定存在或不存在行。
子查询通常是相关子查询。
子查询可以返回任意数量的行和列。
因为EXISTS 只是简单检测满足子查询条件的行是否存在,列出具体列名是没有必要的,与行中实际值是多少也并无关系。所以可以使用SELECT *来检索所有的列。
所有IN、ALL、ANY可以用EXISTS或NOT EXISTS代替。
行中只包含空值的子查询算作一行。
WHERE |
HAVING [NOT] EXISTS(subquery)
如果subquery返回一行或多行,EXISTS测试结果为真。如果subquery返回0行,EXISTS测试结果为假。NOT对结果取反。
如果子查询返回至少一行,EXISTS检测为真,NOT
EXISTS检测为假。如果子查询返回零行,EXISTS检测为假,NOT EXISTS检测为真。
分享到:
相关推荐
10. **子查询(Subqueries)**:子查询是在另一个查询内部的查询,它可以作为外部查询的一部分,提供临时的结果集。 11. **连接(Joins)**:除了基础的JOIN操作,还有自连接(Self JOIN)和多表连接,用于处理涉及...
在提供的描述中,有两处使用了子查询: 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`...
6. 子查询:嵌套查询,可以在主查询中使用一个或多个查询,以获取更复杂的查询结果。 三、数据库设计原则 1. 第一范式(1NF):确保每列都不可再分,避免冗余数据。 2. 第二范式(2NF):在1NF基础上,消除非主...
- 子查询:在查询中嵌套查询,以满足更复杂的数据获取需求。 - 联接的优化:理解索引、连接类型优化、笛卡尔积避免等,提高查询性能。 - 分区和分桶:在大数据场景下,学习如何使用分区表和分桶来处理大规模数据...
主要内容包括SQL的基础理论、查询优化、查询算法及复杂度,以及在使用子查询、表表达式、排名函数、数据聚合和透视转换、TOP和APPLY、数据修改、分区表、特殊数据结构等实际应用时会遇到的各种高级查询问题和解决...
主要包括SQL的基础理论、逻辑查询处理、SELECT查询、连接和子查询、表表达式、过滤和分组、透视转换、修改数据、事务和一致性的处理、可编程对象等内容。 书中并非系统地罗列T-SQL的各种语法元素,而是结合实践中...
本篇文章将全面总结SQL语句的基础知识,为数据库学习者提供基础指导。 1. **查询操作** - **查表结构**:使用`DESC 数据表名`可以查看表的字段名称、数据类型和是否允许为空等信息。 - **单表查询** - **简单...
主要包括SQL的基础理论、逻辑查询处理、SELECT查询、连接和子查询、表表达式、过滤和分组、透视转换、修改数据、事务和一致性的处理、可编程对象等内容。 书中并非系统地罗列T-SQL的各种语法元素,而是结合实践中...
- **子查询限制条件**:在主查询中嵌入子查询,满足特定条件 - **相关子查询**:子查询的结果取决于外部查询的每一行 - **不相关子查询**:子查询独立于外部查询,只执行一次 - **谓词子查询**: - **IN, NOT IN**...
- 子查询:嵌套在其他查询中的查询,用于获取满足特定条件的子集数据。 - 分页查询:LIMIT和OFFSET组合使用,实现查询结果的分页显示。 3. SQL示例程序: Mick的教程可能包含各种实际操作示例,如创建数据库模型...
第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...
子查询是指在一个查询语句中嵌套另一个查询语句。子查询可以出现在SELECT、FROM或WHERE子句中。 ```sql SELECT * FROM table1 WHERE column IN (SELECT column FROM table2); ``` 2. **联结查询**: 联结...
#### 第七天:子查询 - **建立一个子查询**:子查询是一个被嵌入到另一个查询中的查询。 - **在子查询中使用汇总函数**:展示了如何在子查询中使用COUNT、SUM等汇总函数。 - **子查询的嵌套**:可以在一个子查询中...
### 一、Oracle SQL基础查询 1. **基本查询语句**:`SELECT`语句是SQL中最常用的查询语句,用于从一个或多个表中检索数据。例如,从`scott.emp`表中选择所有列,可以使用`SELECT * FROM scott.emp;`。 2. **条件...
以上就是文档中提到的SQL语句精华,涵盖了基础的查询、更新、联接、聚合函数以及复杂的子查询和比较运算符的使用,这些都是SQL编程中常见的操作。熟练掌握这些知识点对于处理数据库操作至关重要,也是SQL面试和日常...
根据提供的文件信息,本文将对SQL Server的基础知识点进行详细的总结与解释。这将涵盖数据库管理语言(DDL)、数据操作语言(DML)、数据控制语言(DCL)等关键概念,并结合具体的示例来帮助读者更好地理解和掌握...
- **子查询**:介绍如何使用子查询来处理复杂的数据筛选需求。 - **表表达式**:探讨CTE(公用表表达式)和派生表的概念及其应用场景。 - **排名函数**:学习使用ROW_NUMBER()、RANK()等函数来进行数据排序和分组...
5. 子查询:在查询中嵌套查询,用于获取满足特定条件的数据。 6. 视图:创建虚拟表,基于一个或多个表的查询结果。 7. 存储过程和函数:预编译的SQL语句集合,可以有输入、输出参数,用于提高性能和代码复用。 二...
1. 子查询:在查询中嵌套另一个查询,用于获取满足特定条件的结果集。例如: ```sql SELECT * FROM 表1 WHERE 字段 IN (SELECT 字段 FROM 表2 WHERE 条件); ``` 2. 联接查询:包括内连接(INNER JOIN)、外连接...