《MySQL必知必会》——分组查询&子查询

分组查询

  • 创建分组
    分组允许把数据分为多个逻辑组,以便能对每个组进行聚集计算。
    分组是在SELECT 语句中的GROUP BY子句中建立的。
    GROUP BY子句中列出的每个列都必须是检索列或有效的表达式,不能是聚集函数。如果在SELECT中使用表达式,则必须在GROUP BY子句中指定相同的表达式,不能使用别名。

    SELECT id count(*) AS  num from tables GROUP BY id;
    

    如果分组列中有null值,则null将作为一个分组返回,有多个null值,它们将分为一组。

  • 过滤分组
    使用HAVING子句来过滤分组。
    HAVING和WHERE的作用非常相似,唯一的差别就是WHERE过滤行,HAVING过滤分组。

    SELECT id,COUNT(*) AS  tables FROM tables GROUP BY id HAVING COUNT(*)>=2;
    
  • 排序
    虽然GROUP BY 分组的数据能够以分组顺序输出,但是实际需求也许并非想要按分组顺序,这时可以使用ORDER BY子句,这也是保证数据正确排序的唯一方法。

    SELECT num from tables GROUP BY id HAVING num>5 ORDER BY num;

使用子查询

子查询就是镶嵌到其他查询中的查询。把一条SELECT语句返回的结果用语另一个SELECT语句的WHERE子句。
子查询的处理总是从内向外执行的,先执行里面的子查询再执行外层查询。

SELECT name,contact  from tables WHERE id IN 
  (SELECT id from table2 WHERE num IN 
  (SELECT num FROM table3 WHERE name = 'LINING'));

用子查询建立查询的最可靠的方法就是逐渐进行,这与MySQL处理它们的方法非常相同。首先先建立最内层的查询,然后再用硬编码数据建立和测试外层查询,并且仅在确认它正常后才嵌入子查询。重复这些步骤,极大的提高了查询一开始就正常工作的可能性。

你可能感兴趣的:(mysql)