MySQL 第五天学习笔记

第十三章  分组数据

数据分组

从products表中,返回供应商vend_id = 1003 对应的产品总数

MySQL 第五天学习笔记

也可以创建分组  GROUP  BY 

MySQL 第五天学习笔记


过滤分组

GROUP BY 只能完整分组

用HAVING 可以过滤分组,用法类似于WHERE

MySQL 第五天学习笔记


同时用WHERE 和 HAVING

找出products 表中,具有2个及以上、价格为10及以上的产品的供应商

MySQL 第五天学习笔记


分组(group by)和排序(order by)

MySQL 第五天学习笔记


总计订单价格大于等于50的订单的订单号和总计订单价格

MySQL 第五天学习笔记


SELECT 子句中的顺序

MySQL 第五天学习笔记

MySQL 第五天学习笔记


第十四章  使用子查询

需要找出订购物品TNT2(prod_id)的所有客户,应该怎么检索?

思路:

在订单商品表(orderitems)中找到prod_id为TNT2的所有订单的编号(order_num)

在顾客订单(orders)表中根据订单编号(order_num)找到顾客ID(cust_id)

在顾客信息(customers)表中根据顾客ID(cust_id)找到顾客信息

MySQL 第五天学习笔记

MySQL 第五天学习笔记

把上面两个组合(从内向外处理)

MySQL 第五天学习笔记

检索这些客户的信息

MySQL 第五天学习笔记

或者用子查询实现

MySQL 第五天学习笔记


作为计算字段使用子查询

显示customers表中每个客户的订单总数,订单与相应的客户ID存储在orders表中

MySQL 第五天学习笔记

orders.cust_id = customers.cust_id     完全限定列名

WHERE orders.cust_id = customers.cust_id      相关子查询(涉及外部查询的子查询)


第十五章  联结表(join)

创建联结

vend_name   prod_name    prod_price  

MySQL 第五天学习笔记

如果没有使用联结,返回的结果是第一个表中的每个行与第二个表中的每个行配对,而不管逻辑是否合理

这样共返回第一个表的行数乘以第二个表的行数这么多行,称为笛卡儿积


内部联结(INNER JOIN)

MySQL 第五天学习笔记


联结多个表

显示编号为20005的订单中的物品

MySQL 第五天学习笔记


第十六章 创建高级联结

使用表别名

MySQL 第五天学习笔记


使用不同类型的联结

之前使用的是内部联结(等值联结)

现在介绍其他三种联结

自联结

发现某物品(prod_id='DTNTR') 有问题,想知道生产该物品的供应商(vend_id) 生产的其他物品是否有问题

MySQL 第五天学习笔记

使用自联结的相同查询

MySQL 第五天学习笔记



外部联结

对每个客户下了多少订单进行计数,包括那些尚未下订单的客户

MySQL 第五天学习笔记

用外部联结,可以把那些尚未下订单的客户的订单数也能统计

 left outer join  指定包括左边表所有的行

MySQL 第五天学习笔记


right outer join  指定包括右边表所有的行

MySQL 第五天学习笔记  

使用带聚类函数的联结

要检索所有客户及每个客户所下的订单数

MySQL 第五天学习笔记