1.子查询定义
子查询(SubQuery)是指出现在其他SQL语句内的SELECT子句。
--例
SELECT * FROM t1 WHERE col1 = (SELECT col2 FROM t2);
/*
1.SELECT * FROM t1,称为Outer Query/Outer Statement(外层查询/外层声明)
2.SELECT col2 FROM t2,称为SubQuery
*/
注意:
1.子查询指嵌套在查询内部,且必须始终出现在圆括号内。
2.子查询可以包含多个关键字或条件,如:DISTINCT、GROUP BY、ORDER BY、LIMIT、函数等等。
3.子查询的外层查询可以是:SELECT,INSERT,UPDATE,SET或DO。
4.子查询返回值,可以为标量、一行、一列或子查询。
2.比较运算符的子查询
--语法结构
operand comparison_operator subquery;
--示例(假设所有前提条件都已满足)
SELECT ROUND(AVG(price),2) FROM Store;
--求出价格平均数,且保留小数点后两位
SELECT id,name,price FROM Store WHERE price >= (SELECT ROUND(AVG(price),2) FROM Store);
--使用子查询,求出大于等于平均价格的商品
SELECT * FROM Store WHERE categ = '彩电'\G;
--注意,查询可以使用中文
注意,在 比较 的时候,可能会出现返回多条结果
若是使用返回多条结果的子查询去 比较 则会报错
因为系统不知道,你是要和哪条返回结果去 比较
所以,就有了‘修饰比较修饰符’
--ANY,SOME,ALL
operand comparison_operator ANY (subquery);
operand comparison_operator SOME (subquery);
operand comparison_operator ALL (subquery);
ANY | SOME | ALL |
---|---|---|
>、>= | 最小值 | 最小值 |
<、<= | 最大值 | 最大值 |
= | 任意值 | 任意值 |
<>、!= |
--示例(假设子查询有多个返回值)
SELECT name,price FROM Store WHERE price > ANY (SELECT price FROM Store WHERE categ = '彩电');
--对照上表,可以看出彩电返回的是返回值中的最小值
3.[NOT] IN的子查询
--语法结构
operand comparison_operator [NOT] IN (subquery);
--=ANY运算符与IN等效
--!=ALL或<>ALL运算符与NOT IN等效
4.[NOT] EXISTS的子查询(不常用)
如果子查询返回任何行,EXISTS将返回TRUE;
否则为FALSE