连接查询的综合应用
连接查询的综合应用要求不仅能熟练掌握内连接查询、外连接查询、多表连接查询,还要学会运用聚合函数、分组查询来实现复杂的查询需求。
下面通过几个例子来体会连接查询综合应用的强大功能
示例1:计算每条公交线路的司机人数,并显示司机人数大于 3 的分组信息,按司机人数逆序显示
分析:连接驾驶员表、车辆表和线路表,再在此基础上将司机人数大于 3 的分组数据过滤出来
SELECT
lineNo '线路号',
COUNT(*) '司机数'
FROM
line l,
driver d,
vehicle v
WHERE
l.lineID = v.lineID
AND d.driverID = v.driverID
GROUP BY
lineNo
HAVING COUNT(*) > 3
ORDER BY
司机数 DESC;
执行结果如图
利用聚合函数COUNT()来计算司机数,用GROUP BY以线路号分组,HAVING过滤司机人数大于3的分组数据,ORDER BY的DESC(降序)实现司机数降序的排列
其中还使用了简单的多表连接将驾驶员表、车辆表和线路表三表连接查询
示例2:计算每个订单的金额,要求按照订单下单日期升序和订单金额降序显示订单 ID、订单下单日期、订单金额和顾客姓名
分析:由于需要统计每件商品的销售数量和销售金额,即便某种商品没有被订购过也需要显示,所以可以采用左外连接的方式依次建立商品表和订单明细表的联系
SELECT
goodsName '商品名',
SUM(quantity) '销售量',
SUM(quantity * unitPrice) '销售金额'
FROM
goods g
LEFT JOIN ordersdetail od ON g.goodsID = od.goodsID
GROUP BY
g.goodsID
ORDER BY
销售量,
销售金额
执行结果如图
某种商品没有被订购过也需要显示,注意要用外连接。
其中使用了聚合函数SUM()计算销售量与销售金额
连接查询的综合应用就是在连接查询的基础之上灵活使用聚合函数和分组查询以及MySQl函数