Sql server SQL Server查询分析

Sql server SQL Server查询分析,sql-server,join,Sql Server,Join,我是SQL新手,我仍在努力理解基本知识,因此我有一个应用程序数据库,用于比较互联网上的产品价格: 产品(产品标识、产品名称、产品描述、类别标识、类别名称、生产标识、生产名称) 产品属性(p\U id、属性名称、属性名称) 站点(站点id、站点名称、站点url) ProductPrice(p_id、站点id、起始日期、截止日期、价格、产品站点url) 此查询: SELECT MAX(p1.price - p2.price) FROM ProdcutPrice p1 JOI

我是SQL新手,我仍在努力理解基本知识,因此我有一个应用程序数据库,用于比较互联网上的产品价格:

  • 产品(产品标识、产品名称、产品描述、类别标识、类别名称、生产标识、生产名称)
  • 产品属性(p\U id、属性名称、属性名称)
  • 站点(站点id、站点名称、站点url)
  • ProductPrice(p_id、站点id、起始日期、截止日期、价格、产品站点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
JOIN
子句的工作方式是否与
internaljoin
类似?

MAX(expression)
在所有找到的记录中查找表达式的最大值(按
WHERE
过滤)。注意:如果未指定
分组依据
,则在所有记录中

JOIN
默认情况下,没有任何附加单词的
内部JOIN

样本:

产品价格

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
查询

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

实际上,
JOIN
相当于
internaljoin

如果在不使用
MAX()
aggregate函数的情况下运行查询,如下所示:

SELECT p1.price - p2.price
FROM ...
您将看到它返回一列。因此,对该列应用聚合是完全合法的,例如
MAX
SUM