SQL查询语句的练习
练习环境源码下载地址如需练习,可直接点前面的连接下载,练习环境为mysql,如果要使用其他语言,练习源码需,稍微修改一下。
答案截图示例:
SELECT * FROM `产品`;
1、单表查询
查询订购日期在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 (地区='华东' OR 地区='华南')
OR (城市 = '天津');
–查询位于“华东”或“华南”地区的供应商的ID、公司名称、地区、城市和电话字段的值
答案截图:
SELECT 供应商ID,公司名称,地区,城市,电话 FROM `供应商` WHERE (地区='华东' OR 地区='华南');
2、多表查询
查询订购日期在1996年7月1日至1996年7月15日之间的订单的订购日期、订单ID、相应订单的客户公司名称、负责订单的雇员的姓氏和名字等字段的值,并将查询结果按雇员的“姓氏”和“名字”字段的升序排列,“姓氏”和“名字”值相同的记录按“订单 ID”的降序排列
答案截图:
SELECT 订购日期, 订单ID, 公司名称, 姓氏, 名字
FROM 订单, 客户, 雇员
WHERE 订单.`雇员ID` = 雇员.`雇员ID`
AND 订单.`客户ID` = 客户.`客户ID`
AND 订单.订购日期 BETWEEN '1996-07-01' AND '1996-07-15'
ORDER BY convert(姓氏 using gbk)ASC, convert(名字 using gbk)ASC, convert(订单ID using gbk)DESC ;
–查询“10248”和“10254”号订单的订单ID、运货商的公司名称、订单上所订购的产品的名称
答案截图:
SELECT 订单.订单ID, 公司名称, 产品名称
FROM 订单
LEFT JOIN 运货商 ON 订单.`运货商` = 运货商.`运货商ID`
LEFT JOIN 订单明细 ON 订单.`订单ID` = 订单明细.`订单ID`
LEFT JOIN 产品 ON 订单明细.`产品ID` = 产品.`产品ID`
WHERE 订单.订单ID IN (10248, 10254);
–查询“10248”和“10254”号订单的订单ID、订单上所订购的产品的名称、数量、单价和折扣
答案截图:
SELECT 订单.订单ID, 产品名称, 单位数量, 订单明细.单价, 折扣
FROM 订单
LEFT JOIN 订单明细 ON 订单.`订单ID` = 订单明细.`订单ID`
LEFT JOIN 产品 ON 订单明细.`产品ID` = 产品.`产品ID`
WHERE 订单.订单ID IN (10248, 10254);
–查询“10248”和“10254”号订单的订单ID、订单上所订购的产品的名称及其销售金额
答:
SELECT 订单.订单ID, 产品名称, ROUND(订单明细.数量 * 订单明细.单价 * (1 - 折扣),2) AS 销售金额
FROM 订单
LEFT JOIN 订单明细 ON 订单.`订单ID` = 订单明细.`订单ID`
LEFT JOIN 产品 ON 订单明细.`产品ID` = 产品.`产品ID`
WHERE 订单.订单ID IN (10248, 10254);
3、综合查询
查询所有运货商的公司名称和电话
答案截图:
SELECT `公司名称`,`电话` FROM `运货商`
–查询所有客户的公司名称、电话、传真、地址、联系人姓名和联系人头衔
答案截图:
SELECT 公司名称, 电话, 传真, 地址, 联系人姓名, 联系人职务
FROM 客户
–查询单价介于10至30元的所有产品的产品ID、产品名称和库存量
答案截图:
SELECT 产品ID, 产品名称, 库存量
FROM 产品
WHERE 单价 BETWEEN 10 AND 30
–查询单价大于20元的所有产品的产品名称、单价以及供应商的公司名称、电话
答案截图:
SELECT 产品名称, 单价, 公司名称, 电话
FROM 产品
LEFT JOIN 供应商 ON 产品.`供应商ID` = 供应商.`供应商ID`
WHERE 单价 > 20
–查询上海和北京的客户在1996年订购的所有订单的订单ID、所订购的产品名称和数量
答案截图:
SELECT 订单.订单ID, 产品名称, 数量
FROM 订单
LEFT JOIN 订单明细 ON 订单.`订单ID` = 订单明细.`订单ID`
LEFT JOIN 客户 ON 订单.`客户ID` = 客户.`客户ID`
LEFT JOIN 产品 ON 订单明细.`产品ID` = 产品.`产品ID`
WHERE YEAR(订单.订购日期) = '1996'
AND 客户.`城市` IN ('上海', '北京');
–查询华北客户的每份订单的订单ID、产品名称和销售金额
答案截图:
SELECT 订单.订单ID, 产品名称, ROUND(订单明细.单价 * 订单明细.数量 * (1 - 折扣),2) AS 销售金额
FROM 订单
LEFT JOIN 订单明细 ON 订单.`订单ID` = 订单明细.`订单ID`
LEFT JOIN 客户 ON 订单.`客户ID` = 客户.`客户ID`
LEFT JOIN 产品 ON 订单明细.`产品ID` = 产品.`产品ID`
WHERE 客户.`地区` = '华北'
–按运货商公司名称,统计1997年由各个运货商承运的订单的总数量
答案截图:
SELECT 运货商.公司名称, COUNT(订单.运货商) AS 总数量
FROM 订单
LEFT JOIN 运货商 ON 订单.`运货商` = 运货商.运货商ID
WHERE YEAR(订单.发货日期) = '1997'
GROUP BY 公司名称
–统计1997年上半年的每份订单上所订购的产品的总数量
答案截图:
SELECT 订单.订单ID, SUM(订单明细.`数量`) AS 总数量(上半年)
FROM 订单
LEFT JOIN 订单明细 ON 订单.`订单ID` = 订单明细.`订单ID`
WHERE 订单.订购日期 BETWEEN '1997-01-01' AND '1997-06-31'
GROUP BY 订单.订单ID
–统计各类产品的平均价格
答案截图:
SELECT 产品.`类别ID`, ROUND(AVG(产品.`单价`),2) AS 平均价格
FROM 产品
GROUP BY 产品.类别ID
–统计各地区客户的总数量
答案截图:
SELECT 地区, COUNT(客户.地区) AS 客户总数量
FROM 客户
GROUP BY 客户.`地区`