实验四 数据查询
实验名称:使用SQL SELECT语句的数据查询操作。
实验内容:在实验二和实验三的基础上完成规定的查询操作。 实验目的:熟练掌握SQL SELECT命令。
实验方法:在实验二和实验三的基础上使用SQL SELECT命令完成实验要求中所规定的各种查询。 实验要求:
用SQL SELECT命令完成以下查询(在完成查询时将题目中的x,y等根据实验三产生的数据具体化):
(1)~(12)是一般简单查询:
1. 职工表查询所有工资值(考虑去掉和不去掉重复值两种情况)。 2. 查询仓库表中的全部信息。 3. 查询工资多于x元的职工号。
4. 查询哪些仓库有工资多于y元的职工。
5. 给出在仓库x或y(x,y是仓库号)工作,并且工资少于z元的职工号。 6. 查询工资在x~y元范围内的职工信息(x>y)。 7. 从供应商表中查询出全部公司的信息(不要工厂或其他供应商的信息,即供应商名最后
两个汉字是“公司”的记录)。 8. 查询城市不是x的全部仓库信息。
9. 查询尚未确定供应商的订购单(即订购单的供应商号为空值的记录)。 10. 查询已经确定了供应商的订购单信息。 11. 按职工的工资值升序列出全部职工信息。
12. 先按仓库号升序,再按工资降序列出全部职工信息。
(13)~(21)使用连接查询:
13. 查询工资多于x元的职工号和他们所在的城市。
14. 查询工作在面积大于x的仓库的职工号以及这些职工工作所在的城市。
15. 根据职工表列出上一级经理及其职工(被其领导)的清单(即列出谁领导谁的清单)。 16. 列出仓库表和职工表的广义笛卡儿积的去处结果。
17. 根据仓库表和职工表的广义笛卡儿积得到仓库表和职工表进行自然连接的结果。
18. 查询供应商-订购单信息,查询结果中包括供应商号、供应商名、订购单号和订购日期
这4个字段。
19. 查询供应商-订购单信息,查询结果中包括供应商号、供应商名、订购单号和订购日期
这4个字段,要求结果中列出所有供应商信息(包括目前没有订购单的)。
20. 查询供应商-订购单信息,查询结果中包括供应商号、供应商名、订购单号和订购日期
这4个字段,要求结果中能够反映目前没有确定供应商的订购单情况。
21. 查询供应商-订购单信息,查询结果中包括供应商号、供应商名、订购单号和订购日期
这4个字段,要求结果即能反映目前没有订购半日的供应商信息,又能反映目前没有确定供应商的订购单情况。 提示:(18)~(21)分别用内连接、左连接、右连接和全连接完成,分析它们的效果。
(22)~(31)使用嵌套查询(注意使用ANY,ALL和EXISTS): 22. 查询哪些城市至少有一个仓库的职工的工资为x元。 23. 查询所有职工的工资都多于x元的仓库的信息。 24. 查询和职工x挣同样工资的所有职工信息。
25. 查询哪些城市的仓库向地址为x的供应商发出了订购单。
26. 查询地址为x的供应商目前有y城市仓库的订购单的供应商的名称(分别用嵌套查询和
连接查询完成,分析各自的效率)。
27. 查询有职工的工资大于或等于x仓库中任何一名职工的工资的仓库号。 28. 查询有职工的工资大于或等于x仓库中所有职工的工资的仓库号。 29. 列出每人职工经手的具有最高金额的订购单信息。 30. 查询目前还没有职工的仓库的信息。 31. 查询目前至少有一个职工的仓库的信息。
(32)~(42)汇总和分组查询: 32. 查询目前仓库所在城市的数目。
33. 查询目前需要支付的职工工资的总数。
34. 查询x和y两个城市的仓库职工的工资总和。
35. 查询所有职工的工资都多于x元的仓库的平均面积。 36. 查询工资大于x元的职工所经手的订购单的最高金额。 37. 查询每个仓库的职工的平均工资。
38. 查询每个仓库的订购单的最高金额、最低金额和平均金额。 39. 查询至少有5个订购项目的每张订购单的平均金额。 40. 列出职工全部记录并计算各仓库的平均工资和工资小计,最后给出全体职工的平均工资
和工资总和(使用COMPUTE…BY和COMPUTE)。 41. 列出全部订购单明细并计算各订购单的金额,最后给出所有订购单的平均金额和金额总
计(使用COMPUTE…BY和COMPUTE)。
42. 列出全部订购单记录并计算所有订购单的平均金额和金额总计(使用COMPUTE)。
相关命令:
SQL SELECT查询命令的基本框架如下(详细解释参见课文第3.5.1节):
SELECT [ALL|DISTINCT][TOP expression [PERCENT][WITH TIES]] select_list [ INTO new_table ] FROM table_source
[ WHERE search_condition ]
[ GROUP BY group_by_expression [ HAVING search_condition] ] [ ORDER BY order_expression [ ASC | DESC ] ]
[ COMPUTE {{AVG|COUNT|MAX|MIN|SUM}(expression)}[ ,...n ] [ BY expression [ ,...n ] ] ] 实验操作:
1:代码
1)
select 工资from kun.职工(去重复值)
select count (工资) from kun.职工 where 工资is not null (不去重复值) 2:
(查询有多少仓库) 2)
select (仓库号) from kun.仓库 where 仓库号is not null
(查询 仓库表里面有多少不同的城市)
select (城市) from kun.仓库where 城市is not null
(查询 仓库面积大于500的仓库的面积总和)
select sum (面积) from kun.仓库 where 面积>50 3:
select (职工号) from kun.职工where 工资>3000
4:select*from kun.仓库where 仓库号in(select 仓库号from kun.职工where 工资>3000)
5:select '职工号' from kun.职工where 仓库号in (select 仓库号from kun.职工where 工资<3000)