MySQL子查询

子查询

  • 子查询是指在另一个查询语句中的SELECT子句。
    例句:SELECT * FROM t1 WHERE col1 = (SELECT col2 FROM t2);
    其中,SELECT * FROM t1,称为Outer Query或Outer Statement)[外查询],
    还有,SELECT col2 FROM t2称为Sub Query[子查询]。

  • 子查询是嵌套在外查询内部,且必须始终出现在圆括号之间。

  • 子查询有可能在子查询内部再嵌套子查询。

  • 子查询可以包含多个关键字或条件,如DISTINCT、GROUP BY、ORDER BY、LIMIT、函数等。

  • 子查询的外层查询可以是:SELECT,INSERT,UPDATE,SET或DO。

子查询返回值

  • 子查询可以返回标量、一行、一列或子查询。

使用比较运算符的子查询

  • 使用比较运算符的子查询:=、>、<、>=、<=、<>、!=、<=>
  • 语法结构:operand comparison_operator subquery

示例:

  • 求所有电脑产品的平均价格,并且保留两位小数,AVG、MAX、MIN、COUNT、SUM为聚合函数:
    这里写图片描述

  • 查询所有价格大于平均价格的商品,并且按价格降序排序:
    这里写图片描述

  • 使用子查询来实现:
    这里写图片描述

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

语法结构:

  • operand comparison_operator ANY (subquery)
  • operand comparison_operator SOME (subquery)
  • operand comparison_operator ALL (subquery)

这里写图片描述

示例:
这里写图片描述

使用[NOT] IN的子查询

  • 语法结构:operand comparison_operator ANY (subquery)
  • =ANY 或 =SOME 等价于 IN
  • !=ANY 或 <>ALL 等价于 NOT IN

使用[NOT] EXISTS的子查询

  • 如果子查询返回任何行,EXISTS将返回TRUE,否则为FALSE。
  • 该过程相对而言用的比较少。

使用INSERT…SELECT插入记录

  • 将查询结果写入数据表:
INSERT [INTO] tbl_name [(col_name,...)] SELECT...

示例:

  • 查询tdb_goods表的所有记录,并且按”类别”分组:
    这里写图片描述

  • 将分组结果写入到tdb_goods_cates数据表:
    这里写图片描述

多表更新

UPDATE table_reference 
SET col_name1={expr1|DEFAULT}
[,col_name2={expr2|DEFAULT}]...
[WHERE where_condition];

示例:

  • 通过tdb_goods_cates数据表来更新tdb_goods表:
    这里写图片描述

多表更新之一步到位(CREATE…SELECT)

  • 创建数据表同时将查询结果写入到数据表:
CREATE TABLE [IF NOT EXISTS] tbl_name
[(create_definition,...)]
select_statement

示例:

  • 通过CREATE…SELECT来创建数据表并且同时写入记录:
    这里写图片描述

  • 通过tdb_goods_brands数据表来更新tdb_goods数据表(错误示范):
    这里写图片描述

  • 通过tdb_goods_brands数据表来更新tdb_goods数据表(正确示范):
    这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值