定义:
1 .指在一个外层查询中包含有另一个内层查询。其中外层查询称为主查询,内层查询称为子查询。
2 .SQL允许多层嵌套,由内而外地进行分析,子查询的结果作为主查询的查询条件
3 .子查询中一般不使用order by子句,只能对最终查询结果进行排序
 
 注意:
在一个SELECT 语句的WHERE 子句或HAVING 子句中嵌套另一个SELECT 语句的查询称为嵌套查询,又称子查询
 在大多数实现中,字查询不能是几个不同的SELECT语句的UNION,它只允许一个SELECT。
 
语句形式:
 
SELECT <目标表达式1>[,...]
FROM<表或视图名1>
//FROM(<查询到的表或视图名1>)
WHERE [表达式] (SELECT <目标表达式2>[,...]
FROM <表或视图名2>)
[GROUP BY <分组条件>
HAVING [<表达式>比较运算符] (SELECT <目标表达式2>[,...]
FROM <表或视图名2> )]

子查询存在NULL值时,避免使用NOT IN。因为当子查询的结果包括了NULL值的列表时,把NULL值当成一个未知数据,不会存在查询值不在列表中的记录。

use student

select *

from student

where 学号 not in

(select 学号 from grade

)

由于子查询的结果包括了NULL值,所以最终的查询结果只有空值。正确查询的SQL语句如下:

use student

select *

from  student

where 学号 not  in

(select 学号 from grade where 学号  is not null)

SQL支持3种定量比较谓词:SOME、ANY和ALL。它们都是判断是否任何或全部返回值都满足搜索要求的。其中SOME和ANY谓词是存在量的,只注重是否有返回值满足搜索要求。这两种谓词含义相同,可以替换使用。

SOME是把每一行指定的列值与子查询的结果进行比较,如果哪行的比较结果为真,满足条件就返回该行。本实例的嵌套的子查询结果就是一个数值,然后“student”学生表的每一条记录的年龄列值与之相比较,满足就返回行。

ANY属于SQL支持的3种定量谓词之一。且和SOME完全等价,即能用SOME的地方完全可以使用ANY。

SQL中定量谓词不支持反操作,也就是说,不能在ANY或者SOME前加NOT关键字。但可以用“<>”号表示否定

EXISTS谓词只注重子查询是否返回行。如果子查询返回一个或多个行,谓词返回为真值,否则为假。EXISTS搜索条件并不真正地使用子查询的结果。它仅仅测试子查询是否产生任何结果。

SQL嵌套查寻初识,以及SOME ANY EXISTS的基础常识的更多相关文章

  1. SQL——嵌套查询与子查询

    前言 sql的嵌套查询可以说是sql语句中比较复杂的一部分,但是掌握好了的话就可以提高查询效率.下面将介绍带in的子查询.带比较运算符的子查询.带any/all的子查询.带exists的子查询以及基于 ...

  2. 转【】浅谈sql中的in与not in,exists与not exists的区别_

    浅谈sql中的in与not in,exists与not exists的区别   1.in和exists in是把外表和内表作hash连接,而exists是对外表作loop循环,每次loop循环再对内表 ...

  3. 浅谈sql中的in与not in,exists与not exists的区别

    转 浅谈sql中的in与not in,exists与not exists的区别   12月12日北京OSC源创会 —— 开源技术的年终盛典 »   sql exists in 1.in和exists ...

  4. (转)sql中 in 、not in 、exists、not exists 用法和差别

    exists (sql 返回结果集为真)  not exists (sql 不返回结果集为真)  如下:  表A  ID NAME  1    A1  2    A2  3  A3 表B  ID AI ...

  5. SQL Server - 数据库初识

      在互联网笔试中,常遇到数据库的问题,遂来简单总结,注意,以 Sql Server 数据库为例. 数据库 数据库系统,Database System,由数据库和数据库管理系统组成. 数据库,Data ...

  6. PL/SQL 嵌套表变长数组和索引表[转]

    关于PL/SQL中这三种数组的介绍,不想写了.转一篇日志吧…… 链接:http://www.blogjava.net/decode360/archive/2008/08/08/280825.html ...

  7. LINQ体验(7)——LINQ to SQL语句之Group By/Having和Exists/In/Any/All/Contains

    我们继续讲解LINQ to SQL语句,这篇我们来讨论Group By/Having操作符和Exists/In/Any/All/Contains操作符. Group By/Having操作符 适用场景 ...

  8. SQL Server-聚焦NOT IN VS NOT EXISTS VS LEFT JOIN...IS NULL性能分析(十八)

    前言 本节我们来综合比较NOT IN VS NOT EXISTS VS LEFT JOIN...IS NULL的性能,简短的内容,深入的理解,Always to review the basics. ...

  9. SQL Server判断对象是否存在 (if exists (select * from sysobjects )(转)

    1 判断数据库是否存在Sql代码 if exists (select * from sys.databases where name = ’数据库名’)    drop database [数据库名] ...

随机推荐

  1. 51nod1295 XOR key

    第一次写可持久化trie指针版我... //Null 的正确姿势终于学会啦qaq... #include<cstdio> #include<cstring> #include& ...

  2. mysql-备份和还原(普通还原和binlog还原)

    1)备份 mysqldump -uroot -proot share -l -F > /tmp/share.sql 说明:-l 锁表 -F 刷新日志文件(相当于flush logs) 2)还原( ...

  3. codeigniter框架扩展核心类---实现前台后台视图的分离

    1. 扩展核心类,主要作用就是扩展系统现在的功能. 为前台增加独立的视图文件夹: a. 自定义路径常量 :在application ->config/  constants.php中增加 /*m ...

  4. activiti 引擎 数据库设计说明书

    1.结构设计 1.1.    逻辑结构设计 Activiti使用到的表都是ACT_开头的. ACT_RE_*: ’RE’表示repository(存储),RepositoryService接口所操作的 ...

  5. DESCryptoServiceProvider加密、解密

    .net名称空间System.Security.Cryptography下DESCryptoServiceProvider类为我们提供了加密和解密方法,我们只需少许代码便可实现加密和解密. 稍感不托的 ...

  6. 中小型数据库 RMAN CATALOG 备份恢复方案(一)

    对于数据库的稳定性,高可用,跨平台以及海量数据库的处理,Oracle 数据库通常是大型数据库和大企业的首选.尽管如此,仍然不乏很多中小企业想要品尝一下Oracle腥味,因此在Oracle环境中也有不少 ...

  7. JS面向对象组件(六) -- 拖拽功能以及组件的延展

    HTML部分 <div id="div1"></div> <div id="div2"></div> CSS部分 ...

  8. java事务的处理

    java的事务处理,如果对数据库进行多次操作,每一次的执行或步骤都是一个事务. 如果数据库操作在某一步没有执行或出现异常而导致事务失败,这样有的事务被执行有的就没有被执行,从而就有了事务的回滚,取消先 ...

  9. vmware 连网

    Nat 这 种方式下,虚拟机的网卡连接到宿主的 VMnet8 上.此时系统的 VMWare NAT Service 服务就充当了路由器的作用,负责将虚拟机发到 VMnet8 的包进行地址转换之后发到实 ...

  10. web-3g-(163)网易-邮箱-记事本-数据库设计

    ylbtech-DatabaseDesgin:ylbtech-cnblogs(博客园)-数据库设计-2,Admin(用户后台) DatabaseName:cnblogs(博客园) Model:Admi ...