• MySQL基础之使用子查询


    子查询

    SELECT语句是SQL的查询语句, 目前我们所看到的SELECT语句都是简单查询, 即从单个数据库表中检索数据的单条语句。

    任何SQL语句都是查询。但查询一般指的都是SELECT语句

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

    利用子查询进行过滤

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

    MariaDB [crashcourse]> 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='TNT2'));
    +----------------+--------------+
    | cust_name      | cust_contact |
    +----------------+--------------+
    | Coyote Inc.    | Y Lee        |
    | Yosemite Place | Y Sam        |
    +----------------+--------------+
    2 rows in set (0.001 sec)
    
    MariaDB [crashcourse]> 

    在WHERE中子句中使用子查询能够编写出功能强大并且灵活的SQL语句。对于能嵌套的子查询的数目没有限制, 不过在实际使用时由于性能的限制, 不能嵌套太多的查询。

    在WHERE子句中使用子查询, 应该保证SELECT语句具有WHERE子句相同数目的列, 通常子查询将返回单个列并且与单个列匹配, 但如果需要时也可以使用多个列。

    使用子查询并不总是执行这种类型的数据检索的最有效的方法, 应该它的性能较低

    作为计算字段使用子查询

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

    MariaDB [crashcourse]> 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 |
    +----------------+------------+--------+
    | Coyote Inc.    | MI         |      2 |
    | E Fudd         | IL         |      1 |
    | Mouse House    | OH         |      0 |
    | Wascals        | IN         |      1 |
    | Yosemite Place | AZ         |      1 |
    +----------------+------------+--------+
    5 rows in set (0.003 sec)
    
    MariaDB [crashcourse]> 

    子查询中的WHERE子句与前面使用的WHERE子句稍有不同, 因为它使用了完全限定列名。如果不使用完全限定列名那么会产生歧义, 从而导致结果错误。

    虽然子查询在构造这种SELECT语句时极有用, 但必须注意限制有歧义性的列名。

  • 相关阅读:
    MapXtreme 2005学习(5):总结查找图元的三种方法
    MapXtreme 2005学习(1):创建临时图层
    MapXtreme 2005学习(2):向图层中添加点
    MapXtreme 2005学习(7):Web页面中实现鼠标中键缩放
    MapXtreme 2005学习(3):向图层中添加线段
    MapXtreme 2005学习(4):添加标注图层
    MapXtreme 2005学习(6):两种方法实现动态轨迹
    JavaScript使用技巧精萃
    C#注释语法
    MapXtreme 2005学习(8):实现手动画线
  • 原文地址:https://www.cnblogs.com/featherwit/p/13374643.html
Copyright © 2020-2023  润新知