数据库查询的执行顺序

通过题目的形式来分析,题目如下

该题目的数据
productID   productName                                        cost        price
----------- -----------------                                 ----------- -----------
1           笔记本电脑                                              3000        4000
2           台式电脑                                               2000        3500
3           数码相机                                               1500        2500

(
3 行受影响)

businessmanID businessmanName                                    SellProductID SellProductCount
------------- -------------------------------------------------- ------------- ----------------
1             太平洋电脑城                                             1             5
1             太平洋电脑城                                             2             4
2             颐高数码                                               2             2
2             颐高数码                                               3             5


求每个销售商和他的总利润
答案如下格式
businessmanName    利润(利润
=(价格price - 成本cost) * 销售数量sellProductCount)
太平洋电脑城            XXXX
颐高数码                XXXX

businessmanname                                    利润
-------------------------------------------------- -----------
太平洋电脑城                                             11000
颐高数码                                               
8000


首先我们需要连接两个表

得到

1


选择我们需要的两列

2

 答案已经显而易见了 只需要再聚合分组一下便OK

SELECT businessmanname,SUM((price-cost)*sellproductcount)利润 FROM temp_businessman a inner join temp_products b ON a.sellproductid=b.productid
GROUP BY businessmanname

businessmanname 利润
--------------- -----------
太平洋电脑城          11000
颐高数码            
8000

我是这么理解的

1. DBMS首先执行from子句,根据from子句中的一个或者多个表创建中间表。如上,有两个表,那么执行第一步。得到一个包含两张表数据的工作表。

2. 执行select子句,去掉工作表中不需要的列

3.  如果有where子句,那么用where子句来筛选过滤第一步得到的工作表,去掉不合规矩的行

4. 执行group by 子句,分组并聚合不在分组列的其他列

5. 执行having 子句,(having子句的列必须包含在分组或者聚合列中)

6. order by 子句


  欢迎讨论

原文地址:https://www.cnblogs.com/jianjialin/p/1402707.html