您的位置:首页 > 数据库 > Oracle

20041012oracle学习笔记,注意minus的应用

2004-10-12 12:58 537 查看

The UNION [ALL], INTERSECT, MINUS Operators

You can combine multiple queries using the set operators
UNION
,
UNION
ALL
,
INTERSECT
, and
MINUS
. All set operators have equal precedence. If a SQL statement contains multiple set operators, then Oracle evaluates them from the left to right if no parentheses explicitly specify another order.

The corresponding expressions in the select lists of the component queries of a compound query must match in number and datatype. If component queries select character data, then the datatype of the return values are determined as follows:

If both queries select values of datatype
CHAR
, then the returned values have datatype
CHAR
.
If either or both of the queries select values of datatype
VARCHAR2
, then the returned values have datatype
VARCHAR2
.

Restrictions on Set Operators

The set operators are not valid on columns of type
BLOB
,
CLOB
,
BFILE
,
VARRAY
, or nested table.
The
UNION
,
INTERSECT
, and
MINUS
operators are not valid on
LONG
columns.
If the select list preceding the set operator contains an expression, then you must provide a column alias for the expression in order to refer to it in the
order_by_clause
.
You cannot also specify the
for_update_clause
with these set operators.
You cannot specify the
order_by_clause
in the
subquery
of these operators.
You cannot use these operators in
SELECT
statements containing
TABLE
collection expressions.

[b]Note:[/b]
To comply with emerging SQL standards, a future release of Oracle will give the
INTERSECT
operator greater precedence than the other set operators. Therefore, you should use parentheses to specify order of evaluation in queries that use the
INTERSECT
operator with other set operators.

The following examples combine the two query results with each of the set operators.

UNION Example
The following statement combines the results with the
UNION
operator, which eliminates duplicate selected rows. This statement shows that you must match datatype (using the
TO_CHAR
function) when columns do not exist in one or the other table:

SELECT location_id, department_name "Department",
TO_CHAR(NULL) "Warehouse"  FROM departments
UNION
SELECT location_id, TO_CHAR(NULL) "Department", warehouse_name
FROM warehouses;

LOCATION_ID Department            Warehouse
----------- --------------------- --------------------------
1400 IT
1400                       Southlake, Texas
1500 Shipping
1500                       San Francisco
1600                       New Jersey
1700 Accounting
1700 Administration
1700 Benefits
1700 Construction
...

UNION ALL Example
The
UNION
operator returns only distinct rows that appear in either result, while the
UNION
ALL
operator returns all rows. The
UNION
ALL
operator does not eliminate duplicate selected rows:

SELECT product_id FROM order_items
UNION
SELECT product_id FROM inventories;

SELECT location_id  FROM locations
UNION ALL
SELECT location_id  FROM departments;

A
location_id
value that appears multiple times in either or both queries (such as '
1700
') is returned only once by the
UNION
operator, but multiple times by the
UNION
ALL
operator.

INTERSECT Example
The following statement combines the results with the
INTERSECT
operator, which returns only those rows returned by both queries:

SELECT product_id FROM inventories
INTERSECT
SELECT product_id FROM order_items;

MINUS Example
The following statement combines results with the
MINUS
operator, which returns only rows returned by the first query but not by the second:

SELECT product_id FROM inventories
MINUS
SELECT product_id FROM order_items;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: