zoukankan      html  css  js  c++  java
  • Day-10:使用子查询

    1、子查询:嵌套在其他查询中的查询(mysql4.1版本引入子查询,以前版本不支持)

    查询:任何SQL语句都是查询,但此术语一般指select语句。select语句是简单查询,即从单个数据库表中检索数据的单条语句。

    2、利用子查询进行过滤

      例子:列出订购物品RGAN01的所有顾客

      分析:

        (1)检索包含物品BGAN01的所有订单编号

        (2)检索满足前一步列出的订单编号的所有顾客的ID

        (3)检索满足前一步返回所有顾客ID的顾客信息

      上面每一个步骤都可以单独作为一个查询来执行,可以把一条select语句返回的结果用于另一条select语句的where子句。

      也可以使用子查询来把3个查询组合成一条语句。

      步骤(1)查出RGAN01的所有订单编号

    select order_num
    from orderitems

    where prod_id = 'RGAN01';
    /*
    order_num
    20007
    20008
    */

      步骤(2)通过订单编号查出顾客ID

    select cust_id
    from orders
    where order_num in (20007, 20008);
    #where order_num = 20007 or order_num = 20008;
    
    /*
    cust_id
    1000000004
    1000000005
    */

      把步骤1和2结合,第一个子句变为子查询,在select语句中,子查询都是从内向外处理的。

    select cust_id
    from orders
    where order_num in (select order_num
                        from orderitems
                        where prod_id = 'RGAN01');
    
    /*
    cust_id
    1000000004
    1000000005
    */

      步骤(3)通过顾客ID查出顾客信息

    select cust_name, cust_contact
    from customers
    where cust_id in ('1000000004','1000000005');
    
    /*
    cust_name, cust_contact
    Fun4All    Denise L. Stephens
    The Toy Store    Kim Howard
    */

      (1)、(2)和(3)结合

    select cust_name, cust_contact
    from customers
    where cust_id in (select cust_id
                      from orders
                      where order_num in (select order_num
                                          from orderitems
                                          where prod_id = 'RGAN01'));
    
    /*
    cust_name, cust_contact
    Fun4All    Denise L. Stephens
    The Toy Store    Kim Howard
    */

    说明:作为子查询的select语句只能查询单个列。

    3、作为计算字段使用子查询

    查询customers表中每个顾客的订单总数,

      (1)从customers表中查出顾客列表

      (2)统计每个顾客在orders表中的订单数目

    select cust_name,
           cust_state,
           (select count(*)
            from orders
            where orders.cust_id = customers.cust_id) as orders
    from customers
    order by cust_name;
    
    /*
    cust_name cust_state orders
    Fun4All        IN    1
    Fun4All        AZ    1
    Kids Place      OH    0
    The Toy Store     IL    1
    Village Toys      MI    2
    */
  • 相关阅读:
    C# 之 获取文件名及拓展名
    C# 之 日常积累(二)
    C# 之 OpenFileDialog的使用
    Linux系统中,main函数的执行过程
    linux线程的实现
    linux内核--进程与线程
    内核线程和进程的区别
    软中断和硬中断
    Linux 2.4.x内核软中断机制
    几种USB控制器类型:OHCI,UHCI,EHCI,xHCI
  • 原文地址:https://www.cnblogs.com/jp-mao/p/6574411.html
Copyright © 2011-2022 走看看