• SQL 聚合函数、分组GROUP BY、子查询及组合查询JOIN


    SQL 聚合函数、分组GROUP BY、子查询及组合查询JOIN

    1、聚合函数:

    • COUNT:统计行数量
    • SUM:获取列的合计值(求和)
    • AVG:计算列的平均值
    • MAX:计算列的最大值
    • MIN:计算列的最小值

    1.1 COUNT 计数

    SELECT COUNT(*) FROM TABLE1;
    SELECT COUNT(DISTINCT 字段) FROM TABLE1;   --DISTINCT即去重

    1.2 返回列合计值(SUM):

    SELECT SUM(字段) FROM TABLE1 ;

    1.3 返回列平均值(AVG):

    SELECT AVG(字段)FROM TABLE1;

    1.4 返回最大值/最小值(MAX/MIN):

    SELECT MAX(字段) FROM TABLE1;
    SELECT MIN(字段) FROM TABLE1;


    2、数据分组(GROUP BY):
    字段1 分组,统计 字段2  的数量:

    SELECT 字段1,COUNT(ALL 字段2) AS 数量 FROM TABLE1 GROUP BY (字段1);

    执行顺序为:WHERE过滤→分组→聚合函数


    字段1分组 统计 字段2 中 字段3 >100 的数量:

    SELECT 字段1,COUNT(字段2) AS 数量 FROM TABLE1 WHERE 字段3>100 GROUP BY (字段1);
    

      

    HAVING 子句过滤条件(where):

    字段1 分组  统计 字段3平均值 > 100 的值

    SELECT 字段1,AVG(字段3) AS 平均值 FROM TABLE1 GROUP BY (字段1) HAVING AVG(字段3)>100; 
    

    在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。


    注意:SQL的执行顺序:

    • 1、执行FROM
    • 2、WHERE条件过滤
    • 3、GROUP BY分组
    • 4、执行SELECT投影列
    • 5、HAVING条件过滤
    • 6、执行ORDER BY 排序


    3、子查询:
    什么是子查询?子查询就是嵌套在主查询中的查询。
    子查询可以嵌套在主查询中所有位置,包括SELECT、FROM、WHERE、GROUP BY、HAVING、ORDER BY。

    从两个不同的表中,查出  t1.id,t1.name,t2.name

    SELECT t1.id,t1.name,(SELECT name FROM table2 t2 WHERE t2.ccid=t1.ccid) FROM table1 t1 GROUP BY t1.id; 

    --查出字段1='SQL'的且 字段2 的最大的信息

    SELECT * FROM table1 WHERE 字段1='SQL' AND 字段2>=ALL (SELECT 字段2 FROM table1 WHERE 字段1='SQL') ;

    运算符:

    • ALL   //和子查询的结果逐一比较,必须全部满足时表达式的值才为真。 
    • ANY  //和子查询的结果逐一比较,其中一条记录满足条件则表达式的值就为真。
    • EXISTS/NOT EXISTS   //EXISTS判断子查询是否存在数据,如果存在则表达式为真,反之为假。NOT EXISTS相反。
    SELECT * FROM table1 WHERE 字段1='SQL' AND 字段2 >(SELECT 字段2 FROM table1 WHERE 字段3='你好' AND 字段1='SQL'
    
    SELECT * FROM table1 t1 WHERE t1.字段1>= ALL(SELECT t2.字段1 FROM table2 t2 WHERE t1.字段2=t2.字段2);
    

      


    4、组合查询(UNION、INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL JOIN):

    4.1 UNION 操作符

    用于合并两个或多个 SELECT 语句的结果集。

    请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。

    UNION 不会出现重复值

    SELECT 列1 , 列2 FROM 表1
    UNION
    SELECT 列3 , 列4 FROM 表2;

    UNION ALL  列出所有值:

    SELECT 列1 , 列2 FROM 表1
    UNION ALL
    SELECT 列3 , 列4 FROM 表2;
    

    4.2 INNER JOIN

    在表中存在至少一个匹配时,INNER JOIN 关键字返回行。

    语法:

    SELECT column_name(s)
    FROM table_name1
    INNER JOIN table_name2 
    ON table_name1.column_name=table_name2.column_name
    

      

    4.3 LEFT JOIN 

    LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。

    语法:

    SELECT column_name(s)
    FROM table_name1
    LEFT JOIN table_name2 
    ON table_name1.column_name=table_name2.column_name
    

      

    4.4 RIGHT JOIN

    RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。

    语法:

    SELECT column_name(s)
    FROM table_name1
    RIGHT JOIN table_name2 
    ON table_name1.column_name=table_name2.column_name
    

      

    4.5 FULL JOIN

    只要其中某个表存在匹配,FULL JOIN 关键字就会返回行。

    语法:

    SELECT column_name(s)
    FROM table_name1
    FULL JOIN table_name2 
    ON table_name1.column_name=table_name2.column_name
    

      

    创建时间:2020.09.10  更新时间:

    博客园 滔Roy https://www.cnblogs.com/guorongtao 希望内容对你所有帮助,谢谢!
  • 相关阅读:
    BEM(Block–Element-Modifier)
    http://element.eleme.io/#/zh-CN/component/quickstart
    Commit message 的写法规范。本文介绍Angular 规范(
    好的commit应该长啥样 https://github.com/torvalds/linux/pull/17#issuecomment-5654674
    代码管理
    if you have content fetched asynchronously on pages where SEO is important, SSR might be necessary
    Martin Fowler’s Active Record design pattern.
    The Zen of Python
    Introspection in Python How to spy on your Python objects Guide to Python introspection
    Object-Oriented Metrics: LCOM 内聚性的度量
  • 原文地址:https://www.cnblogs.com/guorongtao/p/13646502.html
Copyright © 2020-2023  润新知