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;