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;

原文地址:https://www.cnblogs.com/sienbo/p/11398017.html

时间: 2024-08-02 14:05:26

MySQL分组与连表查询的相关文章

mysql简单的单表查询详解

mysql简单的单表查询详解 MySQL的查询操作: 单表查询:简单查询 多表查询:连续查询 联合查询: 选择和投影: 投影:挑选要显示的字段 选择:挑选符合条件的行 投影:SELECT 字段1, 字段2, ... FROM tb_name;  SELECT * FROM tb_name; 选择:SELECT 字段1, ... FROM tb_name WHERE 子句; 布尔条件表达式 mysql> CREATE TABLE students (SID INT UNSIGNED AUTO_IN

mysql 数据操作 多表查询 目录

mysql 数据操作 多表查询 准备 mysql 数据操作 多表查询 多表连接查询 笛卡尔积 mysql 数据操作 多表查询 多表连接查询 内连接 mysql 数据操作 多表查询 多表连接查询 外链接之左连接 右连接 mysql 数据操作 多表查询 多表连接查询 全外连接 原文地址:https://www.cnblogs.com/mingerlcm/p/10523097.html

MySQL 数据库之单表查询

一.查询语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 二.关键字执行优先级 from where group by having select distinct order by limit 1.找到表:from 2.拿着where指定的约束条件,去文件/表中取出一条条记录 3.将取出的一条条记录进行分组group by,如果没有group by,则整体作为一组 4

mysql四-1:单表查询

阅读目录 一 单表查询的语法 二 关键字的执行优先级(重点) 三 简单查询 四 WHERE约束 五 分组查询:GROUP BY 六 HAVING过滤 七 查询排序:ORDER BY 八 限制查询的记录数:LIMIT 九 使用正则表达式查询 一 单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 二 关键字的执行优先级(重点) 重点中的重点:关键字的执行优先级 f

Mysql(四)-1:单表查询

一 单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 二 关键字的执行优先级(重点) 重点中的重点:关键字的执行优先级 from where group by having select distinct order by limit 1.找到表:from 2.拿着where指定的约束条件,去文件/表中取出一条条记录 3.将取出的一条条记录进行分组group

MySQL学习9 - 单表查询

一.单表查询的语法 二.关键字的执行优先级(重点) 三.单表查询示例 1.where约束 2.group by分组查询 3.聚合函数 4.HAVING过滤 5.order by查询排序 6.limit 限制查询的记录数 一.单表查询的语法 SELECT 字段1,字段2... FROM 表名 WHERE 条件 GROUP BY field HAVING 筛选 ORDER BY field LIMIT 限制条数 二.关键字的执行优先级(重点) 重点中的重点:关键字的执行优先级 from where

MySQL学习10 - 多表查询

一.多表连接查询 1.交叉连接 2.内连接 3.外连接之左连接 4.外连接之右连接 5.全外连接 二.符合条件连接查询 三.子查询 1.带in关键字的子查询 2.带比较运算符的子查询 3.带EXISTS关键字的子查询 本节重点: 多表连接查询 符合条件连接查询 子查询 准备工作:准备两张表,部门表(department).员工表(employee) create table department( id int, name varchar(20) ); create table employee

mysql基础-数据库多表查询-记录(六)

0x01 MySQL多表查询和子查询 联结查询:事先将两张或者多张表join,根据join的结果进行查询 cross join:交叉联结  用的少, 相当于 (a+b)*(c+d+e) 所得结果的形式   用的少 自然联结  --- 只能在两者相等的情况下才能建立连接 等值联结:把相同的字段进行等值连接 外联结: 左外联接:只保留出现在左外连接元算之前(左边)的关系中的元组(以左表为准,) left_tb LEFT JOIN right_tb ON 条件 右外联接:只保留出现在右外连接元算之后(

MySQL约束条件和多表查询方式详解

一.约束什么是约束?简述:除了数据类型以外的约束的为什么使用约束?简述:为了保证数据的合法性 完整性:二.约束分类: not null 跟整型时使用其作用是限制插入数据不能为空 create table student (id ind,name char(10) not null); default 默认值(并不是约束)其作用是在于当插入的数据为空的时候使用默认值并不会报错: create table user (id ind,name char(10) not null,sex char(1)