第7章 连接查询
语法:
内连接:
select fieldlist from table1 【inner】 join table2 on table1.column1 = table2.column2 【where condition】
自然连接:
select fieldlist from table1 natural join table2 【where condit】
三表连接查询的语法:
SELECT fieldlidt
FROM rable1
JOIN table2 ON table1.coulumn1=table2.column2_1
JOIN table3 ON table2.coulumn2_2=table3.column3
【where condition】
两表连接查询语法格式:
SELECT fieldlist FROM rable1,table2
WHERE rable1.column1=table2.column2
【and 其他条件】
一、查询bus数据库,实现如下需求:
1.统计每一家公交公司所属线路的站点总数
实现代码:
SELECT
l.company 公司名,
count(*) 站点总数
FROM
line l,
line_station ls
WHERE
l.lineNO = ls.lineNo
GROUP BY
公司名;
运行结果:
2.计算经过站点“解放大道古田四路”的公交线路的数量以及营运车辆数量
实现代码:
SELECT
count(*) 线路数量,
sum( number ) 运营车辆数
FROM
line l,
line_station ls
WHERE
l.lineNo = ls.lineNo
AND station = '解放大道古田四路';
运行结果:
3.计算每条公交线路的司机人数,并显示司机人数大于 3 的分组信息,按司机人数逆序显示;
实现代码:
SELECT
l.lineID 线路ID,
l.lineNo 线路号,
count(*) 司机人数
FROM
line l,
vehicle v,
driver d
WHERE
l.lineID = v.lineID
AND d.driverID = v.driverID
GROUP BY
lineNo
ORDER BY
司机人数 desc;
运行结果:
二、查询easyshopping数据库,实现如下需求:
1.统计每件商品的销售数量和销售金额,要求按照销售量和销售金额升序显示商品名、销售量和销售金额
思路:
由于需要统计每件商品的销售数量和销售金额,即使某种商品没有被订购过也需要显示,所以可以采用左连接的方法依次建立商品表和订单明细表的联系
运行代码:
SELECT
g.goodsName 商品名,
sum( od.quantity ) 销量,
sum( od.quantity * g.unitPrice ) 销售金额
FROM
ordersdetail od,
goods g
WHERE
g.goodsID = od.goodsID
GROUP BY
商品名
ORDER BY
销量,销售金额;
运行结果:
2.计算每个订单的金额,要求按照订单下单日期升序和订单金额降序显示订单 ID、订单下单日期、订单金额和顾客姓名
思路:
需要连接订单表,订单明细表,商品表和客户表。
实现代码:
SELECT
o.ordersID 订单ID,
o.ordersDate 下单日期,
sum( od.quantity * g.unitPrice )订单金额,
c.cName 客户名
FROM
orders o,
ordersdetail od,
goods g,
customer c
WHERE
o.ordersID = od.ordersID
AND od.goodsID = g.goodsID
AND o.customerID = c.customerID
GROUP BY
o.ordersID
ORDER BY
下单日期,
订单金额 DESC
运行结果:
注意:明确表名,记住代码