GROUP BY
查询结果分组
having 可以过滤出给定条件下的分组
order by
对查询结果排序
先按照age排序,当年龄中有相同的时,按照id降序排序
limit限制输出行数
子查询:出现在其他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 GOODS_PRICE FROM GOODS WHERE GOOD_PRICE>5400;
或者直接使用子查询,在里面直接求取平均值。
SELECT * FROM goods WHERE goods_price >(SELECT ROUND(AVG(goods_price),2) FROM goods);
查询所有超极本类型的电脑的价格
SELECT goods_price FROM goods where cate='超极本';//假设有3条信息,即有不同的三种价格
查询所有电脑中价格大于超极本价格的所有信息:
那么:
SELECT * FROM goods where price > (SELECT goods_price FROM goods where cate='超极本');
就是错误的,因为子查询返回了三条信息,所以引入ANY,SOME,和ALL
正确的代码是:用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.