加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 07:06:14 所属栏目:MsSql教程 来源:网络整理
导读:不久之后,我看到太多的怪人评论Oracle的问题,说“不要使用()运算符,而是使用JOIN语法”。 我确实看到这两个都很好。但是,使用它们的真正区别是什么?我会欢迎答案,更多来自经验。 1. Is there anything to do with limitations in application,performan
不久之后,我看到太多的怪人评论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产品。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读