MySQL分组与连表查询 - 司恩波
MySQL分组与连表查询
2019-08-23
1.MySQL分组
按照某一个属性降数据进行分组,通过关键字:group by;通常分组会与聚合函数联合使用。
聚合函数常用的有:min,max,sum,avg,count。
比如统计男女生人数
- --性别表
- create table gendertable(
- id int auto_increment primary key,
- gender char(10)
- )engine=innodb default charset=utf8;
- insert into gendertable(gender) values("男"),("女");
- --人员表
- create table personnel(
- id int auto_increment primary key,
- name char(10),
- gender int not null,
- constraint fk_per_gend foreign key gender references gendertable(id)
- )engine=innodb default charset=utf8;
- select count(gender),max(id),gender from personnel group by gender;
这里注意,对聚合函数的结果进行二次筛选的时候不能用where,而是使用having.
如下是显示统计后,某个gender统计数量大于2的数据
- select count(gender),gender from personnel group by gender having count(gender)>2;
查询一个表中总共有多少数据可以用下面方法:
- select count(1) from 表名;
2.连表查询
将两个或者多个表放在一起查询;
表之间必须有关系映射;
语法格式:关键词on后面加上表之间的映射关系
- select 要显示的列或内容 from 表1 left join 表2 on 表1,2之间的关系;
left join会将其左边的表全显示。
也可以实现多张表的连表,只要其中至少两张表之间有关联
- select 需显示内容 from 表1
- left join 表2 on 表之间关系
- left join 表3 on 表之间关系
- ···
实例:
- --状态表
- create table status(
- id int not null auto_increment primary key,
- sta char(10) not null
- )engine=innodb default charset=utf8;
- insert into status(sta) values("兴奋"),("高兴"),("平静"),("低落");
- create table userinfo(
- id int not null auto_increment primary key,
- name char(10) not null,
- sta_id int not null,
- constraint fk_usr_sta foreign key (sta_id) references status(id)
- )engine=innodb default charset=utf8;
- insert into userinfo(name,sta_id) values("mok",3),("cag",1),("sohh",2),("kaly",4),("doom",3),("jugg",1),("tiger",4),("lion",4);
- #连表查询
- select name,sta from userinfo
- left join status on userinfo.sta_id=status.id;