GROUP BY

查询结果分组

第四章 第四节:数据分组、子查询 (Subquery)

having 可以过滤出给定条件下的分组

第四章 第四节:数据分组、子查询 (Subquery)

order by

对查询结果排序

第四章 第四节:数据分组、子查询 (Subquery)

第四章 第四节:数据分组、子查询 (Subquery)

先按照age排序,当年龄中有相同的时,按照id降序排序

limit限制输出行数

第四章 第四节:数据分组、子查询 (Subquery)


子查询:出现在其他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修饰的比较运算符:当子查询返回多于一个值时使用他们第四章 第四节:数据分组、子查询 (Subquery)

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.

相关文章:

  • 2021-09-04
  • 2021-11-09
  • 2021-11-27
  • 2021-06-29
  • 2021-11-15
  • 2021-12-18
  • 2021-08-18
猜你喜欢
  • 2021-07-10
  • 2021-11-23
  • 2021-11-24
  • 2021-12-21
  • 2022-12-23
  • 2022-12-23
  • 2021-09-24
相关资源
相似解决方案