两个SQL查询之间的区别以及何时使用每个

时间:2019-03-04 08:26:29

标签: sql sql-server

实际上,我对两个SQL查询感到困惑。两者都给我相同的结果,但是哪个是首选,何时使用它们中的每一个?

UPDATE Names  
SET Names.PhoneNumber = Phones.PhoneNumber 
FROM Names  INNER JOIN  Phones ON Names.id = Phones.id

UPDATE Names 
SET Names.PhoneNumber = Phones.PhoneNumber 
FROM Phones WHERE Names.ID = Phones.ID

3 个答案:

答案 0 :(得分:1)

它们是相同的。实际上,他们应该生成相同的执行计划。

尽管没有理由选择一个,但通常使用JOIN格式。原因很简单:SQL Server不支持UPDATE表的别名。因此,这不起作用:

UPDATE Names n
    SET n.PhoneNumber = p.PhoneNumber 
    FROM Phones p 
    WHERE n.id = p.id;

但是,这很好:

UPDATE n  
    SET n.PhoneNumber = p.PhoneNumber 
    FROM Names n INNER JOIN
         Phones p
         ON n.id = p.id;

还可以使用显式JOIN来使用LEFT JOIN

不利的一面是,隐式JOIN版本与更多数据库兼容-特别是Postgres支持此语法。

答案 1 :(得分:0)

您观察到相同的结果,因为它们的含义相同。两种查询的区别在于性能。 当我们执行两个查询时,性能会有所不同,这是由于计划者将执行计划放在一起所致。 WHERE子句->他的计划者正在选择一条更有效的路线 联接->通过在两列上添加索引,我们可能可以使联接工作更快(如果不是更快)。

答案 2 :(得分:0)

不应有任何性能差异。您可以同时使用两种方法,这完全取决于您。