zoukankan      html  css  js  c++  java
  • 第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操作符中,以及用来填充计算列。

  • 相关阅读:
    Halcon HWindowControl 控件中图像的缩放与移动
    OpenCV cv::mean()函数详解
    OpenCV 霍夫变换(Hough Transform)
    OpenCV 图像分割
    OpenCV 使用ROI进行图像切割
    OpenCV 轮廓查找与绘制-最小外接矩形
    OpenCV 提取轮廓的凸包、外包矩形、最小外包矩形、最小外包圆
    KubeDL 加入 CNCF Sandbox,加速 AI 产业云原生化
    DataWorks 功能实践速览
    coredump 瘦身风云
  • 原文地址:https://www.cnblogs.com/zhangsonghui/p/13210891.html
Copyright © 2011-2022 走看看