sql – Oracle连接 – 常规语法与ANSI语法的比较

前端之家收集整理的这篇文章主要介绍了sql – Oracle连接 – 常规语法与ANSI语法的比较前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
不久之后,我看到太多的怪人评论Oracle的问题,说“不要使用()运算符,而是使用JOIN语法”。

我确实看到这两个都很好。但是,使用它们的真正区别是什么?我会欢迎答案,更多来自经验。

1. Is there anything to do with limitations in application,performance,etc. while using them?

 2. What would you suggest for me?

我在Oracle documentation读了一些东西,但并不足以让我理解或感受到全面的信息。

注意:我打算迁移200个包和程序,如果使用Keyword而不是()

3. Also is there any freeware tools to do the rewrite?

发布样品

+----------------------------------+------------------------------------------------+
|-INNER JOIN - CONVENTIONAL        |-INNER JOIN - ANSI Syntax                       |
|----------------------------------|------------------------------------------------|
|SELECT                            |SELECT                                          |
|      EMP.DEPTNO                  |       ENAME,|
|FROM                              |       DNAME,|
|      EMP,|       EMP.DEPTNO,|
|      DEPT                        |       DEPT.DEPTNO                              |
|WHERE                             | FROM                                           |
|      EMP.DEPTNO = DEPT.DEPTNO;   |       SCOTT.EMP INNER JOIN SCOTT.DEPT          |
|                                  |       ON EMP.DEPTNO = DEPT.DEPTNO;             |
|----------------------------------|------------------------------------------------|
|-LEFT OUTER JOIN - CONVENTIONAL   |-LEFT OUTER JOIN - ANSI Syntax                  |
|----------------------------------|------------------------------------------------|
|SELECT                            | SELECT                                         |
|      EMP.DEPTNO                  |       ENAME,|
|      DEPT                        |       DEPT.DEPTNO                              |
|WHERE                             | FROM                                           |
|      EMP.DEPTNO = DEPT.DEPTNO(+);|       SCOTT.EMP LEFT OUTER JOIN SCOTT.DEPT     |
|                                  |       ON EMP.DEPTNO = DEPT.DEPTNO;             |
|----------------------------------|------------------------------------------------|
|-RIGHT OUTER JOIN - CONVENTIONAL  |-RIGHT OUTER JOIN - ANSI Syntax                 |
|----------------------------------|------------------------------------------------|
|SELECT                            | SELECT                                         |
|      EMP.DEPTNO                  |       ENAME,|
|      DEPT                        |       DEPT.DEPTNO                              |
|WHERE                             | FROM                                           |
|      EMP.DEPTNO(+) = DEPT.DEPTNO;|       SCOTT.EMP RIGHT OUTER JOIN SCOTT.DEPT    |
|                                  |       ON EMP.DEPTNO = DEPT.DEPTNO;             |
|----------------------------------|------------------------------------------------|
|-FULL OUTER JOIN - CONVENTIONAL   |-FULL OUTER JOIN - ANSI Syntax                  |
|----------------------------------|------------------------------------------------|
|                                  |                                                |
|SELECT                            | SELECT                                         |
|      *                           |       *                                        |
|FROM                              | FROM                                           |
|      EMP,|       SCOTT.EMP FULL OUTER JOIN SCOTT.DEPT     |
|      DEPT                        |       ON EMP.DEPTNO = DEPT.DEPTNO;             |
|WHERE                             |                                                |
|      EMP.DEPTNO = DEPT.DEPTNO(+) |                                                |
|UNION ALL                         |                                                |
|SELECT                            |                                                |
|      *                           |                                                |
|FROM                              |                                                |
|      EMP,|                                                |
|      DEPT                        |                                                |
|WHERE                             |                                                |
|      EMP.DEPTNO(+) = DEPT.DEPTNO |                                                |
|      AND EMP.DEPTNO IS NULL;     |                                                |
|__________________________________|________________________________________________|

PS:阅读所有更新分组的答案摘要

解决方法

如果您的200个软件包按照“老式”语法工作,请放心。
在迁移到ANSI语法之后,sql将不会更好地运行 – 它只是不同的语法。
所有这一切,ANSI语法更清洁 – 如果在某些多列外部连接中忘记(),则不会正常加入。
在过去,有一些ANSI语法错误,但是如果你去最新的11.2或12.1应该已经修复了。

当然,您更好地了解您的环境和优先级 – 就像SchmitzIT所说 – ANSI语法是sql标准的一部分,它将有助于使用其他RDBMS产品。

原文链接:https://www.f2er.com/mssql/84680.html

猜你在找的MsSQL相关文章