资讯中心

【MySQL】分组查询、聚合查询、联合查询

📅 2026/9/29 5:59:30
【MySQL】分组查询、聚合查询、联合查询
MySQL(四)查询进阶一、查询规则1.计算总量2.计算单位3.计算方向4.计算量组二、分组查询1.group by2.having三、聚合查询1.count2.sum3.avg4.max5.min四、联合查询1.表的关联字段增添设计1.1主对表单向对应1.2主对表多向对应1.2.1数组拆分1.2.2关联表存放2.笛卡尔积拼接2.1总拼情况2.2筛选拼接2.2.1内连接2.2.2左外连接2.2.3全外连接2.2.4自连接一、查询规则1.计算总量计算总量往指定列竖直延伸2.计算单位计算单位是一条行水平对应3.计算方向计算方向是水平合或竖直合除了聚合函数的计算方向为 计算单位竖直合其它的计算方向都为水平合4.计算量组计算量组是一次计算进行的对象量一个量组 对应一个计算结果通过group by以指定列字段合数据相同 进行分组二、分组查询select col,... from tb_name where 条件group by col,...having 条件;1.group bygroup by分组 是按照指定列字段 水平单位合数据相同的上下水平划分成组2.havingwhere条件 在分组之前进行的条件筛选写在group by的前面having条件 在分组之后对合组结果进行的条件筛选写在group by的后面三、聚合查询sql里函数的参数是列聚合函数 都只能传入一个参数(一个列 或一个表达式列 或*)聚合函数的计算方向 是特定的计算单位竖直合1.countselect count([distinct] col) from tb_name;计算每个计算量组里 计算单位的个数除全列查询外计算单位的数据为null的 不计入计算单位个数2.sumselect sum([distinct] col) from tb_name;计算每个计算量组里 计算单位的数据和会对计算单位里的数据强转成double进行计算遇到null 会跳过不参与运算3.avgselect avg([distinct] col) from tb_name;计算每个计算量组里 计算单位的数据平均值4.maxselect max([distinct] col) from tb_name;计算每个计算量组里 计算单位的数据最大值5.minselect min([distinct] col) from tb_name;计算每个计算量组里 计算单位的数据最小值四、联合查询在表内有信息完整的 关联字段互联的多表 能通过关联字段拼接 把表信息 完整合并成大表在一起1.表的关联字段增添设计1.1主对表单向对应由于mysql不支持数组设计增添表中的关联字段时最好直接取一个 只有单向对应对象的表 为主对表将主对表的记录全穷举完 为完整的一侧信息再将关联字段 对着在主对表完整的侧面 进行共字段纽带的 对应信息填充1.2主对表多向对应如果两对象是多对多的关系主对表必须得 多向对应对象时每个记录同时对应的 关联字段多个数据 会成数组1.2.1数组拆分要将数组内容 并着重复id 向下拆分成一对一的多个记录1.2.2关联表存放一般是不会在主对表原表上 进行修改拆分 改变原表的记录行数据而是再设计一个存放关联字段的中枢表 来存放这些拆分出的 所有一对一的关联记录拼接时两个表都往中枢表 关联字段地拼接最后三个表拼接在一起成完整信息的大表2.笛卡尔积拼接多个表中已设计好有关联字段在内 能互相拼接的多表去笛卡尔积拼接2.1总拼情况两个表的列字段属性全部合并两个表的记录条所有情况排列组合地 拼接成合并记录合并后的大表的信息是完整的但有过载着错误合拼的记录包含有关联字段数据不同地合拼的 错误拼接记录与关联字段数据相同能并的 正确拼接的记录2.2筛选拼接用两表的两关联字段数据相同的正确连接条件搜索出完整的 正确拼接记录(内连接)多表查询时不能像单表查询直接select 表名 默认全列查询而是要正常指定字段如果要全列查询用*所有表的所有列或者表别名.*指定表的所有列2.2.1内连接select col,...fromtb_name1,tb_name2whererecol1 recol2(and...);select col,...fromtb_name1join tb_name2onrecol1 recol2(and...)join tb_name3onrecol1 recol3;内连接即搜索左右记录能相同合并共内的正确拼接的记录2.2.2左外连接select col,...fromtb_name1left join tb_name2onrecol1 recol2;把表1左外连接表2左外连接会确保内正确连接完后左表记录没有连接上的记录也全搜索出来此时它对应连接的右表记录 则为空2.2.3全外连接全外连接会确保内正确连接完后左右表记录没有连接上的记录也都全搜索出来此时它们各自对应连接的左右表记录 为空的2.2.4自连接select col,...fromtb_nameas name1, tb_nameas name2wherename1.recol name2.recol将表 自己与自己进行笛卡尔积拼接sql中的条件比较 都是对列与列之间进行的如果需要 对行与行之间进行条件比较就自己的字段 对自己笛卡尔积 复制一份 到列有行与行内容之间进行的比较 就转到列上有了 就可用条件进行 行与行内容的比较了

看完文章,想为自己的企业也做一次专业网站诊断?

尧图顾问免费为您评估现有网站,并给出建站/改版建议与报价方案。

免费获取方案