• 第11课 使用子查询


    第11课 使用子查询

    11.1 子查询

    SQL还允许创建子查询(subquery),即嵌套在其他查询中的查询。

    11.2 利用子查询进行过滤

    SELECT cust_id
    FROM Orders
    WHERE order_num IN (SELECT order_num
                        FROM OrderItems
                        WHERE prod_id = 'RGAN01');
    

    在SELECT语句中,子查询总是从内向外处理。在处理上面的SELECT语句时,DBMS实际上执行了两个操作。

    首先,它执行下面的查询:

    SELECT order_num FROM orderitems WHERE prod_id='RGAN01'
    

    此查询返回两个订单号:20007和20008。然后,这两个值以IN操作符要求的逗号分隔的格式传递给外部查询的WHERE子句。外部查询变成:

    SELECT cust_id FROM orders WHERE order_num IN (20007,20008)
    

    警告:只能是单列
    作为子查询的SELECT语句只能查询单个列。企图检索多个列将返回错误。

    11.3 作为计算字段使用子查询

    使用子查询的另一方法是创建计算字段。

    SELECT cust_name, 
           cust_state,
           (SELECT COUNT(*) 
            FROM Orders 
            WHERE Orders.cust_id = Customers.cust_id) AS orders
    FROM Customers 
    ORDER BY cust_name; 
    

    用一个句点分隔表名和列名,这种语法必须在有可能混淆列名时使用。

    警告:完全限定列名
    有时候,由于出现冲突列名而导致的歧义性,会引起DBMS抛出错误信息。例如,WHERE或ORDER BY子句指定的某个列名可能会出现在多个表中。好的做法是,如果在SELECT语句中操作多个表,就应使用完全限定列名来避免歧义。

    11.4 小结

    子查询常用于WHERE子句的IN操作符中,以及用来填充计算列。

  • 相关阅读:
    Activity的启动模式
    Activity的生命周期
    C之静态内存和动态内存
    C之指针的加法
    C之函数返回一个以上的值
    C之交换数据案例
    C之自定义类型
    C之枚举
    联合体
    C之结构体
  • 原文地址:https://www.cnblogs.com/zhangsonghui/p/13210891.html
Copyright © 2020-2023  润新知