子查询及分组查询

子查询

  • 在查询语句中的WHERE条件子句中,又嵌套了另外一个查询语句
  • 主查询的where子句使用子查询返回的结果作为条件
  • 如果子查询的结果是单一的一个值,可以使用比较运算符(=、>、>=、<、<=、<>、!=)
  • 如果子查询的结果返回的是一个集合,一般会使用:in 或者 not in

语法

SELECT *FROM tableName WHEREcolnum > (SELECTAVG(amount) FROM tableName);
SELECT *FROM tableName WHEREcolnum NOT IN (SELECTDISTINCT colnum FROMtableName);
  • 如果一个查询需求,可以使用连接查询的,也可以使用子查询得到,则通常推荐使用连接查询,效率会更高,这也是数据库语句优化的一种方式

分组查询

 

  • 在 MySQL SELECT 语句中,允许使用 GROUP BY 子句,将结果集中的数据行根据选择列的值进行逻辑分组,
  • 以便能汇总表内容的子集,实现对每个组而不是对整个结果集进行整合

语法

  • GROUP BY 属性名(列) [HAVING 条件表达式]
  • 属性名:是指按照该字段的值进行分组

HAVING 条件表达式

  • 用来限制分组后的显示,符合条件表达式的结果将被显示

Where和having都是过滤条件的,有什么区别呢

  • 执行的时机不同,where是在分组之前过滤条件,having是分组之后的的过滤
  • 判断条件不同,where后面不能跟聚合函数进行判断,having是可以的。
  • 注意:分组之后,查询的字段一般都是聚合函数或者分组字段,查询其他的没有任何意义

版权声明:本文为m0_73030012原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。