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;

猜你喜欢

转载自www.cnblogs.com/sienbo/p/11398017.html