zoukankan      html  css  js  c++  java
  • 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 希望内容对你所有帮助,谢谢!
  • 相关阅读:
    SynchronousQueue 的联想
    Spring Cache
    CSUOJ 1011 Counting Pixels
    CSUOJ 1973 给自己出题的小X DFS
    CSUOJ 1726 你经历过绝望吗?两次!BFS+优先队列
    CSUOJ 1900 锋芒不露
    CSUOJ 1808 地铁
    CSUOJ 1895 Apache is late again
    CSUOJ 1781 阶乘除法
    CSUOJ 1560 图书管理员的表白方式
  • 原文地址:https://www.cnblogs.com/guorongtao/p/13646502.html
Copyright © 2011-2022 走看看