帆软《零基础快速自学SQL》第一部分练习题及答案(Mysql)
单表查询
--查询订购日期在1996年7月1日至1996年7月15日之间的订单的订购日期、订单ID、客户ID和雇员ID等字段的值
SELECT * FROM 订单
WHERE 订购日期 BETWEEN '1996-07-01' AND '1996-07-15';
--查询供应商的ID、公司名称、地区、城市和电话字段的值。条件是“地区等于华北”并且“联系人头衔等于销售代表”。
SELECT
`供应商`.`供应商ID`,
`供应商`.`公司名称`,
`供应商`.`地区`,
`供应商`.`城市`,
`供应商`.`电话`
FROM
`供应商`
WHERE
`供应商`.`地区` = '华北'
AND `供应商`.`联系人职务` = '销售代表'
--查询供应商的ID、公司名称、地区、城市和电话字段的值。其中的一些供应商位于华东或华南地区,另外一些供应商所在的城市是天津
SELECT
`供应商`.`供应商ID`,
`供应商`.`公司名称`,
`供应商`.`地区`,
`供应商`.`城市`,
`供应商`.`电话`
FROM `供应商`
WHERE `供应商`.`地区` IN ('华东','华南')
OR `供应商`.`城市` = '天津';
--查询位于“华东”或“华南”地区的供应商的ID、公司名称、地区、城市和电话字段的值
SELECT
`供应商`.`供应商ID`,
`供应商`.`公司名称`,
`供应商`.`地区`,
`供应商`.`城市`,
`供应商`.`电话`
FROM `供应商`
WHERE `供应商`.`地区` IN ('华东','华南');
多表查询
--查询订购日期在1996年7月1日至1996年7月15日之间的订单的订购日期、订单ID、相应订单的客户公司名称、负责订单的雇员的姓氏和名字等字段的值,并将查询结果按雇员的“姓氏”和“名字”字段的升序排列,“姓氏”和“名字”值相同的记录按“订单 ID”的降序排列
SELECT
`订单`.`订购日期`,
`订单`.`订单ID`,
`客户`.`公司名称`,
`雇员`.`姓氏`,
`雇员`.`名字`
FROM `订单`, `雇员`, `客户`
WHERE `订单`.`客户ID`=`客户`.`客户ID`
AND `订单`.`雇员ID`=`雇员`.`雇员ID`
AND `订单`.`订购日期` BETWEEN '19996-07-01' AND '1996-07-16'
ORDER BY `雇员`.`姓氏`, `雇员`.`名字`, `订单`.`订单ID` DESC;
--查询“10248”和“10254”号订单的订单ID、运货商的公司名称、订单上所订购的产品的名称
SELECT `订单`.`订单ID`,
`运货商`.`公司名称`,
`产品`.`产品名称`
FROM `订单`, `运货商`, `订单明细`,`产品`
WHERE `订单`.`运货商`=`运货商`.`运货商ID`
AND `订单`.`订单ID`=`订单明细`.`订单ID`
AND `订单明细`.`产品ID`=`产品`.`产品ID`
AND `订单`.`订单ID` IN (10248, 10254);
--查询“10248”和“10254”号订单的订单ID、订单上所订购的产品的名称、数量、单价和折扣
SELECT `订单`.`订单ID`,
`产品`.`产品名称`,
`订单明细`.`数量`,
`订单明细`.`单价`,
`订单明细`.`折扣`
FROM `订单`, `订单明细`,`产品`
WHERE `订单`.`订单ID`=`订单明细`.`订单ID`
AND `订单明细`.`产品ID`=`产品`.`产品ID`
AND `订单`.`订单ID` IN (10248, 10254);
--查询“10248”和“10254”号订单的订单ID、订单上所订购的产品的名称及其销售金额
SELECT `订单`.`订单ID`,
`产品`.`产品名称`,
`订单明细`.`数量` * `订单明细`.`单价` AS '销售金额'
FROM `订单`, `订单明细`,`产品`
WHERE `订单`.`订单ID`=`订单明细`.`订单ID`
AND `订单明细`.`产品ID`=`产品`.`产品ID`
AND `订单`.`订单ID` IN (10248, 10254);
综合查询
--查询所有运货商的公司名称和电话
SELECT * FROM `运货商`;
--查询所有客户的公司名称、电话、传真、地址、联系人姓名和联系人头衔
SELECT `客户`.`公司名称`,
`客户`.`电话`,
`客户`.`传真`,
`客户`.`地址`,
`客户`.`联系人姓名`,
`客户`.`联系人职务`
FROM `客户`
--查询单价介于10至30元的所有产品的产品ID、产品名称和库存量
SELECT `产品`.`产品ID`, `产品`.`产品名称`, `产品`.`库存量`
FROM `产品`
WHERE 单价 BETWEEN 10 AND 30;
--查询单价大于20元的所有产品的产品名称、单价以及供应商的公司名称、电话
SELECT 产品名称, 单价, 公司名称, 电话
FROM 产品, 供应商
WHERE 产品.`供应商ID` = 供应商.`供应商ID`
AND 单价 > 20;
--查询上海和北京的客户在1996年订购的所有订单的订单ID、所订购的产品名称和数量
SELECT 订单.订单ID, 产品名称, 数量
FROM 订单, 订单明细, 产品, 客户
WHERE 订单.订单ID = 订单明细.订单ID
AND 订单明细.产品ID = 产品.产品ID
AND 订单.客户ID = 客户.客户ID
AND YEAR(订购日期) = 1996
AND 城市 IN ('上海','北京');
--查询华北客户的每份订单的订单ID、产品名称和销售金额
SELECT 订单.订单ID, 产品名称, 订单明细.单价*数量*(1-折扣) 销售金额
FROM 订单, 订单明细, 产品, 客户
WHERE 订单.订单ID = 订单明细.订单ID
AND 订单明细.产品ID = 产品.产品ID
AND 订单.客户ID = 客户.客户ID
AND 地区 = '华北';
--按运货商公司名称,统计1997年由各个运货商承运的订单的总数量
SELECT 公司名称, count(*) 订单总数
FROM 运货商, 订单
WHERE 订单.运货商 = 运货商.运货商ID
AND YEAR(发货日期) = 1997
GROUP BY 公司名称;
--统计1997年上半年的每份订单上所订购的产品的总数量
SELECT 订单.订单ID, SUM(数量) 总数量
FROM 订单, 订单明细
WHERE 订单.订单ID = 订单明细.订单ID
AND 订购日期 BETWEEN '1997-01-01' AND '1997-06-30'
GROUP BY 订单.订单ID;
--统计各类产品的平均价格
SELECT 类别名称,SUM(单价*库存量)/SUM(库存量) 平均价格
FROM 产品, 类别
WHERE 产品.类别ID = 类别.类别ID
GROUP BY 类别名称;
--统计各地区客户的总数量
SELECT 地区, COUNT(客户ID) 总数量 FROM 客户 GROUP BY 地区;