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

    子查询,是指在查询语句中嵌套查询语句。(这里指的是普通子查询,而非关联子查询)

    以下是子查询出现的几种形式:

    1,在WHERE子句中的子查询

    这种是最常见的普通子查询。如果子查询返回的结果只有1个,那么就称为标量子查询。例如:

    SELECT *
    FROM sales_agents
    WHERE agency_fee > 
    (SELECT AVG(agency_fee)
     FROM sales_agents);

    如果子查询返回的结果不止1个,那么可以用ALL,ANY关键字,或者用IN,NOT IN,EXISTS,NOT EXISTS关键字进行筛选。例如:

    SELECT AVG(agency_fee)
    FROM sales_agents
    WHERE id NOT IN (SELECT id
                     FROM managers)
    SELECT project_id
    FROM project 
    GROUP BY project_id
    HAVING COUNT(employee_id) >= ALL(SELECT COUNT(employee_id) FROM project GROUP BY project_id)

    2,在SELECT子句中的子查询

    主要用于填充列。

    SELECT 
         name,
         price,
         (SELECT AVG(price) FROM paintings) AS avg_price
    FROM paintings

    需要注意的是,必须给在SELECT子句中的子查询取别名。

    3,在FROM子句中的子查询

    也就是把子查询的结果当成一张表,然后在这张新表的基础上再进行后续操作。例如:

    SELECT budget
    FROM department,
         (SELECT max(budget) as val
          FROM department) AS max_budget
    WHERE department.budget = max_budget.val

    在这种情况下,更好的做法是把子查询做成一个视图(view),这样比较清晰,还可以复用,修改起来也方便。

  • 相关阅读:
    Bitstream or PCM?
    centos7安装Redis-3.2.8
    【生肉】【不义联盟
    ES6中Map数据结构学习笔记
    机器学习基石入门
    2019/5/9 长难句
    文件遍历选取脚本
    [JS奇怪的世界]No.55 危險小叮嚀:陣列與for in
    OpenGL Panorama Player
    吴裕雄--天生自然MySQL学习笔记:MySQL 连接
  • 原文地址:https://www.cnblogs.com/HuZihu/p/14454791.html
Copyright © 2011-2022 走看看