MySQL学习笔记(17)——子查询

本文深入讲解了SQL子查询的基本概念及使用方法,包括不同类型的比较运算符如何与子查询结合使用,以及如何通过子查询进行复杂的条件筛选。还介绍了如何使用ANY、SOME和ALL关键字来增强查询的灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

子查询

子查询(Subquery)是指出现在其他SQL语句内的LELECT子句。

例如:
SELECT * FROM t1 WHERE col1 = (SELECT col2 FROM t2);
其中SELECT * FROM t1,称为Outer Query/Outer Statement
SELECT * FROM t2,称为SubQuery。

  • 子查询指嵌套在查询内部,且必须始终出现在圆括号内。
  • 子查询可以包含多个关键字或条件,
    如DISTINCT、GROUP BY、ORDER BY、LIMIT,函数等。
  • 子查询的外层查询可以是:SELECT,INSERT,UPDATE,SET或DO。
  • 子查询可以返回标量、一行、一列或子查询

使用比较运算符的子查询

运算符:
=、>、<、>=、<=、<>、!=、<=>

语法结构:
operand comparison_operator subquery

demo:
查询goods_price平均值,并且使用ROUND,四舍五入,保留两位小数
SELECT ROUND(AVG(goods_price),2) FROM tdb_goods;
利用上句,用子查询方法写出大于平均数的物品信息。
SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price>(SELECT ROUND(AVG(goods_price),2) FROM tdb_goods);
如图:
avg
子查询

用ANY、SOME或ALL修饰的比较运算符

any some all
demo:
查询goods_cate=’超级本’的goods_price
SELECT goods_price FROM tdb_goods WHERE goods_cate=’超级本’;
利用上句,用子查询加上ANY查询出,比上句的goods_price的其中一个(4299.000)大的货物信息
SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price>ANY (SELECT goods_price FROM tdb_goods WHERE goods_cate=’超级本’);


使用[NOT] IN的子查询

语法结构:
operand comparison_Ooperator [NOT] IN (subquery)

  • =ANY运算符与IN等效
  • !=ALL或<>ALL运算符与NOT IN 等效
    demo:
    NOT IN:
    SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price NOT IN (SELECT goods_price FROM tdb_goods WHERE goods_cate=’超级本’);
    !=ALL:
    SELECT goods_id,goods_name,goods_price FROM tdb_goods WHERE goods_price !=ALL (SELECT goods_price FROM tdb_goods WHERE goods_cate=’超级本’);
    两者返回的结果一致:
    NOT IN
    !=ALL

使用[NOT] EXISTS的子查询

如果子查询返回任何行,EXISTS将返回TRUE;否则为FALSE。

demo:
如果表tdb_goods不为空,那么把goods_id,goods_name全部查出来
SELECT goods_id AS ID,goods_name AS CATE FROM tdb_goods WHERE EXISTS (SELECT * FROM tdb_goods);
exists

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人生莫如饥荒

如果对您有帮助,也可以给点赏钱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值