精华内容
下载资源
问答
  • 多个sql语句嵌套查询

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

    //存储查询的sql语句的数组
    let sqlArr = [];
    //存储查询结果的对象
    let resObj = {};
    async.eachSeries(sqlArr, function(item, callback){
     db.query(item, function(err, rows){
      if(err){
       return callback(err);
      }
      resObj[item] = rows;
      callback(null);
     }));
    },function(err) {
     if(err){
      return console.error(err)
     }
     //对结果进行处理...结果均在resObj中,key为sql语句,value为语句对应的sql执行结果
     console.log(resObj);
    });

    法二:
    //首先你要把db.query封装成一个promise,如下:
    //这部分代码你可以放到公共lib文件里面
    function query(sql){
     return new Promise(function (resolve, reject){
      db.query(sql, function(err, rows){
       if(err)
        return reject(err);
       relsolve(rows);
      });
     });
    }
    //下面是主逻辑
    //存储查询的sql语句的数组
    let sqlArr = [];
    //构造一个promiseArr存储所有的db查询promise对象
    let promiseArr =sqlArr.map(item=>query(item));
    //使用Promise.all方法执行;then中的dataArr即为查询的结果,顺序和sqlArr中的sql一致,处理逻辑可以放在这里;最后的catch是异常捕获,异常处理放在这里
    Promise.all(promiseArr).then(dataArr=>console.log(dataArr)).catch(err=>console.error(err));
    展开全文
  • sql嵌套查询

    千次阅读 2017-03-27 09:06:39
    1、sql嵌套查询:一个查询语句(select-from-where)查询语句块可以嵌套在另外一个查询块的where子句中,称为嵌套查询。其中外层查询也称为父查询,主查询。内层查询也称子查询,从查询。嵌套查询的工作方式是:先处理...

    1、sql嵌套查询:一个查询语句(select-from-where)查询语句块可以嵌套在另外一个查询块的where子句中,称为嵌套查询。其中外层查询也称为父查询,主查询。内层查询也称子查询,从查询。嵌套查询的工作方式是:先处理内查询,由内向外处理,外层查询利用内层查询的结果嵌套查询不仅仅可以用于父查询select语句使用。还可以用于insert、update、delete语句或其他子查询中。

    2、子查询到组成:

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

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

       c、可选的where子句。

       d、可选的group by子句。

       e、可选的having子句。

    3、子查询语法规则

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

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

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

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

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

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

    4、简单子查询实例

    select name,age from person 
    where age > 
    (
        select age from person 
        where name = '孙权'
    )
    5、in嵌套查询
     in关键字用于where子句中用来判断查询的表达式是否在多个值的列表中。返回满足in列表中的满足条件的记录。
    
    select name from person 
    where countryid in 
    (
        select countryid from country
        where countryname = '魏国'
    )
    6、all嵌套查询
     all是sql中的逻辑运算符好,如果一系列的比较都为true,那么结果才能为true。
    
    select name from person 
    where countryid > all   --当countryid大于以下返回的所有id,此结果才为True,此结果才返回
    (
        select countryid from country
        where countryname = '魏国'
    )
    7、some嵌套查询
    some在sql中的逻辑运算符号,如果在一系列比较中,有些值为True,那么结果就为True。some的语法是:
    
    select name from person 
    where countryid = some       --用等号和以下查询到的值比较,如果与其中一个相等,就返回
    (
        select countryid from country
        where countryname = '魏国'
    )
    8、exists嵌套查询
    exists是sql中的逻辑运算符号。如果子查询有结果集返回,那么就为True。exists代表“存在”的意义,它只查找满足条件的那些记录。一旦找到第一个匹配的记录后,就马上停止查找。
    
    其中子查询是一个首先的select语句,不允许有compute子句和into关键字。
    
    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连接查询嵌套查询详解

    千次阅读 2020-08-19 14:30:02
    SQL连接查询嵌套查询详解 连接查询 若一个查询同时涉及两或两以上的表,则称之为连接查询。连接查询是数据库中最最要的查询, 包括1、等值与非等值连接查询2、自然连接查询 1、等值连接查询 2、自然连接查询 3...

    SQL连接查询和嵌套查询详解
    连接查询
    若一个查询同时涉及两个或两个以上的表,则称之为连接查询。连接查询是数据库中最最要的查询,

    1、等值连接查询
    2、自然连接查询
    3、非等值连接查询
    4、自身连接查询
    5、外连接查询
    6、复合条件查询

    1、等值与非等值连接查询

    比较运算符主要有=、>、<、>=、<=、!=(或<>)等。

    下面来看一个例子:
    假设有一个学生数据库,其中有三张表,即学生信息表(Student)、课程表(Course)、选课表(Study),三张表中的信息如下:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    例1:要求查询选修了课程的学生的信息

    很显然,需要用连接查询,学生的情况存放在student表中,学生的选课情况存放在Study表中,所以查询实际涉及Student和Study这两个表。这两个表之间的联系是通过公共属性Sno实现的。

    考虑下列等值连接查询语句

    SELECT Student.*,Study.*
    FEOM Student,Study
    WHERE Student.Sno=Study.Sno /*将Student与Study中同一学生的元祖连接起来*/
    

    得到的结果:
    在这里插入图片描述

    我们发现,上述查询语句按照把两个表中学号相等的元祖连接起来。

    系统执行的连接过程:首先在表Student中找到一个元祖,然后从头开始扫描Study表,逐一查找与Student第一个元祖的Sno相等的元祖,找到后就将Student表中的第一个元祖与该元祖拼接起来,形成结果表中的一个元祖,Stdudy表全部查找完后,再找Student中的第二个元祖,重复上述过程,直至Student表中的全部元祖处理完。

    2、自然连接查询

    在等值连接中把目标中重复的属性列去掉的连接查询。

    下面考虑用自然连接实现上述例子:

    SELECT Student.Sno,SName,SSex,Sdept,Cno,Grade
    FROM Student,Study
    WHERE Student.Sno=Study.Sno
    

    结果:
    在这里插入图片描述

    3.自身连接查询

    当查询的结果涉及同一个表中两个或以上的列时,考虑用自身连接查询。

    例2:查询每一门课的间接先行课(即先行课)

    SELECT C1.Cpno
    FEOM Course AS C1,Course AS C2    /*为Course表起两个别名C1、C2*/
    WHERE C1.Pcno=C2.Cno               /*两个Course表的连接*/
    

    结果:
    在这里插入图片描述

    4、外连接查询:

    分为左外连接,右外连接,
    左外连接:根据左表的记录,在被连接的右表中找出符合条件的记录与之匹配,找不到匹配的,用null填充
     右连接:根据右表的记录,在被连接的左表中找出符合条件的记录与之匹配,找不到匹配的,用null填充

    例3:查询缺少成绩的的学生号和课程号:

    SELECT Student.Sno,Cno 
    FROM Student 
    LEFT JOIN Study 
    ON Student.Sno=Study.Sno 
    WHERE Grade IS NULL 
    

    结果:
    在这里插入图片描述

    例4:查询所有学生的学号姓名、成绩

    4.1、左外连接

    SELECT Student.Sno AS 学号,SName AS 姓名, Grade AS 成绩 
    FROM Student 
    LEFT JOIN Study
    ON Student.Sno=Study.Sno 
    

    相当于:

    4.2、右外连接

    1
    2
    3
    4
    SELECT Student.Sno AS 学号,SName AS 姓名, Grade AS 成绩
    FROM Study
    RIGHT JOIN Student
    ON Study.Sno=Student.Sno
     结果:在这里插入图片描述

    左外连接列出左边关系,右外连接列出右外关系中所有的元素

    5、多表连接查询

    –1、WHRER 语句
    –2、INNER JOIN… 语句

    例:查询选修了C601号课程的学生姓名、分数、课程名

    这个查询三个涉及了表学生表、课程表和学习表’

    SELECT Student.SName AS 学生姓名,Grade AS 成绩,CName AS 课程名 
    FROM Student 
    INNER JOIN Study ON Student.Sno=Study.Sno 
    INNER JOIN Course ON Study.Cno=Course.Cno 
    WHERE Course.Cno='C601' 
    

    相当于自然连接查询:

    SELECT
    	Student.SName AS 学生姓名,
    	Grade AS 成绩,
    	CName AS 课程名 
    FROM
    	Student, Course, Study 
    WHERE
    	Student = Study.Sno 
    	AND Study.cno = Course.Cno ADN Course.Cno = C601   
    

    6、嵌套查询

    嵌套查询又称子查询,是指在父查询的where条件语句中再插入一个子查询语句,连接查询都可以用子查询完成,反之不然。

    例1:找出至少一门课程的成绩在90分以上的女学生的姓名

    分析:已知的是分数大于90分这个条件,通过这个条件找出Study表中大于90分所对应的Sno,再通过连接查询Study表中对应Sno的SName

    SELECT SName 
    FROM Student 
    WHERE  Sex='女' AND Sno NOT IN 
    ( 
        SELECT Sno 
        FROM Stduy 
        WHERE Grade<90 
    ) 
      
    

    注意:这里子查询返回的Sno可能有多个,所以要用到谓词 IN,如果用 =,则报错,因为 = 表示子查询的返回值是唯一的。

    子查询的一个原则:根据已知得出未知

    例2:查询选修了课程名为 ‘’高等数学” 的学生学号和姓名
    根据Course表中的高等数学得到课程号,再在Study表中找到选修了该课程号的学号,最后根据学号Sno在Student表中找出对应的学生的姓名。一层层嵌套,由已知得到未知。

    SELECT Sno,SName 
    FROM Student 
    WHERE Sno IN 
    ( 
        SELECT Sno  
        FROM Study 
        WHERE Cno IN 
        ( 
            SELECT Cno  
            FROM Course 
            WHERE CName='高等数学' 
        )

    相当于连接查询:

    SELECT
    	Student.Sno, SName 
    FROM
    	Student, Course, Study 
    WHERE
    	Student.Sno = Study.Sno 
    	AND Course.Cno = Study.Cno 
    	AND Course.CName = '高等数学'
    

    结果:
    在这里插入图片描述

    例3:找出至少学了C601和C602两门课程的学生姓名。

    这里涉及到两门课程,都来自Course表,涉及到同一个表中两个或以上的元祖,考虑子查询用自身连,子查询根据课程号返回学号,父查询再根据学号查询姓名。

    SELECT SName FROM Student
    WHERE Sno IN
    (
        SELECT Study1.Sno
        FROM Study AS Study1
        JOIN Study AS Study2
        ON Study1.Sno=Study2.Sno
        WHERE Study1.Cno='C601' AND Study2.Cno='C602'
    )
    

    结果:
    在这里插入图片描述
    作者:博客园 - CTHON
    地址:https://www.cnblogs.com/cthon/p/9075774.html

    展开全文
  • SQL语句 - 嵌套查询

    千次阅读 2019-10-04 14:29:55
    嵌套查询的意思是,一个查询语句(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语句-嵌套查询

    千次阅读 2018-05-02 09:40:10
    SQL语句 - 嵌套查询 嵌套查询的意思是,一个查询语句(select-from-where)查询语句块可以嵌套在另外一个查询块的where子句中,称为嵌套查询。其中外层查询也称为父查询,主查询。内层查询也称子查询,从查询。 嵌套...
  • 1.select A.END from 2. tableA A,tableB B 3.where A.X=B.Y 4.and A.END = ( 5. select MAX(END) from tableA 6. where tableA.X = B.Y ...按理max只有一个最值,为何这样写...能详细说一下这个sql 完整的执行过程么
  • sql语句嵌套查询.

    2017-07-14 20:46:01
     嵌套查询 ,也局限查询,也可以其他, 但本质是 一个sql语句中用到其他sql语句的结果了  sql执行顺序是, 由内向外执行, 一、子查询的组成  1、包含标准选择列表组件的标准select查询。  2、包含一个或...
  • SQL中的连接查询嵌套查询

    万次阅读 多人点赞 2017-04-13 23:09:42
    若一个查询同时涉及两或两以上的表,则称之为连接查询。连接查询是数据库中最最要的查询, 包括: 1、等值连接查询 2、自然连接查询 3、非等值连接查询 4、自身连接查询 5、外连接查询 6、复合条件查询 等值与...
  • SQL语句 - 嵌套查询SQLServer)

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

    千次阅读 2018-04-20 08:11:23
    1.原语句:SELECT ID,NAME,STATES,(SELECT STATES FROM ITEM WHERE ID=T.ITEM_ID) AS ITEM_END_FLAGFROM RESULT TWHERE 1=12.ITEM表中实际没有STATES列,但执行时语句却...3.通过SQL SERVER的“原执行计划”工具发...
  • sql语句会用到许多查询语句,如果牵扯到张表的时候 一般会需要复杂查询方式:  嵌套查询:   select * from bi_BillItem where BillID in (select BillID from bi_Bill where IsArchived='0' and ...
  • mysql多个嵌套查询

    千次阅读 2019-03-06 16:33:13
    MySQL 中多个Left join 子查询 好久没写sql了,今天突然接到产品的需求,要拉取线上数据一个文章的统计,我心里就万马奔腾…TM,不是有前端埋点和事件埋点。。。 简单的联表查询 SELECT a.id, a.thumbNail, a. ...
  • SQL嵌套语句执行顺序

    千次阅读 多人点赞 2016-04-09 18:27:57
    分析器会先看语句的第一词, 当它发现第一词是SELECT关键字时候, 他会跳到FROM关键字, 然后通过FROM关键字找到表名并把表装入内存. 接着是找到WHERE关键字, 如果找到则返回到SELECT找字段解析, 如果找到WHERE,...
  • 4.1、查询的类型 declare @value as int set @value = 50 select 'age:'as age,2008 years,@valueas va --这种查询时跟表没有关系的 select 'age:'as age,2008 years,@valueas vafrom student --这种查询涉及...
  • sql查询原理和Select执行顺序 一 sql语句的执行步骤  1)语法分析,分析语句的语法是否符合规范,衡量语句中各表达式的意义。  2) 语义分析,检查语句中涉及的所有数据库对象是否存在,且用户有相应的权限。  3...
  • sql查询 嵌套SELECT语句

    千次阅读 2012-10-28 22:27:56
    sql查询 嵌套SELECT语句  嵌套SELECT语句也叫子查询,一 SELECT 语句的查询结果能够作为另一语句的输入值。子查询不但能够出现在Where子句中,也能够出现在from子句中,作为一临时表使用,也能够出现在...
  • # 1. 一下是我的实体类 ...2.一个resultMap中可以多个association么?这种多对多的关系该怎么处理? 3.一个resultMap可以多个collection么?怎么写sql语句呢? 求大神么解答,在线等,先谢过!
  • SQL 嵌套查询问题

    千次阅读 2013-03-20 21:44:48
    今天纠结了好长时间 , 才解决的一问题 , 问题原因是 求得条数据中, 时间和日期是最大的一条数据 先前是以为只要msx 函数就可以解决的 , Select * from tableName where date=(select max(date) from ...
  • ibatis 中动态SQL查询和动态标签嵌套的使用

    万次阅读 多人点赞 2016-05-09 17:21:57
    ibatis 动态查询 对于从事 Java EE 的开发人员来说,iBatis 是一再熟悉不过的持久层框架了,在 Hibernate、JPA 这样的一站式对象 / 关系映射(O/R Mapping)解决方案盛行之前,iBaits 基本是持久层框架的不二选择...
  • SQL进行嵌套查询

    千次阅读 2005-12-20 23:38:00
     子查询可以嵌套多层,子查询操作的数据表可以是父查询不操作的数据表。子查询能有order by分组语句。4.4.1 简单嵌套查询 在【命令编辑区】执行下列语句。 ――――――――――――――――――――――――...
  • Oracle 11g——SQL 嵌套查询

    千次阅读 2017-08-21 16:20:33
    前言在前面2章节,我们比较详细的介绍了一些SQL语句的基本用法,但是在我们实际的项目开发中,其实很时候这些基本的用法远远能满足我们项目的需求,这时候就需要我们的嵌套查询。在SQL语句中,一select-...
  • T-SQL查询语句(二):嵌套查询

    千次阅读 2008-02-14 15:17:00
    select...From...Where查询语句块可以嵌套在另一select...From...Where查询块的Where子句中,称为嵌套查询。外层查询称为父查询,主查询。内层查询称为子查询,从查询。子查询可以嵌套多层,子查询查询到的...
  • PL/SQL 联合数组与嵌套

    万次阅读 2012-03-20 10:32:58
    通常情况下,在PL/SQL中,处理单行单列的数据可以使用标量变量,而处理单行列的数据则使用PL/SQL记录是不错的选择。单列多行数据则由联合数组或嵌套表来完成,其特点是类似于单列数据库表。在Oracle 9i 之前称为PL...
  • 用临时表改善嵌套SQL语句的执行速度左直拳 这两天检查一条嵌套SQL语句,发觉非常耗时。形如:SELECT KeyId,COUNT(1) AS Num FROM Table1WHERE 1=1AND CreateDate>=2007-09-21 AND KeyId IN(SELECT KeyId FROM Table...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 97,737
精华内容 39,094
关键字:

多个sql查询不可以嵌套执行