SQL练习

northwind中文数据表题目及解答
—— 感谢微信公众号 【数据分析不是个事儿】 提供的教程,包括软件及数据表和题目。
note:

  1. SQL新手,仅供参阅,欢迎交流。

northwind中文数据表题目及解答

单表查询

  1. 查询订购日期在1996年7月1日至1996年7月15日之间的订单的订购日期、订单ID、客户ID和雇员ID等字段的值
SELECT `订购日期`, `订单ID`, `客户ID`, `雇员ID` FROM `订单` 
WHERE `订购日期` <= '1996-07-15' AND `订购日期` >= '1996-07-01' 
SELECT `订购日期`, `订单ID`, `客户ID`, `雇员ID` FROM `订单` 
WHERE `订购日期` BETWEEN '1996-07-01' AND '1996-07-15'
#包括了0715!;
  1. 查询“Northwind”示例数据库中供应商的ID、公司名称、地区、城市和电话字段的值。条件是“地区等于华北”并且“联系人头衔等于销售代表”。
SELECT `供应商ID`,`公司名称`,`地区`,`城市`,`电话` FROM `供应商`
WHERE `地区`= '华北' AND `联系人职务`='销售代表'
  1. 查询“Northwind”示例数据库中供应商的ID、公司名称、地区、城市和电话字段的值。其中的一些供应商位于华东或华南地区,另外一些供应商所在的城市是天津
SELECT `供应商ID`,`公司名称`,`地区`,`城市`,`电话` FROM `供应商`
WHERE `地区`= '华南' OR `地区` = '华东' OR `城市`='天津'A code block
var foo = 'bar';
  1. 查询“Northwind”示例数据库中位于“华东”或“华南”地区的供应商的ID、公司名称、地区、城市和电话字段的值
//SELECT `供应商ID`,`公司名称`,`地区`,`城市`,`电话` FROM `供应商`
WHERE `地区`= '华南' OR `地区` = '华东'

多表查询

  1. 查询订购日期在1996年7月1日至1996年7月15日之间的订单的订购日期、订单ID、相应订单的客户公司名称、负责订单的雇员的姓氏和名字等字段的值,并将查询结果按雇员的“姓氏”和“名字”字段的升序排列,“姓氏”和“名字”值相同的记录按“订单 ID”的降序排列
SELECT 订单.`订购日期`,订单.`订单ID`,客户.`公司名称`,雇员.`姓氏`,雇员.`名字`
FROM 订单,客户,雇员
WHERE 订单.`客户ID`= 客户.`客户ID` AND 订单.`雇员ID`=雇员.`雇员ID` 
AND `订购日期` < '1996-07-15' AND `订购日期` > '1996-07-01' 
ORDER BY 雇员.`姓氏`,雇员.`名字` ASC, 订单.`订单ID` DESC
SELECT 订单.`订购日期`,订单.`订单ID`,客户.`公司名称`,雇员.`姓氏`,雇员.`名字`
FROM 订单 JOIN 客户 JOIN 雇员
ON 订单.`客户ID`= 客户.`客户ID` AND 订单.`雇员ID`=雇员.`雇员ID` 
WHERE `订购日期` < '1996-07-15' AND `订购日期` > '1996-07-01' 
ORDER BY 雇员.`姓氏`,雇员.`名字` ASC, 订单.`订单ID` DESC
  1. 查询“10248”和“10254”号订单的订单ID、运货商的公司名称、订单上所订购的产品的名称
SELECT 订单.`订单ID`,运货商.`公司名称`,产品.`产品名称`
FROM `订单`,`运货商`,`产品`,`订单明细`
WHERE 订单.`运货商`= 运货商.`运货商ID`
AND 订单.`订单ID`=订单明细.`订单ID` AND 订单明细.`产品ID`= 产品.`产品ID` 
AND (订单.`订单ID` = 10248 OR 订单.`订单ID` = 10254)
SELECT 订单.`订单ID`,运货商.`公司名称`,产品.`产品名称`
FROM `订单` JOIN `运货商` ON 订单.`运货商`= 运货商.`运货商ID`
JOIN `订单明细` ON 订单.`订单ID`=订单明细.`订单ID`
JOIN `产品` ON 订单明细.`产品ID`= 产品.`产品ID`
WHERE 订单.`订单ID` = 10248 OR 订单.`订单ID` = 10254
  1. 查询“10248”和“10254”号订单的订单ID、订单上所订购的产品的名称、数量、单价和折扣
SELECT 订单.`订单ID`,运货商.`公司名称`,产品.`产品名称`
SELECT 订单.`订单ID`,产品.`产品名称`,`订单明细`.`数量`,`订单明细`.`单价`,`订单明细`.`折扣`
FROM `订单`,`订单明细`,`产品`
WHERE 订单.`订单ID`=订单明细.`订单ID` AND 订单明细.`产品ID`= 产品.`产品ID` 
AND (订单.`订单ID` = 10248 OR 订单.`订单ID` = 10254)
SELECT 订单.`订单ID`,产品.`产品名称`,`订单明细`.`数量`,`订单明细`.`单价`,`订单明细`.`折扣`
FROM `订单` JOIN `订单明细` ON 订单.`订单ID`=订单明细.`订单ID` 
JOIN `产品` ON 订单明细.`产品ID`= 产品.`产品ID` 
WHERE (订单.`订单ID` = 10248 OR 订单.`订单ID` = 10254)
  1. 查询“10248”和“10254”号订单的订单ID、订单上所订购的产品的名称及其销售金额
SELECT 订单.`订单ID`,产品.`产品名称`,订单明细.`单价`*订单明细.`数量`*(1-订单明细.`折扣`) AS 销售金额
FROM `订单`,`订单明细`,`产品`
WHERE 订单.`订单ID`=订单明细.`订单ID` AND 订单明细.`产品ID`= 产品.`产品ID` 
AND 订单.`订单ID` BETWEEN 10248 AND 10254
Select  订单.`订单ID`,产品.`产品名称`,订单明细.`单价`*订单明细.`数量`*(1-订单明细.`折扣`) AS 销售金额
From  `订单明细` join `订单` on 订单明细.`订单ID`=订单.`订单ID`
join `产品` on 订单明细.`产品ID`= 产品.`产品ID` 
WHERE 订单明细.`订单ID` = 10248 OR 订单明细.`订单ID` = 10254

综合查询

  1. 查询所有运货商的公司名称和电话
SELECT DISTINCT`公司名称`,`电话`
FROM `运货商`
  1. 查询所有客户的公司名称、电话、传真、地址、联系人姓名和联系人头衔
SELECT 客户.`公司名称`,`客户`.`电话`,`客户`.`传真`,`客户`.`地址`,`客户`.`联系人姓名`,`客户`.`联系人职务`
FROM `客户`
  1. 查询单价介于10至30元的所有产品的产品ID、产品名称和库存量
SELECT `产品ID`,`产品名称`,`库存量`
FROM `产品`
WHERE `单价` BETWEEN 10 AND 30
  1. 查询单价大于20元的所有产品的产品名称、单价以及供应商的公司名称、电话
SELECT `产品`.`产品名称`,`产品`.`单价`,`供应商`.`公司名称`,`供应商`.`电话`
FROM `产品` JOIN `供应商`
ON `产品`.`供应商ID` = `供应商`.`供应商ID`
WHERE 产品.`单价` > 20
  1. 查询上海和北京的客户在1996年订购的所有订单的订单ID、所订购的产品名称和数量
SELECT `订单`.`订单ID`,`产品`.`产品名称`,`订单明细`.`数量`,`订单`.`订购日期`,`客户`.`城市`
FROM `订单`,`订单明细`,`产品`,`客户`
WHERE `订单`.`订单ID`=`订单明细`.`订单ID`
AND `订单明细`.`产品ID`=`产品`.`产品ID` 
AND `订单`.`客户ID`=`客户`.`客户ID` 
AND `订单`.`订购日期` BETWEEN '1996-01-01' AND '1996-12-31'
AND (`客户`.`城市` = '北京' OR `客户`.`城市` = '上海')
  1. 查询华北客户的每份订单的订单ID、产品名称和销售金额
SELECT `订单`.`订单ID`,`产品`.`产品名称`,`订单明细`.`单价` * `订单明细`.`数量` * (1-`订单明细`.`折扣`) AS 销售金额
FROM `订单`,`订单明细`,`产品`,`客户`
WHERE `订单`.`订单ID`=`订单明细`.`订单ID`
AND `订单明细`.`产品ID`=`产品`.`产品ID`
AND `订单`.`客户ID` = `客户`.`客户ID`
AND `客户`.`地区`='华北'
  1. 按运货商公司名称,统计1997年由各个运货商承运的订单的总数量
SELECT `运货商`.`公司名称`,COUNT(*) AS 承运总数量
FROM `订单`,`运货商`
WHERE `订单`.`运货商` = `运货商`.`运货商ID`
AND `订单`.`发货日期` BETWEEN '1997-01-01' AND '1997-12-31'
GROUP BY 订单.`运货商`
SELECT `运货商`.`公司名称`,COUNT(*) AS 承运总数量
FROM `订单`,`运货商`
WHERE `订单`.`运货商` = `运货商`.`运货商ID`
AND YEAR(`订单`.`发货日期`)=1997
GROUP BY 订单.`运货商`
  1. 统计1997年上半年的每份订单上所订购的产品的总数量
SELECT `订单`.`订单ID`,SUM(`订单明细`.`数量`) AS 产品总数量
FROM `订单明细`,`订单`
WHERE `订单`.`订单ID` = `订单明细`.`订单ID`
AND `订单`.`订购日期` BETWEEN '1997-01-01' AND '1997-06-30'
GROUP BY `订单明细`.`订单ID`
  1. 统计各类产品的平均价格
SELECT `类别`.`类别名称`, AVG(`产品`.`单价`) AS 各类别单价
FROM `产品` JOIN `类别` ON `产品`.`类别ID` = `类别`.`类别ID`
GROUP BY `产品`.`类别ID`
  1. 统计各地区客户的总数量
SELECT `客户`.`地区`,COUNT(*) AS 该地区客户总数量
FROM `客户`
GROUP BY `客户`.`地区`
SELECT COUNT(*) 
FROM `客户`
WHERE `地区` IS NOT NULL
GROUP BY `地区`
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值