SQL Server 中的 Oracle 样式联接
Posted
技术标签:
【中文标题】SQL Server 中的 Oracle 样式联接【英文标题】:Oracle Style Joins in SQL Server 【发布时间】:2011-11-24 01:41:59 【问题描述】:有没有办法在 SQL Server 中进行 oracle 样式的联接?
select *
from t1, t2
where t1.id = t2.id (+)
编辑
为什么最好使用“左外连接”和“内连接”类型?我发现阅读旧形式更容易,尤其是涉及复杂的表连接时。
【问题讨论】:
old school/unrecommended equivalent for SQL Server would be =*。无论哪种情况,语法都适用于 OUTER 连接。 =* 样式的联接也已被弃用,并且在 SQL Server 2012 中将不再起作用。 旧式连接不明确,可能会根据 WHERE 的应用方式返回不同的结果。这就是它们被逐步淘汰 ANSI SQL 标准以及 SQL Server 弃用它们的原因。 【参考方案1】:Microsoft 正在使用 ANSI ISO SQL 标准。 Mark Rittman 对ANSI joins and why you should use them 有很好的解释。但是,SQL Server 不支持该文章中列出的 NATURAL JOIN 语法和 ANSI 标准。您可能更熟悉旧的 Oracle 语法,但它是标准并且您会在其他数据库产品中找到。
回答您的问题 - 无法在 SQL Server 上执行 Oracle 样式的联接。甚至 *=
和 =*
样式的连接也已被弃用,并且在产品的下一版本中将被完全删除。
【讨论】:
【参考方案2】:SELECT *
FROM t1
LEFT OUTER JOIN t2 ON t1.id = t2.id
这篇AskTom 文章向您展示了 Oracle 的从 (+) 到 (LEFT AND RIGHT) OUTER JOIN
的语法等效项,而 SQL Server 使用 OUTER JOIN
语法。
【讨论】:
以上是关于SQL Server 中的 Oracle 样式联接的主要内容,如果未能解决你的问题,请参考以下文章