帆软《零基础快速自学SQL》第一部分练习题及答案(Mysql)

单表查询

--查询订购日期在199671日至1996715日之间的订单的订购日期、订单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 ('华东','华南');

 

多表查询

--查询订购日期在199671日至1996715日之间的订单的订购日期、订单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   `客户`

 

--查询单价介于1030元的所有产品的产品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 地区;