嵌套查询的意思是,一个查询语句(select-from-where)查询语句块可以嵌套在另外一个查询块的where子句中,称为嵌套查询。其中外层查询也称为父查询,主查询。内层查询也称子查询,从查询。

  嵌套查询的工作方式是:先处理内查询,由内向外处理,外层查询利用内层查询的结果嵌套查询不仅仅可以用于父查询select语句使用。还可以用于insert、update、delete语句或其他子查询中。

一、子查询的组成

  1、包含标准选择列表组件的标准select查询。

  2、包含一个或多个表或者视图名称的标准from子句。

  3、可选的where子句。

  4、可选的group by子句。

  5、可选的having子句。

二、子查询的语法规则

  1、子查询的select查询总是使用圆括号括起来。

  2、不能包括compute或for.browse子句。

  3、如果同时指定top子句,则可能只包括order by子句。

  4、子查询最多可以嵌套到32层。个别查询可能会不支持32层嵌套。

  5、任何可以使用表达式的地方都可以使用子查询,只要它返回的是单个值。

  6、如果某个表只出现在子查询中二不出现在外部查询中,那么该表的列就无法包含在输出中。

三、简单子查询

  示例:

select name,age from person
where age >
(
select age from person
where name = '孙权'
)

   输出结果为:

   

四、in嵌套查询

   in关键字用于where子句中用来判断查询的表达式是否在多个值的列表中。返回满足in列表中的满足条件的记录。

   示例:

select name from person
where countryid in
(
select countryid from country
where countryname = '魏国'
)

   输出结果为:

   

五、some嵌套查询

  1、语法

  some在sql中的逻辑运算符号,如果在一系列比较中,有些值为True,那么结果就为True。some的语法是:

  <表达式>{ =|<>|!=|>|>=|!>|<|<=|!<}some(子查询)  

  示例:

select name from person
where countryid = some       --用等号和以下查询到的值比较,如果与其中一个相等,就返回
(
select countryid from country
where countryname = '魏国'
)

  输出结果为:

  

六、all嵌套查询

  all是sql中的逻辑运算符好,如果一系列的比较都为true,那么结果才能为true。

  1、语法

  <表达式>{ =|<>|!=|>|>=|!>|<|<=|!<}all(子查询)

  示例:

select name from person
where countryid > all   --当countryid大于以下返回的所有id,此结果才为True,此结果才返回
(
select countryid from country
where countryname = '魏国'
)

  输出结果为:

  

七、exists嵌套查询

   1、语法

   exists是sql中的逻辑运算符号。如果子查询有结果集返回,那么就为True。exists代表“存在”的意义,它只查找满足条件的那些记录。一旦找到第一个匹配的记录后,就马上停止查找。

  exists 子查询        

   其中子查询是一个首先的select语句,不允许有compute子句和into关键字。

   exists 的意思是,子查询是否有结果集返回。
   例如:

SELECT * FROM Person
WHERE exists
(
SELECT 1 --SELECT 0 SELECT NULL 返回结果都一样,因为这三个子查询都有结果集返回,因此总是True SELECT * FROM Person照常执行
)

   但是如果子查询中因为加了条件而没有结果集返回,则主语句就不执行了:

SELECT * FROM Person
WHERE exists
(
SELECT * FROM Person
WHERE Person_Id = 100 --如果不存在Person_Id的记录,则子查询没有结果集返回,主语句不执行
)

SQL语句 - 嵌套查询的更多相关文章

  1. MySQL的EXPLAIN命令用于SQL语句的查询执行计划

    MySQL的EXPLAIN命令用于SQL语句的查询执行计划(QEP).这条命令的输出结果能够让我们了解MySQL 优化器是如何执行SQL 语句的.这条命令并没有提供任何调整建议,但它能够提供重要的信息 ...

  2. SQL语句在查询分析器中可以执行,代码中不能执行

    问题:SQL语句在查询分析器中可以执行,代码中不能执行 解答:sql中包含数据库的关键字,将关键字用[]括起来,可以解决. 后记:建数据库的时候尽量避免使用关键字. 例子: sql.Format(&q ...

  3. 如何在 Linux 上用 SQL 语句来查询 Apache 日志

    Linux 有一个显著的特点,在正常情况下,你可以通过日志分析系统日志来了解你的系统中发生了什么,或正在发生什么.的确,系统日志是系统管理员在解决系统和应用问题时最需要的第一手资源.我们将在这篇文章中 ...

  4. 在Hibernate中使用HibernateTemplate来进行包含sql语句的查询

    /**     * 使用sql语句进行查询操作     * @param sql     * @return     */    public List queryWithSql(final Stri ...

  5. Sql语句之查询所有学生所有科目分数及总分

    昨天练Sql语句,数据库建了四个表分别是,学生表,课程表,成绩表以及教师表(教师表不在讨论范围),突然想到以前高中时代老师手上的那张成绩表,然后我就寻思着能不能用Sql语句把表打印出来,以下是我的思考 ...

  6. Python与开源GIS:在OGR中使用SQL语句进行查询

    摘要: 属性选择与空间选择都可以看作是OGR内置的选择功能,这两种功能可以解决大部分实际中的问题.但是也有这种时候,就是进行查询时的条件比较复杂.针对这种情况,OGR也提供了更加灵活的解决方案:支持使 ...

  7. SQL 语句在查询分析器执行很快,程序 Dapper 参数化查询就很慢(parameter-sniffing)

    这个问题困扰我好长时间了,使用SQLSERVER 事务探查器找到执行超时的SQL语句,参数查询都是通过执行exe sp_executesql 的存储过程调用,因为它能够分析并缓存查询计划,从而优化查询 ...

  8. [Beego模型] 四、使用SQL语句进行查询

    [Beego模型] 一.ORM 使用方法 [Beego模型] 二.CRUD 操作 [Beego模型] 三.高级查询 [Beego模型] 四.使用SQL语句进行查询 [Beego模型] 五.构造查询 [ ...

  9. SQL语句关联查询

    一:连接类型: 关联查询:只有存在关联的表才能关联查询,完全独立的表之间无法关联 1.关联的类型:自关联,左关联,右关联,全关联(full join)两张表都是主表 2.关联的表:两张以上,以一张(或 ...

随机推荐

  1. [ACM_数据结构] 竞赛排名

    比赛排名 Time Limit:1000MS  Memory Limit:32768K Description: 欢迎参加浙江工业大学“亚信联创杯”程序设计大赛,本次竞赛采用与 ACM/ICPC 相同 ...

  2. [ACM_其他] Square Ice (poj1099 规律)

    Description Square Ice is a two-dimensional arrangement of water molecules H2O, with oxygen at the v ...

  3. JPA 使用

    本文以JPA+Hibernate 角色与权限示例说明. 角色实体定义: @Entity @Table public class Role { private long id; private Stri ...

  4. TF Boys (TensorFlow Boys ) 养成记(三)

    上次说到了 TensorFlow 从文件读取数据,这次我们来谈一谈变量共享的问题. 为什么要共享变量?我举个简单的例子:例如,当我们研究生成对抗网络GAN的时候,判别器的任务是,如果接收到的是生成器生 ...

  5. Leetcode 283 Move Zeroes 字符串

    class Solution { public: void moveZeroes(vector<int>& nums) { ; ; i< nums.size(); ++i){ ...

  6. 重学JAVA基础(六):多线程的同步

    1.synchronized关键字 /** * 同步关键字 * @author tomsnail * @date 2015年4月18日 下午12:12:39 */ public class SyncT ...

  7. echart.js的使用与API

    ---恢复内容开始--- echart.js的使用与API 1.echart.js的使用: 第一步:在head标签或body下创建一个script标签去引用echart.js,(该文件可以在echar ...

  8. Redis info参数总结(转)

    Redis官网对 info 已经讲解的比较清楚的,参考文档 . 可以看到,info的输出结果是分几块的,有Servers.Clients.Memory等等,通过info后面接这些参数,可以指定输出某一 ...

  9. 【转】升级Xcode6.3插件失效解决办法

     1.打开终端,输入以下代码获取到DVTPlugInCompatibilityUUID         defaults read /Applications/Xcode.app/Contents/I ...

  10. 【转】我应该直接学Swift还是Objective-C?

    (本文作者Amit Bijlani,由CocoaChina翻译) 当我们发布了Swift语言学习课程之后,收到了很多邮件和私信来问自己是否还需要学习C或者Objective-C.此外,人们似乎还在迷惑 ...