zoukankan      html  css  js  c++  java
  • SQL---关联子查询(correlated subquery)

    关联子查询和普通子查询的区别在于:1,关联子查询引用了外部查询的列。

                                                                 2,执行顺序不同。对于普通子查询,先执行普通子查询,再执行外层查询;而对于关联子查询,先执行外层查询,然后对所有通过过滤条件的记录执行内层查询。

    语法:

    SELECT column1, column2
    FROM table1 AS outer
    WHERE column1 operator
          (SELECT column1, column2
           FROM table2
           WHERE expr1 = outer.expr2);

    在关联子查询中,对于外部查询返回的每一行数据,内部查询都要执行一次。另外,在关联子查询中是信息流是双向的,外部查询的每行数据传递一个值给子查询,然后子查询为每一行数据执行一次并返回它的记录。然后,外部查询根据返回的记录做出决策。

    关联子查询的用途:

    1,在细分的组内进行比较

    例子:查询各个商品种类中高于该商品种类平均销售价格的商品信息

    SELECT * FROM t_commodity AS t1
    WHERE sell_unit_price > (
     SELECT AVG(sell_unit_price) FROM t_commodity AS t2
     WHERE t1.category = t2.category
    )

    2,和NOT EXISTS配合使用,查询不存在的记录

    例子:查询没有下过订单的所有顾客的信息

    SELECT customer_id, name
    FROM customers
    WHERE NOT EXISTS (
          SELECT *
          FROM orders
          WHERE
          orders.customer_id = customers.customer_id
        )
  • 相关阅读:
    navicat for mysql 10.1.7注册码
    去除GHOST版系统自带的2345流氓软件
    利用EXCEL表实现网页数据采集到MYSQL数据库
    Java开发的一个简单截屏工具
    初学JSP+Servlet常见的错误
    从零单排Linux – 3 – 目录结构
    从零单排Linux – 2 – 目录权限
    从零单排Linux – 1 – 简单命令
    在虚拟机中安装Linux
    随机生成MyEclipse注册码
  • 原文地址:https://www.cnblogs.com/HuZihu/p/12467156.html
Copyright © 2011-2022 走看看