学习目标:
1.理解为什么要用子查询?
2.子查询分类:单行子查询、多行子查询
3.掌握相关子查询分析问题的思路,按照逻辑顺序写SQL
4.在where子句中使用子查询
一、新知学习。
- 相关概念:SQL语句中使用的嵌套查询。
- 单行子查询:查询结果返回单个值。
- 多行子查询:查询结果返回多行值。
- 单行子查询常用于where子句,比较符:> < <= >= != =
示例:1.查询“江汉路”地区的商品信息
错误:
-- 1.查询“江汉路”地区的商品信息
-- 1.2 依据1.1子查询结果作为主查询的条件
SELECT *
FROM product p
WHERE p.areaID =
-- 1.1 子查询“江汉路”地区的areaID
(SELECT a.areaID -- 返回单个值
FROM area a
WHERE a.areaName = '江汉路');
SELECT *
FROM product p
WHERE p.areaID =
-- 1.1 子查询“江汉路”地区的areaID
(SELECT * -- 返回多列值
FROM area a
WHERE a.areaName = '江汉路');
2.查询团购价大于平均团购价的商品信息,要求输出商品标题和团购价
— 分析:2.1 查询平均团购价
— 2.2 主查询团购价大于2.1
SELECT p1.title 商品标题, p1.currentPrice 团购价
FROM product p1
WHERE p1.currentPrice >
(SELECT AVG(p2.currentPrice)
FROM product p2);
3.查询团购价大于“火锅”类最高团购价的商品信息,
要求输出商品标题和商品团购价。
-- 3.3 主查询:在product表中,查询团购价大于3.2子查询结果的商品信息
SELECT p1.title 商品标题, p1.currentPrice 团购价
FROM product p1
WHERE p1.currentPrice >
-- 3.2 子查询:依据3.1在product表中查询最高团购价
(SELECT MAX(p.currentPrice)
FROM product p
WHERE p.categoryID =
-- 3.1 子查询:在category表查询“服装”类categoryID
(SELECT c.categoryID
FROM category c
WHERE c.categoryName = '火锅'));