实验报告无情的搬运工
一、实验目的与要求
1、掌握SQL单表及多表之间的查询
2、掌握统计及分组函数
二、实验内容
1. 简单查询
① 从fruits表中检索s_id为100的供货商所供货的水果名和价格
代码如下(示例):
SELECT f_name,f_price
FROM fruits
WHERE s_id=100;
运行测试结果截图:
② 查找名称为“apple”的水果的价格
源码:
SELECT f_price
FROM fruits
WHERE f_name='apple';
运行测试结果截图:
③ 查询价格在2.00元到10.20元之间的水果名称和价格,先按f_price降序排序,再按f_name排序。
源码:
SELECT f_name,f_price
FROM fruits
WHERE f_price BETWEEN 2.00 AND 10.20
ORDER BY f_price DESC,f_name DESC;
运行测试结果截图:
④ 在fruits表中,查询f_name中包含字母‘g’的记录
源码:
SELECT *
FROM fruits
WHERE f_name LIKE'%g%';
运行测试结果截图:
⑤ 查询customers表中c_email不为空的记录的c_id、c_name和c_email字段值
源码:
SELECT c_id,c_name,c_email
FROM customers
WHERE c_email IS NOT NULL;
运行测试结果截图:
① 根据s_id对fruits表中的数据进行分组,并显示水果种类大于1的分组信息,效果如下图所示(GROUP_CONCAT函数)
源码:
SELECT s_id,GROUP_CONCAT(f_name)AS NAMES
FROM fruits
GROUP BY s_id HAVING COUNT(f_name)>1;
运行测试结果截图:
2.2. 多表查询
① 查询供应‘a1’的水果供应商提供的其他水果种类
源码:
SELECT x.f_id
FROM fruits AS x,fruits AS y
WHERE x.`s_id`=y.`s_id`
AND y.`f_id`='a1';
运行测试结果截图:
② 在orderitems表中查询f_id为c0的订单号,并显示具有该订单号的客户c_id
源码:
SELECT c_id
FROM orders
WHERE o_num
IN (
SELECT o_num
FROM orderitems
WHERE f_id='c0');
运行测试结果截图:
③ 查询客户c_id为10000的所有订单的总价格
源码:
SELECT
c_id,SUM(quantity*item_price) 总价格
FROM orderitems LEFT JOIN orders
ON orderitems.`o_num`=orders.`o_num`
WHERE ORDERS.`c_id`=10000;
运行测试结果截图:
④ 查询s_city等于“Tianjin”的供应商,并显示所有该供应商提供的水果的种类,效果如下图所示
源码:
SELECT fruits.s_id,fruits.f_name
FROM fruits LEFT JOIN suppliers
ON suppliers.`s_id`=fruits.`s_id`
WHERE suppliers.s_city='Tianjin';
运行测试结果截图:
⑤ 查询订单为‘30005’的所有水果供货商的名称
源码:
SELECT s_name
FROM(
SELECT suppliers.s_name,orderitems.`o_num`
FROM fruits,orderitems,suppliers
WHERE fruits.`f_id`=orderitems.`f_id`
AND fruits.`s_id`=suppliers.`s_id`)s
WHERE s.`o_num`='30005'
运行测试结果截图:
⑥ 查询销量最多的水果名称
源码:
SELECT fruits.`f_name`
FROM orderitems,fruits
WHERE orderitems.`f_id`=fruits.`f_id`
ORDER BY orderitems.`quantity` DESC
LIMIT 1;
运行测试结果截图:
三、实验小结
1.实验中遇到的问题及解决过程
除了一些在理解题意不大清楚的地方外,有问题的在于最后一题最大值,原本第一想法用聚集函数写,发现自己写不出来,就换了一个土方法,limit1,虽然土,但是很有效。
还有多表联系的题里由于不是很熟悉就得比较繁琐的多看几遍才能看出联系。
2.实验中产生的错误及原因分析
目前是没发现什么错误,可能是因为一鼓作气写下来的原因,说不定下次就发现了。
3.实验体会和收获。
感觉跟上次PTA的查询内容差不多,或者说相比起来或许要简单,也可能是经历了PTA的锻炼后就觉得还好,
在数据库的查询方面对于知识点能够更熟悉,而且觉得条条大路通罗马,觉得一道题有多种方法,但是我觉得最土的最笨的方法在每道题都能搞定,当然在一些题里就会显得很繁琐,所以掌握多种方法挺好的,突然想起了那次测试,感觉一题五种方法比五题一种方法更让人觉得有趣兴奋。