详解MySQL中的分组查询与连接查询语句
分组查询groupby
groupby属性名[having条件表达式][withrollup]
“属性名”指按照该字段值进行分组;“having条件表达式”用来限制分组后的显示,满足条件的结果将被显示;withrollup将会在所有记录的最后加上一条记录,该记录是上面所有记录的总和。
1)单独使用
groupby单独使用,查询结果只显示一个分组的一条记录。
实例:
select*fromemployeegroupbysex;
将只显示男女两条记录。
2)与group_concat()函数一起使用
每个分组中指定字段值都显示出来
实例:
selectsex,group_concat(name)fromemployeegroupbysex;
显示结果中“女”会显示所有sex为“女”的名字name
sex|group_concat(name) 女|小红,小兰 男|张三,王五,王六
3)与集合函数一起使用
实例:
selectsex,count(sex)fromemployeegroupbysex;
结果:
sex|count(num) 女|1 男|3
count()为计算个数的方法。
4)与having一起使用
“having条件表达式”,可以限制输出结果。只有满足条件表达式的结果才显示。
实例:
selectsex,count(sex)fromemployeegroupbysexhavingcount(sex)>=3;
结果:
sex|count(sex) 男|3
“having条件表达式”作用于分组后的记录。
5)按多字段进行分组
select*fromemployeegroupbyd_id,sex;
查询结果先按d_id分组,再按sex进行分组
6)与withrollup一起使用
使用withrollup将会在所有记录的最后加上一条记录,这条记录是上面所有记录的总和
实例:
selectsex,count(sex)fromemployeegroupbysexwithrollup;
结果:
sex|count(sex) 女|1 男|5 null|6
如果是字符串的话,比如姓名就会生成“张三,李四,王五”这种类型的结果,即name总和。
连接查询
将两个及两个以上的表连接起来选取所需数据。
1)内连接查询:
当两个表中具有相同意义的字段值相等时,就查询出该条记录。
实例: