三表查询、统计

本文介绍了一种使用SQL查询来统计订单、销售及采购金额的方法。通过左连接的方式将订单表、销售表和采购表关联起来,并计算每个订单对应的销售总额和采购总额。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一张订单表

estimate_id title

一张销售表

sell_id estimate_id no sprice snum

一张采购表

buy_id estimate_id no bprice bnum

一个订单对应多个销售和采购(estimate_id),一个销售对应多个采购(no)

查询的结果:

title   scount    bcount 

XX     10.00        5.00

BB                               (注:这种情况可能是只有订单,还没有销售和采购)

AA    100.00     45.00

 ..         ....             .....

SQL语句:

SELECT e. * , s.scount, b.bcount 
FROM tb_estimate AS e
LEFT JOIN (
	SELECT SUM( sprice * snum ) AS scount, estimate_id
	FROM tb_sell
	WHERE deleted =0
	GROUP BY estimate_id
) AS s ON e.estimate_id = s.estimate_id
LEFT JOIN (
	SELECT SUM( bprice * bnum ) AS bcount, estimate_id
	FROM tb_buy
	WHERE deleted =0
	GROUP BY estimate_id
) AS b ON b.estimate_id = e.estimate_id
WHERE e.deleted =0
ORDER BY updated DESC


一、实验目的 1、掌握SQL Server查询分析器的使用方法,加深对SQL和Transact-SQL语言查询语句的理解。 2、熟练掌握数据查询中的分组、统计、计算与集合查询方法。 二、实验环境: Microsoft Windows 2000操作系统,Microsoft SQL Server 2000数据库管理系统标准版或企业版。 、实验内容、步骤、结果和实验过程中出现的问题: 1>内容: 基于实验一建立的 “图书读者数据库”(Book_Reader_DB)和实验二输入的部分虚拟数据,在SQL Server 2000查询分析器的Transact-SQL语句输入区输入Transact-SQL语句,然后点击“查询”菜单中的“执行”菜单项(或用F5快捷键),执行输入区的Transact-SQL语句。 1、集合查询实验 在“图书读者数据库”(Book_Reader_DB)中,用集合查询的方法完成下列查询任务: ① 查询计算机类和机械工业出版社出版的图书; ② 查询清华大学出版社出版的书中与机械工业出版社出版的所有不相同的图书号与书名; ③ 查询清华大学出版社出版的书与环境类图书的交集; ④ 查询借阅过清华大学出版社出版的“数据结构” 图书和西安电子工业出版社出版的“操作系统”图书的读者号的集; 2、统计查询实验 在“图书读者数据库”(Book_Reader_DB)中,用分组、统计与计算的方法完成下列查询任务: ① 查找这样的图书类别:要求类别中最高的图书定价不低于全部按类别分组的图书平均定价的2倍; ② 求机械工业出版社出版的各类图书的平均定价,用Group by来实现; ③ 列出计算机类图书的书号、名称及价格,最后求出册数和总价格; ④ 列出计算机类图书的书号、名称及价格,求出各出版社这类书的总价格,最后求出全部册数和总价格; ⑤ 查询订购图书最多的出版社及订购图书的数量; ⑥ 查询2000年以后购买的图书总册数; ⑦ 计算各类图书的总册数; ⑧ 查询每本图书的平均借阅次数;
### MySQL 中连接查询示例 #### 使用 INNER JOIN 进行多关联 当需要从多个中获取数据基于某些条件进行匹配时,可以使用 `INNER JOIN` 来实现。假设存在:`orders`, `customers` 和 `products`。 ```sql SELECT o.order_id, c.customer_name, p.product_name FROM orders AS o INNER JOIN customers AS c ON o.customer_id = c.customer_id INNER JOIN products AS p ON o.product_id = p.product_id; ``` 此 SQL 语句会返回订单详情、客户名称以及产品名称的信息[^1]。 #### 多重 LEFT JOIN 的应用案例 如果希望即使右侧没有对应记录也能显示左侧的数据,则可采用 `LEFT JOIN`: ```sql SELECT a.article_title, u.user_name, t.tag_name FROM articles AS a LEFT JOIN users AS u ON a.author_id = u.user_id LEFT JOIN tags AS t ON a.tag_id = t.tag_id WHERE a.publish_date >= DATE_SUB(CURDATE(), INTERVAL 7 DAY); ``` 这段代码用于查找最近一周内发布文章及其作者和标签信息;对于那些未被分配给任何用户的匿名帖子同样会被列出[^2]。 #### 练习题目建议 为了更好地掌握格之间的联结操作,以下是几个推荐练习方向: - 尝试构建涉及四个甚至更多实体关系模型,编写相应的 SELECT 查询来检索特定字段组合; - 探索不同类型的 JOIN (如 RIGHT JOIN 或 FULL OUTER JOIN),理解它们之间差异通过实际例子加以区分; - 结合聚合函数 SUM()、AVG() 等统计分析功能,在复杂查询结构下计算汇总数值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值