数据库的查询和分组

数据库的查询和分组

单表的查询分组

/*
分组
SELECT 
分组字段名(group by 后面跟的分组字段)     #where后面from前面的是表中会出现的
brande_id ,GROUP_CONCAT (price)   
FROM 表名 
WHERE 筛选条件
GROUP BY 分组的列名
HAVING 分组之后的筛选条件
order by 排序  desc降序 asc是升序 不写默认升序


where  引导的筛选条件在原始的表中已经可以实现
having 引导的筛选条件是已经分组完成之后才可以做的
即 where是原始表中有的字段名可以直接用的筛选条件,having是原始表中没有的要进行计算的如avg(price)>5
*/

上表中只有select…from是必须的其余按情况而定

group_concat的作用

如果不加group_concat (字节名)

SELECT goods.`name` ,goods.`id`FROM goods GROUP BY goods.`name`;

在这里插入图片描述
如果加了group_concat(字节名)

SELECT goods.`name` ,GROUP_CONCAT(goods.`id`)FROM goods GROUP BY goods.`name`;

在这里插入图片描述
加了GROUP_CONCAT,它会把相同名字的id放在一个格子里,不加的话一个格子只有一个id

两张表的查询和分组

利用99语法
sql99语法
内连接
/*
select 查询字段
from   表名1
inner join 表名2
on 连接条件
where  筛选条件
group by 分组
having     分组后筛选
order by  排序 desc 降序,asc升序, 不加的话默认升序
*/

练习

#查询商品的个数大于3种的品牌的个数,并显示品牌的名字
SELECT goods.`brande_id`,GROUP_CONCAT(goods.`name`)
FROM goods 
INNER JOIN brande 
ON goods.`brande_id`=brande.`id` 
GROUP BY goods.`brande_id` 
HAVING COUNT(*)>3;

where和having的区别

where是筛选前的约束条件
having是筛选后的约束条件
一般来说:
where的约束条件是可以直接在表的字段名里找到的,例如where id>6
having的约束条件是需要计算等手段不能直接在字段名中找到,例如having avg(price)>6
以上表中有id,而表中没有avg(price)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值