oracle (+) notation

ทำงานเหมือน OUTER JOIN ( มันออกมาก่อน ANSI standard จะประกาศว่ามี joins ) แม้แต่ oracle (11g Release 1 (11.1)เอง ยังแนะนำให้โค้ดใหม่ๆไปใช้ FROM .. OUTER JOIN

หลักการ : เครื่องหมายบวก ‘(+)’ อยู่ข้างที่ข้อมูลขาดหายไป (เป็น NULL)

จริงๆ มันก้อคือ LEFT OUTER JOIN/RIGHT OUTER JOIN ยุคโบร่ำโบราณนั่นแล

กฎการใช้ (+)

  • ไม่สามารถใช้ (+) operator ใน query block ที่มี FROM clause join syntax.
  • (+) operator สามารถเขียนไว้ใน WHERE clause หรือ, in the context of left-correlation (when specifying the TABLE clause) in the FROM clause, and can be applied only to a column of a table or view เท่านั้น
  • ถ้า A, B joined ด้วย multiple join conditions เราต้องใช้ (+) operator ในทุกๆ conditions ถ้าเราไม่ใช้ Oracle Database จะ return only rows resulting from a simple join, but without a warning or error ที่จะบอกว่า you do not have the results of an outer join.
  • The (+) operator does not produce an outer join if you specify one table in the outer query and the other table in an inner query.
  • You cannot use the (+) operator to outer-join a table to itself, although self joins are valid. For example, the following statement is not valid:

— The following statement is not valid:
SELECT employee_id, manager_id
FROM employees
WHERE employees.manager_id(+) = employees.employee_id;

However, the following self join is valid:

SELECT e1.employee_id, e1.manager_id, e2.employee_id
FROM employees e1, employees e2
WHERE e1.manager_id(+) = e2.employee_id
ORDER BY e1.employee_id, e1.manager_id, e2.employee_id;

  • (+) operator สามารถใช้กับ column, not to an arbitrary expression. However, an arbitrary expression can contain one or more columns marked with the (+) operator.
  • WHERE condition ที่มี (+) operator ไม่สามารถ combined with condition อื่นๆ ด้วย OR operator
  • WHERE condition ไม่สามารถใช้ IN comparison condition เพื่อเปรียบเทียบ column marked with the (+) operator with an expression.

If the WHERE clause contains a condition that compares a column from table B with a constant, then the (+) operator must be applied to the column so that Oracle returns the rows from table A for which it has generated nulls for this column. Otherwise Oracle returns only the results of a simple join.

In a query that performs outer joins of more than two pairs of tables, a single table can be the null-generated table for only one other table. For this reason, you cannot apply the (+) operator to columns of B in the join condition for A and B and the join condition for B and C. Refer to SELECT for the syntax for an outer join.

ref : nagul


Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s