sql中(+)什么意思 搞懂sql中(+)的作用

(+),Oracles 结合了外部语法奇点。
那是。

说白了,是神谕所特有的,其他地方不被认可的。
左外接头放在右表(+)上,右外接头放在左表(+)上。

他们不识别ANSI标准。
ANSI 使用左连接、右连接。

建议使用JOIN。
易于移植和维护。

如果你使用旧系统,迁移会很痛苦。
上周我才处理了一个问题,但我无法摆脱它。

请注意,所有条件都必须使用 (+),这会造成混乱。

如果不使用复杂的问题,你是不会理解的。

sql中(+是什么意思 详解sql中(+)的特殊含义

哎,这个东西,Oracle当年用得很多……2 02 2 年的时候,我还在做一些老项目,碰到了一些。

(+) 仅适用于外连接。
在 Oracle 中,它是左外连接或右外连接。

左外连接,右外连接表示在右边表的连接字段后插入(+)。
例如,在西安查询时,查看员工和部门,员工表和部门表用逗号分隔,然后输入Employee.dept_id = Department.dept_id(+)。
也就是我要检查所有的员工,不管他们是否有一个部门。
如果存在部门,则显示部门名称。
如果没有部门,dept_name 列将为您填充 NULL。
查一下2 02 2 年的数据,是多少?可能有数万条员工记录。
数百个没有部门的将显示零。

右外连接意味着在左表的连接字段后插入(+)。
较少使用此功能。
例如,要检查所有部门,无论是否有人,如果有人,则显示该人的姓名。
如果没有人名,请在该列中输入 NULL。
还可以使用逗号分隔表格,其中“employee.dept_id(+) = Department.dept_id”。
这在西安项目中很少见,但理论上是存在的。

但是现在看看那个(+)符号,它有问题。
可读性很差,尤其是表太多的时候。
你与谁联系?标准 SQL 不再需要这些东西。
现在我们都明确使用ON关键字,LEFT JOIN,RIGHT JOIN。

兼容性也是无与伦比的,MySQL、PostgreSQL,乍一看还不是。
您用 (+) 编写查询,将其移动到另一个数据库并立即报告错误。
我在 2 02 2 年迁移项目期间遇到了这一点,这非常令人不安。

从性能上来说,据说也未必会更好。
Oracle的内部优化器可能无法理解这个古老的古文,甚至可能会影响执行计划。
即使理论上执行是相同的,但实际情况又如何呢?谁能说一下?
因此,现在建议使用标准语法。
你看:
sql -
左外连接 SELECT 员工姓名、部门名称.部门名称 来自员工 LEFT JOINparts ONEemployee.dept_id=departments.dept_id;
-
右外连接(其实可以改成左外连接) SELECT 员工姓名、部门名称.部门名称 来自部门 在employees.dept_id=departments.dept_id;上加入正确的员工;
这样,把条件写在ON后面,连接类型写在JOIN前面,一目了然。
它还跨数据库兼容,使移植变得更加容易。

如何处理旧代码?只要改变它。
将 WHERE a.id = b.id(+) 更改为 LEFT JOIN b ON a.id = b.id。
更换时要小心。
请勿颠倒连接类型。
如果从左向右移动,数据将会丢失。
你需要明白原来的(+)是什么意思。
进行更改后,最好运行 EXPLAIN PLAN 以查看执行计划是否正确以及是否存在性能下降。
还要在代码中留下一些注释来解释它是什么。

一般来说,这个(+)符号是历史产品。
要理解它,您必须了解这些遗留系统。
但是,不要使用新编写的代码。
只需使用标准的JOIN语法,简单、清晰、通用。
这东西的历史意义……或许反映了SQL语法的演变。
今天谁还在用这种老方法?