• 技术文章 >数据库 >mysql教程

    详解MySQL中的分组查询与连接查询语句_MySQL

    PHP中文网PHP中文网2016-05-27 13:44:30原创726
    详解MySQL中的分组查询与连接查询语句_MySQL

    分组查询 group by
    group by 属性名 [having 条件表达式][ with rollup]
    “属性名 ”指按照该字段值进行分组;“having 条件表达式 ”用来限制分组后的显示,满足条件的结果将被显示;with rollup 将会在所有记录的最后加上一条记录,该记录是上面所有记录的总和。

    1)单独使用
    group by 单独使用,查询结果只显示一个分组的一条记录。
    实例:

    select * from employee group by sex;

    将只显示男女两条记录。

    2)与group_concat()函数一起使用
    每个分组中指定字段值都显示出来
    实例:

    select sex,group_concat(name) from employee group by sex;

    显示结果中“女”会显示所有sex为“女”的名字name

    sex | group_concat(name)
    女 | 小红,小兰
    男 | 张三,王五,王六

    3)与集合函数一起使用
    实例:

    select sex,count(sex) from employee group by sex;

    结果:

    sex | count(num)
    女 | 1
    男 | 3

    count()为计算个数的方法。

    4)与having一起使用
    “having条件表达式”,可以限制输出结果。只有满足条件表达式的结果才显示。
    实例:

    select sex,count(sex) from employee group by sex having count(sex) >= 3;

    结果:

    sex | count(sex)
    男 | 3

    “having条件表达式”作用于分组后的记录。

    5)按多字段进行分组

    select * from employee group by d_id,sex;

    查询结果先按d_id分组,再按sex进行分组

    6) 与with rollup一起使用
    使用with rollup将会在所有记录的最后加上一条记录,这条记录是上面所有记录的总和
    实例:

    select sex,count(sex) from employee group by sex with rollup;

    结果:

    sex | count(sex)
    女 | 1
    男 | 5
    null | 6

    如果是字符串的话,比如姓名就会生成“张三,李四,王五”这种类型的结果,即name总和。

    连接查询
    将两个及两个以上的表连接起来选取所需数据。

    1)内连接查询:
    当两个表中具有相同意义的字段值相等时,就查询出该条记录。
    实例:

    代码如下:

    select num,name,employee.d_id,age,d_name from employee,department where employee.d_id = department.d_id

    因字段名相同,所以取d_id字段值时最好指定哪张表的字段。

    2)外连接查询
    select 属性名列表 from 表名1 left|right join 表名2 on 表名1.属性名1=表名2.属性名2;
    左连接查询:
    进行左连接查询时,可以查出表名1中所指的表中所有记录。而表名2所指表中,只能查询出匹配的记录。
    实例:

    代码如下:

    select num,name,employee.d_id,age,d_name from employee left join department on 
    employee.d_id = department.d_id;

    右连接查询:
    与左连接相反,可以查询出表名2中的的所有记录,而表名1中所指的表中,只查询出匹配的记录。

    PS:使用集合函数查询
    集合函数包括count(),sum(),avg(),max()和min()。
    1)count()函数
    统计记录条数
    实例:

    select count(*) from employee;

    与group by一起使用

    select d_id,count(*) from employee group by d_id;

    上述语句会先分组后统计

    2) sum()函数
    sum()函数是求和函数
    实例:

    select num,sum(score) from grade where num= 1001;
    
    select num,sum(score) from grade group by num;

    sum()只能计算数值类型字段。
    3)avg()函数
    avg()函数是求平均值函数。
    实例:

    select avg(age) from employee;
    
    select course,avg(score) from group by course;

    4)max(),min()函数
    求最大值和最小值。
    实例:

    select max(age) from employee;
    select num,course,max(score) from grade group by course;

    对于字符串的最大值问题,max()函数是使用字符对应的ascii码进行计算的。

    以上就是详解MySQL中的分组查询与连接查询语句_MySQL的内容,更多相关内容请关注PHP中文网(m.sbmmt.com)!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:使用pt-kill根据一定的规则来kill连接的方法_MySQL 下一篇:如何恢复MySQL主从数据一致性_MySQL
    20期PHP线上班

    相关文章推荐

    • 【活动】充值PHP中文网VIP即送云服务器• mysql中什么时候分表• mysql触发器怎么取消• mysql中odbc是什么• mysql的权限表有哪些• mysql有哪些索引类型
    1/1

    PHP中文网