mysql子查询容易介绍
发表时间:2023-07-13 来源:明辉站整理相关软件相关文章人气:
[摘要]子查询基本含义,就是在一个查询语句(select语句)中的内部,某些位置,又出现的“查询语句”。本文主要和大家分享mysql子查询简单介绍,希望能帮助到大家。例: 修改后: 如果将该“select ...
子查询基本含义,就是在一个查询语句(select语句)中的内部,某些位置,又出现的“查询语句”。本文主要和大家分享mysql子查询简单介绍,希望能帮助到大家。
例:
修改后:
如果将该“select 5000
”的子查询语句,替换为“select出来所有商品的平均价”,就具有了现实含义。
在形式上,可以有如下表达:
即可以在这几个位置出现子查询(其中having其实也可以,因为它跟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; #这里子查询可以是任意查询结果(表子查询) |
常见子查询
比较运算符中的子查询
形式:
说明:
select .... from XXX where id > 5;
例:
select * from product where price = (select max(price) from product );
使用in的子查询
XX in (值1,值2,值3,....);
XX in (列子查询)
例:
select * from product where protype_id in(
select protype_id from product_type where protype_name like ‘%电%’
);
使用any的子查询
形式:
操作数 比较运算符 any (列子查询);
含义:
select * from tab1 where id > any (select f1 from tab2);
使用all的子查询:
形式:
操作数 比较运算符 all (列子查询);
含义:
例:
select * from tab2 where f1 > all ( select id from tab1 );
使用some的子查询
使用exists的查询
形式:
where exists( 子查询 )
含义:
说明:
因为,exists子查询的该含义,造成主查询往往出现这样的情形:要么全都取出,要么都不取出。如果局限于这个含义(使用情形),其基本就失去了它的现实使用意义。
所以:
实际应用中,该子查询,往往都不是独立的子查询,而是会需要跟“主查询”的数据源(表),建立某种关系——通常就是连接关系。建立的方式是“隐式的”,即没有在代码上体现关系,但却在内部有其连接的“实质”。
例:
结果就:
注意:
- 这种子查询语句,没法“独立存在(独立运行)”,而是必须跟主查询一起使用;
- 其他子查询,是可以独立运行的,而且会得到一个运行的结果。
- 该子查询中的条件,应该设定为跟主查询的某个字段有一定的关联性判断,通常该判断就是这两个表的“本来该有的连接条件”
最后一个结论:
如果一个查询需求,可以使用连接查询的,也可以使用子查询得到,则通常推荐使用连接插叙,效率归更高。
相关推荐:
MySQL子查询的详细介绍
什么是mysql子查询?如何利用子查询进行过滤?
MySQL子查询的优化
以上就是mysql子查询简单介绍的详细内容,更多请关注php中文网其它相关文章!
学习教程快速掌握从入门到精通的SQL知识。