zoukankan      html  css  js  c++  java
  • 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.总结

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

  • 相关阅读:
    python note 30 断点续传
    python note 29 线程创建
    python note 28 socketserver
    python note 27 粘包
    python note 26 socket
    python note 25 约束
    Sed 用法
    python note 24 反射
    python note 23 组合
    python note 22 面向对象成员
  • 原文地址:https://www.cnblogs.com/ChangAn223/p/10686405.html
Copyright © 2011-2022 走看看