学习目标:

    1.理解为什么要用子查询?

    2.子查询分类:单行子查询、多行子查询

    3.掌握相关子查询分析问题的思路,按照逻辑顺序写SQL

    4.在where子句中使用子查询

    一、新知学习。

    1. 相关概念:SQL语句中使用的嵌套查询。
    2. 单行子查询:查询结果返回单个值。
    3. 多行子查询:查询结果返回多行值。
    4. 单行子查询常用于where子句,比较符:> < <= >= != =

    示例:1.查询“江汉路”地区的商品信息

    1. -- 1.查询“江汉路”地区的商品信息
    2. -- 1.2 依据1.1子查询结果作为主查询的条件
    3. SELECT *
    4. FROM product p
    5. WHERE p.areaID =
    6. -- 1.1 子查询“江汉路”地区的areaID
    7. (SELECT a.areaID -- 返回单个值
    8. FROM area a
    9. WHERE a.areaName = '江汉路');
    错误:
    1. SELECT *
    2. FROM product p
    3. WHERE p.areaID =
    4. -- 1.1 子查询“江汉路”地区的areaID
    5. (SELECT * -- 返回多列值
    6. FROM area a
    7. WHERE a.areaName = '江汉路');

    2.查询团购价大于平均团购价的商品信息,要求输出商品标题和团购价

    — 分析:2.1 查询平均团购价

    — 2.2 主查询团购价大于2.1

    1. SELECT p1.title 商品标题, p1.currentPrice 团购价
    2. FROM product p1
    3. WHERE p1.currentPrice >
    4. (SELECT AVG(p2.currentPrice)
    5. FROM product p2);

    3.1 非相关子查询一 - 图1

    3.查询团购价大于“火锅”类最高团购价的商品信息,

    要求输出商品标题和商品团购价。

    1. -- 3.3 主查询:在product表中,查询团购价大于3.2子查询结果的商品信息
    2. SELECT p1.title 商品标题, p1.currentPrice 团购价
    3. FROM product p1
    4. WHERE p1.currentPrice >
    5. -- 3.2 子查询:依据3.1product表中查询最高团购价
    6. (SELECT MAX(p.currentPrice)
    7. FROM product p
    8. WHERE p.categoryID =
    9. -- 3.1 子查询:在category表查询“服装”类categoryID
    10. (SELECT c.categoryID
    11. FROM category c
    12. WHERE c.categoryName = '火锅'));

    3.1 非相关子查询一 - 图2