Mysql学习笔记_3

分组数据

select [column_name], count(*) as [new_name] from [table_name] group by [column_name] (with rollup);
select [column_name], count(*) as [new_name] from [table_name] group by [column_name] having count(*) >= 2;

# 1 分组 相同[column_name]为一组 count(*) 为统计数量, with rollup 显示所有数量之和

# 2 having 语句为过滤 只能过滤分组 不能过滤子句(where 可以过滤子句)


select [column_name], count(*) as [new_name] from [table_name] where [condition] group by [column_name] having [condition] (order by [column_name]);

# where 与 having 综合使用,where 表示查询字句, having表示查询分组。

# 一般来说 group by 的排序是不准确的, 所以一般分组之后,要用 order by 排序

select字句及顺序
子句说明是否必须使用
select返回列或表达式
from从中检索的表仅在表选择数据时使用
where行级过滤
group by分组说明仅在计算聚集时使用
having组级过滤
order by输出排列顺序
limit输出行数

联结表

想要学习联结表,首先要了解两个概念:

主键:每行具有的唯一的标识符为主键

外键:外键为某个表中的某一列,它包含了另一个表达主键值。

创建联接表如下

select vend_name, prod_name, prod_price from vendors, products where vendors.vend_id = products.vend_id;

这种方法叫做等值联结,又叫内部联结,可以用join关键字来表示相同的功能

select vend_name, prod_name, prod_price from vendors inner join products on vendors.vend_id = products.vend_id;


创建高级联结

自联结

select p1.prod_id, p1.prod_name from products as p1, products as p2 where p1.vend_id = p2.vend_id and p2.prod_id = 'DTNTR';

上述代码表示的是:查找prod_id 为'DITNTR' 的 vend_id, 并将这个vend_id下的所有产品展示出来

由于是在一个表中查找,products引用了两次,具有二义性(雾),所以取了两个别名 p1, p2 加以区分。

使用自联结代替子查询的原因是在某些情况下,自联结的效率要高一些。

外部联结

select customers.cust_id, orders.order_num from customers left join orders on customers.cust_id = orders.cust_id;

left join 返回左表达全部子列,当左表某行未在右表中出现,则该行为null。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值