SQL Server查询分析

时间:2017-04-09 18:37:44

标签: sql-server join

我是SQL的新手,我还在尝试理解基本的东西,所以我有一个应用程序数据库来比较互联网上的产品价格:

  • 产品(p_id,p_name,p_description,category_id,category_name,manuf_id,manuf_name)
  • Product_attributes(p_id,attribute_name,attribute_name)
  • 网站(site_id,site_name,site_url)
  • ProductPrice(p_id,site_id,from_date,to_date,price,product_site_url)

和这个查询:

SELECT 
    MAX(p1.price - p2.price)
FROM 
    ProdcutPrice p1 
JOIN
    ProdcutPrice p2 ON p1.p_id = p2.p_id AND p1.site_id <> p2.site_id 
WHERE 
    p1.p_id = 18 AND to_date IS NULL

现在我正在尝试理解这个查询的作用,我很难理解MAX函数,因为我知道它应该返回所选列的最大值。语法应为

SELECT MAX(column_name) 
FROM table_name;

JOIN子句的工作方式是INNER JOIN吗?

2 个答案:

答案 0 :(得分:0)

MAX(expression)在所有找到的记录中找到最大值的表达式(按WHERE过滤)。注意:如果您没有指定GROUP BY,则在所有记录中。

JOIN默认情况下,INNER JOIN没有任何其他字词。

样品:

<强> ProductPrice

p_id | site_id | price
-----|---------|------
18   | 1       | 10
18   | 2       | 5
18   | 3       | 7

<强>查询

p1.p_id | p1.site_id | p1.price | p2.p_id | p2.site_id | p2.price | p1.price-p2.price
--------|------------|----------|----- ---|------------|----------|------------------
18      | 1          | 10       | 18      | 2          | 5        | 5 (max)
18      | 1          | 10       | 18      | 3          | 7        | 3
18      | 2          | 5        | 18      | 1          | 10       | -5
18      | 2          | 5        | 18      | 3          | 7        | -2
18      | 3          | 7        | 18      | 1          | 10       | -3
18      | 3          | 7        | 18      | 2          | 5        | 2

答案 1 :(得分:0)

确实JOIN相当于INNER JOIN

如果您运行没有MAX()聚合函数的查询,请执行以下操作:

SELECT p1.price - p2.price
FROM ...

你会看到它返回一列。因此,将聚合应用于此列是完全合法的,例如MAXSUM