一、实验目的与要求
1、掌握SQL单表及多表之间的查询
2、掌握统计及分组函数
二、实验内容
1.简单查询
① 从fruits表中检索s_id为100的供货商所供货的水果名和价格
(教师实验所给数据集中无符合条件的数据,自行插入了两条)
源码:
② 查找名称为“apple”的水果的价格
源码:
③ 查询价格在2.00元到10.20元之间的水果名称和价格,先按f_price降序排序,再按f_name排序。
源码:
④ 在fruits表中,查询f_name中包含字母‘g’的记录
源码:
⑤ 查询customers表中c_email不为空的记录的c_id、c_name和c_email字段值
源码:
⑥ 根据s_id对fruits表中的数据进行分组,并显示水果种类大于1的分组信息,效果如下图所示(GROUP_CONCAT函数)
2.多表查询
① 查询供应‘a1’的水果供应商提供的其他水果种类
源码:
② 在orderitems表中查询f_id为c0的订单号,并显示具有该订单号的客户c_id
源码:
③ 查询客户c_id为10000的所有订单的总价格
(原数据中无符合条件的数据,自行插入了两条)
源码:
④ 查询s_city等于“Tianjin”的供应商,并显示所有该供应商提供的水果的种类,效果如下图所示
⑤ 查询订单为‘30005’的所有水果供货商的名称
源码:
⑥ 查询销量最多的水果名称
源码:
⑦ 查询‘10000’号客户购买水果所花费的金额:类似
⑧ 显示购买了’107’号供货商所有水果的用户信息
步骤:先向数据表orders表中插入两条记录(30010,当前时间,10000)和(30008,当前时间,10004),在orderitems表中插入五条记录(30010,1,b5,10,3.6)、(30010,2,b2,5,7.6)、(30010,3,t4,7,3.6)、(30008,1,b1,10,102)、(30008,2,b5,10,3.6);然后再做题
源码:
运行测试结果截图:
三、思考题
结合实际应用并分析查找给定表中结构或数据是否存在问题,如何改进?
答:感觉表的数量略多,数据有些冗杂,可以考虑适当进行优化,如外键的字段编入索引而不进行全表扫描。
四、实验小结
1.实验中遇到的问题及解决过程
①查询表中含有字母“g”的数据时,没有查到有效结果。
解决:给需要查找的字母加一对’%’即可。
②最后一题收集表中数据不能加*
2.实验中产生的错误及原因分析
①运用多表查询时报错,代码有误
②计算订单总价格错误
原因分析:没仔细读题,直接返回了单价,应当用数量乘以单价得总价格。
③查询销量最多的水果名时,返回了多组数据
原因分析:应当用LIMIT限制返回数据的条数
3.实验体会和收获
①开始时不会做多表查询第三题中的求总价格,查资料之后学会了sum求和函数的用法。
②学会了函数group_concat用法。
③学会了统计及分组函数。
实验二的代码当时没有保存下来…只找到了截图,可能会影响观感,见谅。