精华内容
下载资源
问答
  • VC++ SQL语句嵌套查询实例,嵌套的SQL 语句可以执行比较复杂的数据库操作,本源码介绍在INSERT 语句中嵌套使用SELECT语句。测试前请通过控制面板注册Access 数据源students,编译并运行Debug下的exe程序,如上图所示...
  • ORACLE分页查询SQL语句(最有效的分页)

    万次阅读 多人点赞 2018-11-01 16:18:24
    (经过测试,此方法成本最低,只嵌套一层,速度最快!即使查询的数据量再大,也几乎不受影响,速度依然!) SELECT * FROM (SELECT ROWNUM AS rowno, t.* FROM emp t WHERE hire_date BETWEEN TO_DATE ...

    一、效率高的写法

    1.无ORDER BY排序的写法。(效率最高)
    (经过测试,此方法成本最低,只嵌套一层,速度最快!即使查询的数据量再大,也几乎不受影响,速度依然!)

    SELECT *
    
      FROM (SELECT ROWNUM AS rowno, t.*
    
              FROM emp t
    
             WHERE hire_date BETWEEN TO_DATE ('20060501', 'yyyymmdd')
    
                                 AND TO_DATE ('20060731', 'yyyymmdd')
    
               AND ROWNUM <= 20) table_alias
    
     WHERE table_alias.rowno >= 10;
    

    2.有ORDER BY排序的写法。(效率较高)
    (经过测试,此方法随着查询范围的扩大,速度也会越来越慢哦!)

    SELECT *
    
      FROM (SELECT tt.*, ROWNUM AS rowno
    
              FROM (  SELECT t.*
    
                        FROM emp t
    
                       WHERE hire_date BETWEEN TO_DATE ('20060501', 'yyyymmdd')
    
                                           AND TO_DATE ('20060731', 'yyyymmdd')
    
                    ORDER BY create_time DESC, emp_no) tt
    
             WHERE ROWNUM <= 20) table_alias
    
     WHERE table_alias.rowno >= 10;
    

    二、效率垃圾但又似乎很常用的分页写法

    3.无ORDER BY排序的写法。(建议使用方法1代替)
    (此方法随着查询数据量的扩张,速度会越来越慢哦!)

    SELECT *
    
      FROM (SELECT ROWNUM AS rowno, t.*
    
              FROM k_task t
    
             WHERE flight_date BETWEEN TO_DATE ('20060501', 'yyyymmdd')
    
                                   AND TO_DATE ('20060731', 'yyyymmdd')) table_alias
    
     WHERE table_alias.rowno <= 20 AND table_alias.rowno >= 10;
    
    --TABLE_ALIAS.ROWNO  between 10 and 100;
    

    4.有ORDER BY排序的写法.(建议使用方法2代替)
    (此方法随着查询范围的扩大,速度会越来越慢哦!)

    SELECT *
    
      FROM (SELECT tt.*, ROWNUM AS rowno
    
              FROM (  SELECT *
    
                        FROM k_task t
    
                       WHERE flight_date BETWEEN TO_DATE ('20060501', 'yyyymmdd')
    
                                             AND TO_DATE ('20060531', 'yyyymmdd')
    
                    ORDER BY fact_up_time, flight_no) tt) table_alias
    
     WHERE table_alias.rowno BETWEEN 10 AND 20;
    

    5.另类语法。(有ORDER BY写法)
    (语法风格与传统的SQL语法不同,不方便阅读与理解,为规范与统一标准,不推荐使用。)

    WITH partdata AS
    
         (
    
            SELECT ROWNUM AS rowno, tt.*
    
              FROM (  SELECT *
    
                        FROM k_task t
    
                       WHERE flight_date BETWEEN TO_DATE ('20060501', 'yyyymmdd')
    
                                             AND TO_DATE ('20060531', 'yyyymmdd')
    
                    ORDER BY fact_up_time, flight_no) tt
    
             WHERE ROWNUM <= 20)
    
    SELECT *
    
      FROM partdata
    
     WHERE rowno >= 10;
    
     
    
    --6另类语法 。(无ORDER BY写法)
    
    WITH partdata AS
    
         (
    
            SELECT ROWNUM AS rowno, t.*
    
              FROM k_task t
    
             WHERE flight_date BETWEEN TO_DATE ('20060501', 'yyyymmdd')
    
                                   AND TO_DATE ('20060531', 'yyyymmdd')
    
               AND ROWNUM <= 20)
    
    SELECT *
    
      FROM partdata
    
     WHERE rowno >= 10;
    

    三、分析

    Oracle的分页查询语句基本上可以按照本文给出的格式来进行套用。

    分页查询格式:

    SELECT *
    
      FROM (SELECT a.*, ROWNUM rn
    
              FROM (SELECT *
    
                      FROM table_name) a
    
             WHERE ROWNUM <= 40)
    
     WHERE rn >= 21
    

    其中最内层的查询SELECT * FROM TABLE_NAME表示不进行翻页的原始查询语句。ROWNUM <= 40和RN >= 21控制分页查询的每页的范围。

    上面给出的这个分页查询语句,在大多数情况拥有较高的效率。分页的目的就是控制输出结果集大小,将结果尽快的返回。在上面的分页查询语句中,这种考虑主要体现在WHERE ROWNUM <= 40这句上。

    选择第21到40条记录存在两种方法,一种是上面例子中展示的在查询的第二层通过ROWNUM <= 40来控制最大值,在查询的最外层控制最小值。而另一种方式是去掉查询第二层的WHERE ROWNUM <= 40语句,在查询的最外层控制分页的最小值和最大值。这是,查询语句如下:

    SELECT *
    
      FROM (SELECT a.*, ROWNUM rn
    
              FROM (SELECT *
    
                      FROM table_name) a)
    
     WHERE rn BETWEEN 21 AND 40
    

    对比这两种写法,绝大多数的情况下,第一个查询的效率比第二个高得多。

    这是由于CBO优化模式下,Oracle可以将外层的查询条件推到内层查询中,以提高内层查询的执行效率。对于第一个查询语句,第二层的查询条件WHERE ROWNUM <= 40就可以被Oracle推入到内层查询中,这样Oracle查询的结果一旦超过了ROWNUM限制条件,就终止查询将结果返回了。

    而第二个查询语句,由于查询条件BETWEEN 21 AND 40是存在于查询的第三层,而Oracle无法将第三层的查询条件推到最内层(即使推到最内层也没有意义,因为最内层查询不知道RN代表什么)。因此,对于第二个查询语句,Oracle最内层返回给中间层的是所有满足条件的数据,而中间层返回给最外层的也是所有数据。数据的过滤在最外层完成,显然这个效率要比第一个查询低得多。

    上面分析的查询不仅仅是针对单表的简单查询,对于最内层查询是复杂的多表联合查询或最内层查询包含排序的情况一样有效。

    这里就不对包含排序的查询进行说明了,下一篇文章会通过例子来详细说明。

    下面简单讨论一下多表联合的情况。

    对于最常见的等值表连接查询,CBO一般可能会采用两种连接方式NESTED LOOP和HASH JOIN(MERGE JOIN效率比HASH JOIN效率低,一般CBO不会考虑)。在这里,由于使用了分页,因此指定了一个返回的最大记录数,NESTED LOOP在返回记录数超过最大值时可以马上停止并将结果返回给中间层,而HASH JOIN必须处理完所有结果集(MERGE JOIN也是)。那么在大部分的情况下,对于分页查询选择NESTED LOOP作为查询的连接方法具有较高的效率(分页查询的时候绝大部分的情况是查询前几页的数据,越靠后面的页数访问几率越小)。

    因此,如果不介意在系统中使用HINT的话,可以将分页的查询语句改写为:

    SELECT *
    
      FROM (SELECT a.*, ROWNUM rn
    
              FROM (SELECT *
    
                      FROM table_name) a
    
             WHERE ROWNUM <= 40)
    
     WHERE rn >= 21
    
    展开全文
  • SQL语句嵌套查询

    2013-02-03 14:50:09
    基于SQL2005的嵌套查询,包括返回一个值的子查询、返回一组值的子查询(使用ANY谓词查询、使用IN谓词查询、使用ALL谓词查询使用EXISTS查询)。附有详细的表信息。
  • SQL语句 - 嵌套查询(SQLServer)

    千次阅读 2017-08-21 14:46:16
    SQL语句 - 嵌套查询(SQLServer)  嵌套查询的意思是,一个查询语句(select-from-where)查询语句块可以嵌套在另外一个查询块的where子句中,称为嵌套查询。其中外层查询也称为父查询,主查询。内层查询也称子查询...
    SQL语句 - 嵌套查询(SQLServer)

       嵌套查询的意思是,一个查询语句(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语句 - 嵌套查询

    千次阅读 2019-10-04 14:29:55
    SQL语句 - 嵌套查询 嵌套查询的意思是,一个查询语句(select-from-where)查询语句块可以嵌套在另外一个查询块的where子句中,称为嵌套查询。其中外层查询也称为父查询,主查询。内层查询也称子查询,从...

       嵌套查询的意思是,一个查询语句(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的记录,则子查询没有结果集返回,主语句不执行
    )
    posted on 2013-06-03 23:44  逆心 阅读( ...) 评论( ...) 编辑 收藏

    转载于:https://www.cnblogs.com/kissdodog/archive/2013/06/03/3116284.html

    展开全文
  • sql语句嵌套查询

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

                                                                                SQL嵌套查询 


    嵌套查询的意思是,一个查询语句(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语句-嵌套查询

    千次阅读 2018-05-02 09:40:10
    SQL语句 - 嵌套查询 嵌套查询的意思是,一个查询语句(select-from-where)查询语句块可以嵌套在另外一个查询块的where子句中,称为嵌套查询。其中外层查询也称为父查询,主查询。内层查询也称子查询,从查询。 嵌套...
  • sql语句嵌套查询.

    2017-07-14 20:46:01
     嵌套查询 ,也不局限查询,也可以其他, 但本质是 一个sql语句中用到其他sql语句的结果了  sql执行顺序是, 由内向外执行, 一、子查询的组成  1、包含标准选择列表组件的标准select查询。  2、包含一个或...
  • 掌握使用T-SQL语句嵌套查询表格的方法 二 实验内容 使用嵌套查询语句查询Stu_Info Table和Stu_Grade Table的学生信息 三 实验指导 在如图8-1和图8-2的表格基础上 图8-1 Stu_Info Table 图8-2 Stu_Grade T
  • 在java写对数据库操作的程序时,有时会遇到模糊查询字符串匹配sql语句,这时应该怎么嵌套变量呢,如下: String sql="select * from admin where name like ?"; ps = conn.prepareStatement(sql); ps.setString(1...
  • not exists 双层嵌套 SQL 查询语句 先看一下理解结果 // 选择一个学生 Select Sname from Student // 对于这个学生 Where not exists // 不存在这样一门课 (select * from Course // 这门课由 001 号教师...
  • SQL语句嵌套查询问题

    千次阅读 2017-06-15 16:28:23
    在做项目的时候遇到了一个需求:就是要按规定条件筛选出一定数量的数据,然后对数据进行再排序。...所以本人就理想当然地写出了如下的SQL语句:SELECT * FROM (SELECT * FROM operator_input ORDER BY time DESC
  • 1.select A.END from 2. tableA A,tableB B 3.where A.X=B.Y 4.and A.END = ( 5. select MAX(END) ...另外第5,6,7行是子查询,不是很理解为什么可以里面调用父查询里面的B。能详细说一下这个sql 完整的执行过程么
  • 多个sql语句嵌套查询

    千次阅读 2017-09-19 09:33:54
    法一: // 设置 connection连接 ...//存储查询sql语句的数组 let sqlArr = []; //存储查询结果的对象 let resObj = {}; async.eachSeries(sqlArr, function(item, callback){  db.query(item, function(er
  • SQL语句嵌套查询

    千次阅读 2007-03-29 09:06:00
    2 .SQL允许多层嵌套,由内而外地进行分析,子查询的结果作为主查询查询条件3 .子查询中一般不使用order by子句,只能对最终查询结果进行排序子查询(sub query)where 表达式 [ not ] in (子查询)where 表达式 比较...
  • mybatis里面的if语句需要加上(但是有时不需要 但是(又是在if语句中的 案例一 不完善 &lt;select id="selectRechargeInfoChainCount" resultType="int"&gt; select count(*) from t_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 106,754
精华内容 42,701
关键字:

嵌套查询sql语句