MySQL -----子查询
1.什么是子查询?
子查询可以理解为:在一个sql语句A(insert、select、update等)中嵌入一个子查询语句B,作为执行的条件或查询的数据源(代替from 后的数据表 ),那么B就是子查询语句,它是一条完整的select语句,就能独立完成。sql语句中先执行子查询中的语句在执行外层的语句
2子查询分类:
按照查询的功能可以分为标量子查询,列子查询,行子查询和表子查询
按照查询的位置可以分为where和from子查询。其中,标量子查询,列子查询,行子查询都属于where子查询,而表子
查询属于from子查询。
1)标量子查询:返回的数据为一行一列
where 条件判断(=|<>)
2)列子查询:返回的数据为一列多行
where 条件判断(in | not in )
3)行子查询:返回的数据为一行多列
where 指定字段1,指定字段2…=(select 字段1,字段2 …from 数据源 [where] …)
<>,<=>表示不等于,等于
4)表子查询:返回数据为一个二维数据表,数据可以为一行列,一行多列,多行一列,多列一行。多行多列。
select 字段列表 from (select 语句)as 别名where/having.order by/group by/limit
3.子查询关键字:
1)带exists关键字的子查询:exists存在,返回的结果为0或1两个值。其中,1表示成立,0表示不成立
where exists(子查询语句)
2)带any的关键字的子查询
any关键字表示给定的判断条件,其中只要符合any的子查询中任意一个就返回1,否者返回0.
where 表达式 比较运算符 any(子查询语句)
例子:
select name from goods where id<> any (select distinct id from good where price>500)
意思:表示筛选goods表中的name返回不满足good表中不重复的price大于500的数据
3)带all的关键字子查询:判断条件是否全部符合条件,符合就返回1,否者就返回0、
where 表达式 比较运算符 all(子查询语句)