7.2 Precedence of Set Operators

   

If more than two component queries are combined using set operators, then Oracle evaluates the set operators from left to right. In the following example, the UNION is evaluated before the INTERSECT:

SELECT cust_nbr, name FROM customer WHERE region_id = 5 UNION SELECT c.cust_nbr, c.name FROM customer c WHERE c.cust_nbr IN (SELECT o.cust_nbr                      FROM cust_order o, employee e                      WHERE o.sales_emp_id = e.emp_id                      AND e.lname = 'MARTIN') INTERSECT SELECT cust_nbr, name FROM customer WHERE region_id = 6; CUST_NBR NAME -------- ------------------------------        8 Zantech Inc.

To influence a particular order of evaluation of the set operators, you can use parentheses. Looking at the preceding example, if you want the INTERSECT to be evaluated before the UNION, you should introduce parentheses into the query such that the component queries involving the INTERSECT are enclosed in parentheses, as shown in the following example:

SELECT cust_nbr, name FROM customer WHERE region_id = 5 UNION ( SELECT c.cust_nbr, c.name FROM customer c WHERE c.cust_nbr IN (SELECT o.cust_nbr                      FROM cust_order o, employee e                      WHERE o.sales_emp_id = e.emp_id                      AND e.lname = 'MARTIN') INTERSECT SELECT cust_nbr, name FROM customer WHERE region_id = 6 ); CUST_NBR NAME -------- ------------------------------        1 Cooper Industries        2 Emblazon Corp.        3 Ditech Corp.        4 Flowtech Inc.        5 Gentech Industries        8 Zantech Inc.

The operation within the parentheses is evaluated first. The result is then combined with the component queries outside the parentheses.

The ANSI/ISO SQL standard gives higher precedence to the INTERSECT operator. However, Oracle, at least through Oracle Database 10g, doesn't implement that higher precedence. All set operations currently have equal precedence.

In the future, Oracle may change the precedence of INTERSECT to comply with the standard. To prepare for that possibility, we recommend using parentheses to control the order of evaluation of set operators whenever you use INTERSECT in a query with any other set operator.




Mastering Oracle SQL
Mastering Oracle SQL, 2nd Edition
ISBN: 0596006322
EAN: 2147483647
Year: 2003
Pages: 154

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net