第十三章 分组数据
数据分组
从products表中,返回供应商vend_id = 1003 对应的产品总数
也可以创建分组 GROUP BY
过滤分组
GROUP BY 只能完整分组
用HAVING 可以过滤分组,用法类似于WHERE
同时用WHERE 和 HAVING
找出products 表中,具有2个及以上、价格为10及以上的产品的供应商
分组(group by)和排序(order by)
总计订单价格大于等于50的订单的订单号和总计订单价格
SELECT 子句中的顺序
第十四章 使用子查询
需要找出订购物品TNT2(prod_id)的所有客户,应该怎么检索?
思路:
在订单商品表(orderitems)中找到prod_id为TNT2的所有订单的编号(order_num)
在顾客订单(orders)表中根据订单编号(order_num)找到顾客ID(cust_id)
在顾客信息(customers)表中根据顾客ID(cust_id)找到顾客信息
把上面两个组合(从内向外处理)
检索这些客户的信息
或者用子查询实现
作为计算字段使用子查询
显示customers表中每个客户的订单总数,订单与相应的客户ID存储在orders表中
orders.cust_id = customers.cust_id 完全限定列名
WHERE orders.cust_id = customers.cust_id 相关子查询(涉及外部查询的子查询)
第十五章 联结表(join)
创建联结
vend_name prod_name prod_price
如果没有使用联结,返回的结果是第一个表中的每个行与第二个表中的每个行配对,而不管逻辑是否合理
这样共返回第一个表的行数乘以第二个表的行数这么多行,称为笛卡儿积
内部联结(INNER JOIN)
联结多个表
显示编号为20005的订单中的物品
第十六章 创建高级联结
使用表别名
使用不同类型的联结
之前使用的是内部联结(等值联结)
现在介绍其他三种联结
自联结
发现某物品(prod_id='DTNTR') 有问题,想知道生产该物品的供应商(vend_id) 生产的其他物品是否有问题
使用自联结的相同查询
外部联结
对每个客户下了多少订单进行计数,包括那些尚未下订单的客户
用外部联结,可以把那些尚未下订单的客户的订单数也能统计
left outer join 指定包括左边表所有的行
right outer join 指定包括右边表所有的行
使用带聚类函数的联结
要检索所有客户及每个客户所下的订单数