第四章 第四节:子查询 (Subquery)

来源:互联网 发布:马里亚纳网络性奴 编辑:程序博客网 时间:2024/06/07 09:36

子查询:出现在其他SQL语句内的SELECT子句

SELECT * FROM t1 WHERE col1=(SELECT COL2 FROM t2);

1、子查询必须出现在查询内部,并且必须始终出现在圆括号内部
2、子查询可以包括多个关键字或者条件,
DISTINCT ,  GROUP BY  ,ORDER BY, LIMIT ,函数等。
3、子查询的外层查询可以是:SELECT ,INSERT ,UPDATE ,SET 和DO。


子查询可以返回标量,一行,一列或子查询。



由比较运算符引发的子查询

=、>、<、>=、<=、<>、!=、<=>

查找平均价格:
SELECT AVG(goods_price) FROM goods;
保留小数位的函数 ROUND
SELECT ROUND(AVG(goods_price),2) FROM goods;   //保留两位小数
查询价格高于平均价格的所有信息
SELECT * FROM goods WHERE goods_price >(SELECT ROUND(AVG(goods_price),2) FROM goods);

用ANY,SOME,ALL修饰的比较运算符


查询所有超极本类型的电脑的价格
SELECT goods_price FROM goods where cate='超极本';//假设有3条信息,即有不同的三种价格
查询所有电脑中价格大于超极本价格的所有信息:
那么:
SELECT * FROM goods where price > (SELECT goods_price FROM goods where cate='超极本');
就是错误的,因为子查询返回了三条信息,所以引入ANY,SOME,和ALL
正确的代码是:
SELECT * FROM goods WHERE price> ANY (SELECT goods_price FROM goods where cate='超极本');
因为>ANY/SOME是大于最小值的数据,所以,这条语句就是查询价格大于超极本最低价格的电脑的所有信息
SELECT * FROM goods WHERE price> ALL (SELECT goods_price FROM goods where cate='超极本');
因为>ALL是大于最大值的数据,所以,这条语句就是查询价格大于超极本最高价格的电脑的所有信息,但是不能=ALL

由[NOT] IN/EXISTS引发的子查询

=ANY 与IN 等效   等于任何一个就是在范围内
!=ALL 或<>ALL 与NOT IN 等效   一个都不等于就是不在范围内


有[NOT]EXISTS引发的子查询

如果子查询返回任何行,EXISTS返回TRUE , 否则返回FALSE.














原创粉丝点击