MySQL中的子查询

好用,但慎用,有性能坑、建议用关联查询代替。

本文参考3W学习方法来叙述内容。

一、What

1、什么是子查询?

子查询指将一个查询语句嵌套在另一个查询语句中。该特性从 MySQL 4.1 开始引入。

二、Why

1、子查询可以做什么?

通过子查询可以实现多表查询,可以在 SELECT、UPDATE 和 DELETE 语句中使用,而且可以进行多层嵌套,子查询经常出现在 WHERE 子句中。

三、How

1、子查询在WHERE子句中的语法格式?

WHERE <表达式> <操作符> (子查询)

例如: SELECT * FROM table1 WHERE key1 IN (SELECT key1 FROM table2 WHERE name = 'abc');

其中,操作符可以是 IN、NOT IN、EXISTS、NOT EXISTS 等关键字。

  • IN: 表达式与子查询返回的结果集中的某个值相等时,返回 TRUE,否则返回 FALSE;
  • NOT IN: 表达式与子查询返回的结果集中的某个值相等时,返回 FALSE,否则返回 TRUE;
  • EXISTS: 子查询的结果集不为空,返回 TRUE,否则返回 FALSE;
  • NOT EXISTS: 子查询的结果集为空,返回 TRUE,否则返回 FALSE;

另外,当子查询的返回结果只有一行一列数据时,操作符可以是比较运算符=, >, <, >=, <=, <>,例如:

select * from table1 where key1 = (select key1 from table2 where key2 = '001');

2、子查询在SELECT语句中的语法格式?

SELECT (子查询) FROM 表名;

子查询结果应该为单行单列,可以不指定列别名。

3、子查询在FROM语句中的语法格式?

SELECT * FROM (子查询) AS 表的别名;

必须为子查询结果指定别名,相当于临时表名。

4、mysql中子查询的性能问题?

据说,mysql处理子查询时、会先扫描外查询中的数据集,再处理子查询,外部查询执行一次,子查询就执行一次。所以当使用子查询作为where子句条件时,注意父查询表是否存有大量数据,如果超过百万级,则建议改为关联查询。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值