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;