zoukankan      html  css  js  c++  java
  • 子查询

    1、子查询是指在另一个查询语句中的SELECT子句。

    例句:

    SELECT * FROM t1 WHERE column1 = (SELECT column1 FROM t2);

    其中,SELECT * FROM t1 ...称为Outer Query[外查询](或者Outer Statement),

             SELECT column1 FROM t2 称为Sub Query[子查询]。

    所以,子查询是指嵌套在查询内部,且必须始终出现在圆括号内。而事实上它有可能在子查询内部再嵌套子查询。

    子查询可以包含多个关键字或条件,如DISTINCT,GROUP BY,ORDER BY, LIMIT,函数等。
    子查询的外层查询可以是:SELECT,INSERT,UPDATE,SET或DO.

    子查询可以返回标量、一行、一列或子查询。

    2、使用比较运算符的子查询

    =、>, <, >=, <=, <>, !=, <=>

    operand comparison_operator subquery

    mysql> SELECT AVG(goods_price) FROM tdb_goods; # 求平均值
    +------------------+
    | AVG(goods_price) |
    +------------------+
    | 5636.3636364 |
    +------------------+
    1 row in set (0.01 sec)

    mysql> SELECT ROUND(AVG(goods_price), 2) FROM tdb_goods; ## 求平均值,并保留两位小数
    +----------------------------+
    | ROUND(AVG(goods_price), 2) |
    +----------------------------+
    | 5636.36 |
    +----------------------------+
    1 row in set (0.02 sec)

    mysql> SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price
    >= 5636.36;  #查询
    +----------+----------------------------------+-------------+
    | goods_id | goods_name | goods_price |
    +----------+----------------------------------+-------------+
    | 3 | G150TH 15.6英寸游戏本 | 8499.000 |
    | 7 | SVP13226SCB 13.3英寸触控超极本 | 7999.000 |
    | 13 | iMac ME086CH/A 21.5英寸一体电脑 | 9188.000 |
    | 17 | Mac Pro MD878CH/A 专业级台式电脑 | 28888.000 |
    | 18 | HMZ-T3W 头戴显示设备 | 6999.000 |
    | 20 | X3250 M4机架式服务器 2583i14 | 6888.000 |
    | 21 | HMZ-T3W 头戴显示设备 | 6999.000 |
    +----------+----------------------------------+-------------+

    mysql> SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price
    >= (SELECT ROUND(AVG(GOODS_PRICE), 2) FROM tdb_goods); #通过子查询实现
    +----------+----------------------------------+-------------+
    | goods_id | goods_name | goods_price |
    +----------+----------------------------------+-------------+
    | 3 | G150TH 15.6英寸游戏本 | 8499.000 |
    | 7 | SVP13226SCB 13.3英寸触控超极本 | 7999.000 |
    | 13 | iMac ME086CH/A 21.5英寸一体电脑 | 9188.000 |
    | 17 | Mac Pro MD878CH/A 专业级台式电脑 | 28888.000 |
    | 18 | HMZ-T3W 头戴显示设备 | 6999.000 |
    | 20 | X3250 M4机架式服务器 2583i14 | 6888.000 |
    | 21 | HMZ-T3W 头戴显示设备 | 6999.000 |
    +----------+----------------------------------+-------------+

    mysql> SELECT goods_price FROM tdb_goods WHERE goods_cate = '超级本';
    +-------------+
    | goods_price |
    +-------------+
    | 4999.000 |
    | 4299.000 |
    | 7999.000 |
    +-------------+
    3 rows in set (0.00 sec)

    mysql> SELECT * FROM tdb_goods WHERE goods_cate = '超级本'G;
    *************************** 1. row ***************************
    goods_id: 5
    goods_name: X240(20ALA0EYCD) 12.5英寸超极本
    goods_cate: 超级本
    brand_name: 联想
    goods_price: 4999.000
    is_show: 1
    is_saleoff: 0
    *************************** 2. row ***************************
    goods_id: 6
    goods_name: U330P 13.3英寸超极本
    goods_cate: 超级本
    brand_name: 联想
    goods_price: 4299.000
    is_show: 1
    is_saleoff: 0
    *************************** 3. row ***************************
    goods_id: 7
    goods_name: SVP13226SCB 13.3英寸触控超极本
    goods_cate: 超级本
    brand_name: 索尼
    goods_price: 7999.000
    is_show: 1
    is_saleoff: 0

    mysql> SELECT goods_price FROM tdb_goods WHERE goods_cate = '超级本';
    +-------------+
    | goods_price |
    +-------------+
    | 4999.000 |
    | 4299.000 |
    | 7999.000 |
    +-------------+

    mysql> SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price >
    (SELECT goods_price FROM tdb_goods WHERE goods_cate = '超极本');
    Empty set (0.00 sec)

     

    mysql> SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price >

    ANY (SELECT goods_price FROM tdb_goods WHERE goods_cate = '超极本');
    Empty set (0.00 sec)  
    #大于any,大于其中任何一个都可以

    3、使用[NOT] IN 的子查询

    ANY运算符与IN等效,

    !=ALL或<>ALL运算符与NOT IN 等效

    mysql> SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price !
    = ALL (SELECT goods_price FROM tdb_goods WHERE goods_cate = '超极本');

    其余19种记录

    4、使用[NOT] EXISTS 的子查询(很少用)

    如果子查询返回任何行,EXISTS将返回TRUE,否则返回FALSE.

  • 相关阅读:
    FJNU 1151 Fat Brother And Geometry(胖哥与几何)
    FJNU 1157 Fat Brother’s ruozhi magic(胖哥的弱智术)
    FJNU 1159 Fat Brother’s new way(胖哥的新姿势)
    HDU 3549 Flow Problem(最大流)
    HDU 1005 Number Sequence(数列)
    Tickets(基础DP)
    免费馅饼(基础DP)
    Super Jumping! Jumping! Jumping!(基础DP)
    Ignatius and the Princess IV(基础DP)
    Keywords Search(AC自动机)
  • 原文地址:https://www.cnblogs.com/toudoubao/p/6623009.html
Copyright © 2011-2022 走看看