zoukankan      html  css  js  c++  java
  • 前端学数据库之子查询

      查询数据库,当查询条件比较复杂时,常常需要用到子查询。子查询(Subquery)是指出现在其他SQL语句内的SELECT子句。本文将详细介绍子查询

    定义

      子查询(Subquery)是指出现在其他SQL语句内的SELECT子句

    SELECT * FROM t1 WHERE col1 = (SELECT col2 FROM t2);

      其中,SELECT * FROM t1,称为外层查询(Outer Query/Outer Statement),SELECT col2 FROM t2,称为子查询(SubQuery)

      在使用子查询时,需要注意的是

      1、子查询指嵌套在查询内部,且必须始终出现在圆括号内

      2、子查询语句中可以包含多个关键字或条件,如DISTINCT、GROUP BY、ORDER BY、LIMIT、函数等

      3、子查询的外层查询可以是:SELECT、INSERT、UPDATE、SET或DO

      4、子查询可以返回值:标量、一行、一列或者子查询

    比较运算符

      使用比较符是其中一类子查询

    operand comparison_operator subquery

      比较运算符包括=、!=、<>、<=> 、>、<、>=、<=

    数据准备

      下载数据文件,建立数据库,数据表,并存入相应记录

      求所有电脑产品的平均价格,并且保留两位小数,AVG、MAX、MIN、COUNT、SUM为聚合函数

      [注意]AVG()是一个用来求平均值的函数

      查询所有价格大于平均价格的商品

    SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price > 5391.30;

      通过子查询来实现相同的需求

    SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price > (SELECT ROUND(AVG(goods_price),2) FROM tdb_goods);

      查询类型为“超记本”的商品价格

      查询价格大于或等于"超级本"价格的商品

      系统提示错误,子查询返回的多于一行,因为子查询有3条结果,SELECT无法知道要大于子查询中3条结果中的哪一个。所以,这时就需要用到接下来要介绍的修饰关键字

    修饰关键字

      修饰关键字包括ANY、some、all三个,如果子查询返回多个值时,可以使用它们

    operand comparison_operator  ANY(子查询)
    operand comparison_operator  SOME(子查询)
    operand comparison_operator  ALL(子查询)

    情况处理

      1、运算符为>或>=,使用ANY关键字时,表示大于子查询结果中的最小值

    SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price >  ANY (SELECT goods_price FROM tdb_goods WHERE goods_cate = '超级本');

      由结果可知,返回的都大于4299的值,即最小值

      2、运算符为>或>=,使用ALL关键字时,表示大于子查询结果中的最大值

      3、运算符为<或<=,使用ANY或SOME关键字时,表示小于子查询结果中的最大值;使用ALL关键字时,表示小于子查询结果中的最小值

      4、运算符为=,使用ANY或SOME关键字时,表示等于子查询结果中的任意值;使用ALL关键字时,则返回空

    [NOT]IN

    operand comparison_operator [NOT] IN (subquery)

      第二种子查询是由IN 或 NOT IN引发的子查询,与比较运算符使用的方法基本相同 

    其中,= ANY 运算符与 IN 等效,!= ALL或 <> ALL运算符与 NOT IN 等效

    [NOT] EXISTS

      第三种子查询是由EXISTS 或 NOT EXISTS引发的子查询。如果子查询返回任何行,EXISTS将返回TRUE;否则返回FALSE

    存储查询结果

      我们可以把查询结果统一存储到一个新的数据表中,而不需要一条一条地录入

      下面,先创建一个“商品分类”空表

       然后,查询tdb_goods表的所有记录,并且按"类别"分组

      将分组结果写入到“商品分类”数据表中

    INSERT [INTO] tbl_name [(col_name),...)] SELECT...;
    -转载
  • 相关阅读:
    Bit Manipulation
    218. The Skyline Problem
    Template : Two Pointers & Hash -> String process
    239. Sliding Window Maximum
    159. Longest Substring with At Most Two Distinct Characters
    3. Longest Substring Without Repeating Characters
    137. Single Number II
    142. Linked List Cycle II
    41. First Missing Positive
    260. Single Number III
  • 原文地址:https://www.cnblogs.com/wenJiaQi/p/6286633.html
Copyright © 2011-2022 走看看