子查询基本含义,就是在一个查询语句(select语句)中的内部,某些位置,又出现的“查询语句”。本文主要和大家分享mysql子查询简单介绍,希望能帮助到大家。
例: 
修改后: 
子查询是为主查询服务的
都是子查询获得一定的结果数据之后,才去执行主查询;
在形式上,可以有如下表达:
selelct 字段或表达式或子查询 [as 别名] from 表名或链接结果或子查询 where 字段或表达式或子查询的条件判断
子查询,按位置(场合)分:
| 类型 | 形式 |
|---|---|
| 作为主查询的结果数据 | select c1,(select f1 from tab2) as f11 from tab1; #这里子查询应该只有一个数据(一行一列,标量子查询) |
| 作为主查询的条件数据 | select c1 from tab1 where c1 in (select f1 from tab2); #这里子查询可以是多个数据(多行一列,列子查询) |
| 作为主查询的来源数据 | select c1 from (select f1 as c1, f2 from tab2) as t2; #这里子查询可以是任意查询结果(表子查询) |
常见子查询
形式:
操作数 比较运算符 (标量子查询);
说明:
操作数,其实就是比较运算符的2个数据之一而已,通常就是一个字段名;
select .... from XXX where id > 5;
例:
找出最高价的商品;
select * from product where price = (select max(price) from product );
以前用的in的用法:
XX in (值1,值2,值3,....);
则in子查询为:
XX in (列子查询)
例:
找出所有类别名称中带“电”这个字的所有商品;
select * from product where protype_id in( select protype_id from product_type where protype_name like ‘%电%’ );
形式:
操作数 比较运算符 any (列子查询);
含义:
当某个操作数(字段) 对于该列子查询的其中任意一个值,满足该比较运算符,则就算是满足了条件;
例:
select * from tab1 where id > any (select f1 from tab2);
形式:
操作数 比较运算符 all (列子查询);
含义:
当某个操作数(字段) 对于该列子查询的所有数据值,都满足该比较运算符,才算满足了条件;
例:
select * from tab2 where f1 > all ( select id from tab1 );
一句话:some是any的同义词。
形式:
where exists( 子查询 )
含义:
该子查询如果“有数据”,则exists的结果是true,否则就是false
说明:
所以:
此隐式连接方式,通常就体现在子查询中的where条件语句中,使用了主查询表中的数据(字段);
例:
查询商品表中其类别名称中带“电”这个字的所有商品; 
结果就: 
注意:
- 这种子查询语句,没法“独立存在(独立运行)”,而是必须跟主查询一起使用;
- 其他子查询,是可以独立运行的,而且会得到一个运行的结果。
- 该子查询中的条件,应该设定为跟主查询的某个字段有一定的关联性判断,通常该判断就是这两个表的“本来该有的连接条件”
最后一个结论:
相关推荐:
MySQL子查询的详细介绍
什么是mysql子查询?如何利用子查询进行过滤?
MySQL子查询的优化
