<legend id='TRqld'><style id='TRqld'><dir id='TRqld'><q id='TRqld'></q></dir></style></legend>

<i id='TRqld'><tr id='TRqld'><dt id='TRqld'><q id='TRqld'><span id='TRqld'><b id='TRqld'><form id='TRqld'><ins id='TRqld'></ins><ul id='TRqld'></ul><sub id='TRqld'></sub></form><legend id='TRqld'></legend><bdo id='TRqld'><pre id='TRqld'><center id='TRqld'></center></pre></bdo></b><th id='TRqld'></th></span></q></dt></tr></i><div id='TRqld'><tfoot id='TRqld'></tfoot><dl id='TRqld'><fieldset id='TRqld'></fieldset></dl></div>

    1. <small id='TRqld'></small><noframes id='TRqld'>

        <bdo id='TRqld'></bdo><ul id='TRqld'></ul>

    2. <tfoot id='TRqld'></tfoot>

    3. Oracle 联接 - 常规语法与 ANSI 语法的比较

      Oracle Joins - Comparison between conventional syntax VS ANSI Syntax(Oracle 联接 - 常规语法与 ANSI 语法的比较)
    4. <i id='oyYat'><tr id='oyYat'><dt id='oyYat'><q id='oyYat'><span id='oyYat'><b id='oyYat'><form id='oyYat'><ins id='oyYat'></ins><ul id='oyYat'></ul><sub id='oyYat'></sub></form><legend id='oyYat'></legend><bdo id='oyYat'><pre id='oyYat'><center id='oyYat'></center></pre></bdo></b><th id='oyYat'></th></span></q></dt></tr></i><div id='oyYat'><tfoot id='oyYat'></tfoot><dl id='oyYat'><fieldset id='oyYat'></fieldset></dl></div>
      • <bdo id='oyYat'></bdo><ul id='oyYat'></ul>
          <tfoot id='oyYat'></tfoot>

            <tbody id='oyYat'></tbody>

              • <small id='oyYat'></small><noframes id='oyYat'>

              • <legend id='oyYat'><style id='oyYat'><dir id='oyYat'><q id='oyYat'></q></dir></style></legend>
                本文介绍了Oracle 联接 - 常规语法与 ANSI 语法的比较的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

                问题描述

                序言

                最近,我看到太多极客在评论 Oracle 问题时说不要使用 (+) 运算符,而是使用 JOIN 语法".

                As of late, I see too many geeks commenting on Oracle questions saying "Do not use (+) operator, rather use JOIN syntax".

                问题

                我确实看到两者都运行良好.但是使用它们之间的真正区别是什么?我欢迎从经验中获得更多答案.

                I do see that both work well. But what is the real difference between using them? I would welcome answers more from experience.

                1. 使用它们时是否与应用程序、性能等方面的限制有关?
                2. 你有什么建议给我?

                我确实在 Oracle 文档a> 但不足以让我理解或对全面的信息感到满意.

                I did read something on Oracle documentation but it’s not good enough to make me understand or feel comfortable with the comprehensive information.

                注意:我计划迁移 200 多个包和程序,如果应该使用关键字而不是 (+)

                Note: I am planning to migrate 200+ packages and procedures, if the Keyword should be used instead of (+)

                1. 还有任何免费软件工具可以进行重写吗?

                发布示例

                ┌───────────────────────────────────┬─────────────────────────────────────────────┐
                │ 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,                                 │
                │ FROM                              │      dname,                                 │
                │      emp,                         │      emp.deptno,                            │
                │      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,                                 │
                │ FROM                              │      dname,                                 │
                │      emp,                         │      emp.deptno,                            │
                │      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:阅读分组的所有更新的答案摘要.

                PS: Read the summary of answers for all updates grouped.

                推荐答案

                将答案分组

                1. 使用显式联接而不是隐式联接(无论它们是否是外联接),因为使用隐式联接意外创建笛卡尔积要容易得多.使用显式 JOIN,您不能意外"创建一个.涉及的表越多,您错过一个连接条件的风险就越高.
                2. 与 ANSI 连接相比,基本上 (+) 受到严重限制.此外,它仅在 Oracle 中可用,而所有主要 DBMS 都支持 ANSI 连接语法
                3. 在迁移到 ANSI 语法后,SQL 不会开始表现得更好——它只是不同的语法.
                4. Oracle 强烈建议您使用前一个示例中显示的更灵活的 FROM 子句连接语法.过去,ANSI 语法存在一些错误,但如果您使用最新的 11.2 或 12.1,应该已经修复了.
                5. 使用 JOIN 运算符可确保您的 SQL 代码符合 ANSI,从而使前端应用程序可以更轻松地移植到其他数据库平台.
                6. 连接条件对每个表的选择性非常低,而对理论叉积中的元组具有很高的选择性.where 语句中的条件通常具有更高的选择性.
                7. Oracle 在内部将 ANSI 语法转换为 (+) 语法,您可以在执行计划的谓词信息部分看到这种情况.

                在 12c 引擎上使用 ANSI 语法的可能陷阱

                包括 12c 中 JOIN 中可能存在的错误.请参阅此处

                Including a possibility of bug in JOIN in 12c. See here

                跟进:

                Quest SQL 优化器工具 将 SQL 重写为 ANSI 语法.

                Quest SQL optimizer tool rewrites the SQL to ANSI syntax.

                这篇关于Oracle 联接 - 常规语法与 ANSI 语法的比较的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

                本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

                相关文档推荐

                ibtmp1是非压缩的innodb临时表的独立表空间,通过innodb_temp_data_file_path参数指定文件的路径,文件名和大小,默认配置为ibtmp1:12M:autoextend,也就是说在文件系统磁盘足够的情况下,这个文件大小是可以无限增长的。 为了避免ibtmp1文件无止境的暴涨导致
                SQL query to group by day(按天分组的 SQL 查询)
                What does SQL clause quot;GROUP BY 1quot; mean?(SQL 子句“GROUP BY 1是什么意思?意思是?)
                MySQL groupwise MAX() returns unexpected results(MySQL groupwise MAX() 返回意外结果)
                MySQL SELECT most frequent by group(MySQL SELECT 按组最频繁)
                Include missing months in Group By query(在 Group By 查询中包含缺失的月份)
                1. <legend id='t1OIS'><style id='t1OIS'><dir id='t1OIS'><q id='t1OIS'></q></dir></style></legend>
                      <tbody id='t1OIS'></tbody>

                    <small id='t1OIS'></small><noframes id='t1OIS'>

                  • <tfoot id='t1OIS'></tfoot>
                      <i id='t1OIS'><tr id='t1OIS'><dt id='t1OIS'><q id='t1OIS'><span id='t1OIS'><b id='t1OIS'><form id='t1OIS'><ins id='t1OIS'></ins><ul id='t1OIS'></ul><sub id='t1OIS'></sub></form><legend id='t1OIS'></legend><bdo id='t1OIS'><pre id='t1OIS'><center id='t1OIS'></center></pre></bdo></b><th id='t1OIS'></th></span></q></dt></tr></i><div id='t1OIS'><tfoot id='t1OIS'></tfoot><dl id='t1OIS'><fieldset id='t1OIS'></fieldset></dl></div>
                        <bdo id='t1OIS'></bdo><ul id='t1OIS'></ul>