• MySQL分组查询与连接查询


    一,分组查询

    使用ORDER BY子句将表中的数据分成若干组(还是按行显示)
    

    语法:

    SELECT 字段名[,聚集函数] FROM 表名    [WHERE子句]    GROUP BY    要分组的字段名    [ORDER BY子句]
    

    需要注意的是:在GROUP BY子句后出现的字段名必须在SELECT后的查询的字段中

    1.分组查询中筛选条件分为两种:

    类别 筛选数据源 在语句中的位置 使用的关键字
    分组前筛选 原始数据表 GROUP BY子句前 WHERE
    分组后筛选 分组后的结果集 GROUP BY子句后 HAVING

    注意:
    (1)能用分组前筛选(WHERE子句)完成查询优先使用分组前筛选
    (2)如果聚集函数做筛选条件,则条件一定是放在HAVING子句中

    2.GROUP BY子句中同时按多个字段分组

    此时,GROUP BY子句后的多个字段的各个值都相同的会合并成为一行记录,就算两行记录前n-1个字段的值相同,而第n个字段的值不同也不会合并成一行而是两个不同的行。
    

    3.添加排序

    直接在GROUP BY子句后添加排序子句ORDER BY
    

    二,连接查询

    连接查询又称为多表查询。
    

    语法:

    SELECT 查询字段    FROM 表a  [别名]  [连接类型关键字]  JOIN  表b  [别名]  ON 连接条件
    [WHERE 筛选条件]  [GROUP BY子句]  [HAVING 筛选条件]  [ORDER BY 排序字段]
    

    1.按功能分类:

    内连接:包括 等值连接、非等值连接、自连接
    外连接:包括 左外连接、右外连接、全外连接
    交叉连接:实际上就是多个表的笛卡儿积
    

    等值连接:
    在连接条件中使用符号 =

    非等值连接:
    在连接条件中使用除 = 外其他符号,如>,<,between...and...等

    自连接:inner
    表自身的连接查询,一半这种情况下,很可能对表起两次不同的别名

    需要注意的是:为表起别名后,要对查询字段进行表限定,则要使用别名去限定二不能再使用原表名了,这个和MySQL中解析SQL语句的顺序有关。

    左外连接:left [outer]
    以左边的表作为主表

    右外连接:right [outer]
    以右边的表作为主表

    全外连接full [outer]
    其实在MySQL中不支持圈外连接。

    交叉连接:cross
    左右表的笛卡儿积

    2.按SQL标准分

    在SQL92标准中:仅仅支持内连接
    在SQL99标准中:支持内连接+外连接(左外,右外)+交叉连接

    3.总结

    以上总共有七种连接查询,我们用一张图来形象区分:

  • 相关阅读:
    滑动窗口法与剑指offer:和为S的连续正数数列 与 和为S的两个数字
    数组中的逆序对与归并中的分治思想
    重读STL源码剖析:迭代器
    重读深度探索C++对象模型:函数
    FreeMarker笔记 前言&第1章 入门
    分享我的PL/SQL的优化设置,为开发全面提速
    迅影QQ视频查看v2.0 源码
    Invalid encoding name "UTF8". 报错 XML
    [HNOI2003]消防局的设立
    We need water!
  • 原文地址:https://www.cnblogs.com/ChangAn223/p/10686405.html
Copyright © 2020-2023  润新知