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.总结

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

  • 相关阅读:
    Android Button上的文字自动变成大写,如何解决呢?
    如何在IamgeButton上面添加文字
    C语言之实现函数返回一个数组,以及选择排序,还有折半查找。这是同学的一个作业。。。
    解决android:background背景图片被拉伸问题
    service&thread
    MS SQLServer Update语法和实例
    ztree2.6给菜单增加title提示信息[转]
    UltraEdit-14.10.0.1024版本语法着色配置
    linux下c++动态库的生成及使用
    c++动态库与静态库
  • 原文地址:https://www.cnblogs.com/ChangAn223/p/10686405.html
Copyright © 2011-2022 走看看