数据分析之SQL子查询

作者: 数据蛙datafrog | 来源:发表于2018-12-20 23:38 被阅读10次

文章阅读路线:

  • SQL子查询概念
  • 独立子查询实例
  • 相关子查询实例
  • SQL子查询常见玩伴
1.SQL子查询概念

子查询,简单的说就是把一个查询的结果在另一个查询中使用就叫子查询。
子查询基本分类:

  • 独立子查询
    就是子查询可以独立运行,与外层不存在任何联系的
  • 相关子查询
    就是子查询中引用了父查询中的结果;父查询进行一次,子查询才进行一次

下面各种SQL查询所用的数据集来自自行车连锁店数据

2.独立子查询实例

[业务需求1] 查找位于纽约客户的销售订单:

SELECT
    order_id,
    order_date,
    customer_id
FROM
    sales.orders
WHERE
    customer_id IN (       ---括号中就是子查询,并不受外部的影响,可以直接运行
        SELECT
            customer_id
        FROM
            sales.customers
        WHERE
            city = 'New York'
    )
ORDER BY
    order_date DESC;

展示结果如下:


3.SQL 相关子查询实例

[业务需求2]查询每个订单中的最高价格(一次订单中一般是不止一件商品,求订单中商品的最高价格)

SELECT
    order_id,
    order_date,
    (
        SELECT
            MAX (list_price)
        FROM
            sales.order_items i
        WHERE
            i.order_id = o.order_id  ##这里就是引用了外部结果
    ) AS max_list_price
FROM
    sales.orders o
order by order_date desc;

来看下结果

4.SQL子查询常见玩伴

SQL 子查询常和下面的运算一起使用:

  • IN or NOT IN
  • ANY or ALL
  • EXISTS or NOT EXISTS
4.1 子查询和 IN 运算符一起使用

与IN运算符一起使用的子查询,要返回一个或多个值,子查询返回值后,外部查询将使用它们

[业务需求3]:找到所有的山地车和陆地车产品名字

SELECT
    product_id,
    product_name
FROM
    production.products
WHERE
    category_id IN (
        SELECT
            category_id
        FROM
            production.categories
        WHERE
            category_name = 'Mountain Bikes'
        OR category_name = 'Road Bikes'
    );

查询结果如下:


4.2 SQL子查询和ANY运算符一起用

如果子查询中有值返回的话,ANY运算符就会返回True
[业务需求4]:查询大于或者等于任意一个品牌产品平均价格的产品

SELECT
    product_name,
    list_price
FROM
    production.products
WHERE
    list_price >= ANY (
        SELECT
            AVG (list_price)
        FROM
            production.products
        GROUP BY
            brand_id
    )

查询结果如下:


4.3 SQL 子查询和ALL运算符一起用

如果子查询中有值返回的话,ALL运算符就会返回True
[业务需求5]:查询大于或者等于任意一个品牌产品平均价格的产品

SELECT
    product_name,
    list_price
FROM
    production.products
WHERE
    list_price >= ANY (
        SELECT
            AVG (list_price)
        FROM
            production.products
        GROUP BY
            brand_id
    )

查询结果如下:


4.4 SQL子查询和EXISTS或者 NOT EXISTS 运算符一起用

如果子查询有结果返回,EXISTS 运算符返回 True,而 NOT EXISTS 则会是相反。

[业务需求6]查询2017年购买商品的顾客

    SELECT
        customer_id,
        first_name,
        last_name,
        city
    FROM
        sales.customers c
    WHERE
        EXISTS (
            SELECT
                customer_id
            FROM
                sales.orders o
            WHERE
                o.customer_id = c.customer_id
            AND YEAR (order_date) = 2017
        )
    ORDER BY
        first_name,
        last_name;

查询结果如下:


[业务需求6]查询没有购买商品的用户
SELECT
    customer_id,
    first_name,
    last_name,
    city
FROM
    sales.customers c
WHERE
    NOT EXISTS (
        SELECT
            customer_id
        FROM
            sales.orders o
        WHERE
            o.customer_id = c.customer_id
        AND YEAR (order_date) = 2017
    )
ORDER BY
    first_name,
    last_name;

查询结果如下:


参考链接:
SQL Server Subquery

相关文章

  • 关系数据库SQL之高级数据查询:去重复、组合查询、连接查询、虚拟

    前言 接上一篇关系数据库SQL之基本数据查询:子查询、分组查询、模糊查询,主要是关系型数据库基本数据查询。包括子查...

  • 数据分析之SQL子查询

    文章阅读路线: SQL子查询概念 独立子查询实例 相关子查询实例 SQL子查询常见玩伴 1.SQL子查询概念 子查...

  • SQL数据查询

    关系数据库SQL之基本数据查询:子查询、分组查询、模糊查询 字数1843阅读1707评论10喜欢115 前言 上一...

  • 子查询和组合查询

    子查询 SELECT 语句是 SQL 的查询。 假如要从多个表中过滤数据,SQL 还允许创建子查询(subquer...

  • 数据分析2-SQL入门

    SQL是结构化查询语言,在数据分析工作中,可用于提取数据和查询数据。 1.预备知识 1.1什么是SQL 结构化查询...

  • SQL查询语句之子查询1

    【子查询】 1、 子查询的各个使用形式。 2、 分析子查询的主要意义。 实际上,对于整个的SQL语法而言,所有的组...

  • 干货 大数据分析师面试要注意的7点

    SQL查询:JOIN ON、DISTINCT、GROUP BY、ORDER BY等等。从数据库中提取数据是数据分析...

  • 数据库笔记-SQL子查询

    子查询:关联查询和非关联查询 子查询是「查询」中的「查询」,就是「嵌套查询」。 以 NBA 的SQL数据库文件为例...

  • SQL 学习笔记

    SQL基础 参考书籍: 《SQL必知必会》 检索数据 过滤数据 函数 分组数据 子查询 简单联结 法一: 法二: ...

  • 180. 连续出现的数字

    题目描述 编写一个 SQL 查询,查找所有至少连续出现三次的数字。 分析 通过子查询来实现。子查询通过变量构造。子...

网友评论

    本文标题:数据分析之SQL子查询

    本文链接:https://www.haomeiwen.com/subject/tnbrkqtx.html