【发布时间】:2016-03-08 16:56:30
【问题描述】:
我在一个项目中,通过在 FROM 子句中包含多个表来执行大部分查询。我知道这是合法的,但我一直使用显式 JOIN。
例如,两个表(使用 SQL Server DDL)
CREATE TABLE Manufacturers(
ManufacturerID INT IDENTITY(1,1) PRIMARY KEY NOT NULL,
Name varchar(100))
CREATE TABLE Cars (
ModelID INT IDENTITY(1,1) PRIMARY KEY NOT NULL,
ManufacturerID INT CONSTRAINT FOREIGN KEY FK_Manufacturer REFERENCES Manufacturers(ManufacturerID),
ModelName VARCHAR(100))
如果我想找到通用汽车的模型,我可以这样做:
SELECT ModelName FROM Cars c, Manufacturers m WHERE c.ManufacturerID=m.ManufacturerID AND m.Name='General Motors'
或
SELECT ModelName FROM Cars c INNER JOIN Manufacturers m ON c.ManufacturerID=m.ManufacturerID WHERE m.Name='General Motors'
我的问题是:一种形式是否比另一种表现更好?除了在 Oracle 和 SQL Server 中如何定义表之外,在 Oracle 或 SQL Server 中,一种形式的连接是否比另一种更好?如果你包含更多的表,比如 3 个或 4 个呢?假设查询被构造为返回等效的记录集,这是否会改变性能特征?
【问题讨论】:
-
执行计划(至少在 sql-server 中)将是相同的。但是,您确实应该避免使用第一种连接方式。那是较旧的 ANSI-89 样式。近 30 年前,INNER JOIN 在语法上被引入了。 sqlblog.com/blogs/aaron_bertrand/archive/2009/10/08/…
标签: sql-server oracle join