7.2 多表连接查询
7.2.1 多表连接查询方法
多表连接查询语法
SELECT
fieldlist
FROM
table1
JOIN table2 ON table1.coulumn1 = teable2.coulumn2_1
JOIN table3 ON table2.coulmn2_2 = table3.coulumn3 [ WHERE CONDITION ]
说明(1)table2与table1和table3 两两相连
(2)三表以上连接查询的方法与三表连接查询的方法一样,均是通过两两相连的方式实现。
72.2 多表连接查询应用
示例
分析:车牌号和型号来源于车辆表(vehicle);司机姓名来源于司机表(driver);线路号、起点站终点站来源于线路表(line),所以要连接三张表:车辆表,司机表,线路表
SQL语句如下:
SELECT NAME
司机姓名,
plateNo 车牌号,
model 型号,
lineNo 线路号,
FROM_station 起点站,
end_station 终点站
FROM
Vehicle V
JOIN driver D ON V.driverID = D.driverID
JOIN line L ON V.lineID = L.lineID
WHERE
type = '非空调车';
注意:表的关联有没有错,字段名写完之后不需要逗号隔开。
7.2.3 简单多表连接查询
简单多表连接查询语法
SELECT
fieldlist
FROM
table1,
table2,
table3
WHERE
table1.column1 = table2.column2_1
AND table2.column2_2 = table3.column3 [
AND 其他条件]
7.2.4 实践练习
(1)采用简单多表连接查询 连接三张表:订单表、订单明细表和商品表 且获取ID为4 的订购明细信息,输出商品名、单价、和件数
SELECT
goodsName 商品名,
unitPrice 单价,
quantity 件数
FROM
orders o,
ordersdetail od,
goods g
WHERE
o.ordersID = od.ordersID
AND od.goodsID = g.goodsID
AND o.ordersID =4
(2)连接4张表:客户表、订单表、订单明细表和商品表
SELECT
o.ordersID 订单ID,
ordersDate 下单日期,
goodsName 商品名,
unitPrice 单价,
quantity 件数
FROM
customer c,
orders o,
ordersdetail od,
goods g
WHERE
c.customerID = o.customerID
AND o.ordersID = od.ordersID
AND od.goodsID = g.goodsID
AND cName = '王传华'
7.3.4 实践练习
(1)由于需要获取所有客户的基本信息,如果采用左连接加以实现,必须从左至右依次连接客户表和订单表,此时客户表将作为坐表,
SELECT
cName 姓名,
ordersID 订单ID,
ordersDate 下单日期
FROM
customer c
LEFT JOIN orders o ON c.customerID = o.customerID
如果采用右连接,从左至右依次连接订单表和客户表,此时客户表作为右表
SELECT
cName 姓名,
ordersID 订单ID,
ordersDate 下单日期
FROM
orders o
RIGHT JOIN customer c ON o.customerID = c.customerID
7.4.2
(1)由于需要统计每件商品的销售数量和销售金额,即便某种商品没有被订购过也需要显示,所以采用左连接的方式依次建立商品表和订单明细表的联系
SELECT
g.goodsName 商品名,
SUM( od.quantity ) 销售量,
SUM( od.quantity * g.unitPrice ) 销售金额
FROM
goods g
LEFT JOIN ordersdetail od ON g.goodsID = od.goodsID
GROUP BY
g.goodsID
ORDER BY
销售量,
销售金额
(2)需要连接订单表,订单明细表,商品表和客户表,
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