首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

一个视图,该如何处理

2012-06-04 
一个视图下面是Northwind数据库的Product Sales for 1997这个视图的语句,里面有多个INNERJOIN,这个语句执

一个视图
下面是Northwind数据库的Product Sales for 1997这个视图的语句,里面有多个INNER JOIN,这个语句执行的时候INNER JOIN有没有执行的先后顺序啊,解释一下这个视图的执行过程

SQL code
SELECT     dbo.Categories.CategoryName, dbo.Products.ProductName, SUM(CONVERT(money, (dbo.[Order Details].UnitPrice * dbo.[Order Details].Quantity)                       * (1 - dbo.[Order Details].Discount) / 100) * 100) AS ProductSalesFROM         dbo.Categories INNER JOIN                      dbo.Products ON dbo.Categories.CategoryID = dbo.Products.CategoryID INNER JOIN                      dbo.Orders INNER JOIN                      dbo.[Order Details] ON dbo.Orders.OrderID = dbo.[Order Details].OrderID ON dbo.Products.ProductID = dbo.[Order Details].ProductIDWHERE     (dbo.Orders.ShippedDate BETWEEN '19970101' AND '19971231')GROUP BY dbo.Categories.CategoryName, dbo.Products.ProductName


[解决办法]
SQL code
SELECT dbo.Categories.CategoryName, dbo.Products.ProductName, SUM(                   --10           CONVERT(               MONEY, (dbo.[Order Details].UnitPrice*dbo.[Order Details].Quantity)               *(1- dbo.[Order Details].Discount)/100           )*100       ) AS ProductSales  FROM dbo.Categories  --1    INNER JOIN dbo.Products  --3        ON  dbo.Categories.CategoryID = dbo.Products.CategoryID --2    INNER JOIN dbo.Orders --7    INNER JOIN dbo.[Order Details] --5        ON  dbo.Orders.OrderID = dbo.[Order Details].OrderID --6        ON  dbo.Products.ProductID = dbo.[Order Details].ProductID --4WHERE (dbo.Orders.ShippedDate BETWEEN '19970101' AND '19971231') --8GROUP BY dbo.Categories.CategoryName, dbo.Products.ProductName --9
[解决办法]
SQL code
SQL Select语句完整的执行顺序: 1、from子句组装来自不同数据源的数据; 2、where子句基于指定的条件对记录行进行筛选; 3、group by子句将数据划分为多个分组; 4、使用聚集函数进行计算; 5、使用having子句筛选分组; 6、计算所有的表达式; 7、使用order by对结果集进行排序。 另外:一个查询语句各个部分的执行顺序: --8)  SELECT (9) DISTINCT (11) <TOP_specification> <select_list> --(1)  FROM <left_table> --(3)    <join_type> JOIN <right_table> --(2)      ON <join_condition> --(4)  WHERE <where_condition> --(5)  GROUP BY <group_by_list> --(6)  WITH {CUBE | ROLLUP} --(7)  HAVING <having_condition> --(10) ORDER BY <order_by_list> 

热点排行