349 lines
16 KiB
HTML
349 lines
16 KiB
HTML
|
<?xml version="1.0" encoding="utf-8"?>
|
||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
|
||
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-us">
|
||
|
<head>
|
||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||
|
<meta name="dc.language" scheme="rfc1766" content="en-us" />
|
||
|
<!-- All rights reserved. Licensed Materials Property of IBM -->
|
||
|
<!-- US Government Users Restricted Rights -->
|
||
|
<!-- Use, duplication or disclosure restricted by -->
|
||
|
<!-- GSA ADP Schedule Contract with IBM Corp. -->
|
||
|
<meta name="dc.date" scheme="iso8601" content="2005-09-19" />
|
||
|
<meta name="copyright" content="(C) Copyright IBM Corporation 1998, 2006" />
|
||
|
<meta name="security" content="public" />
|
||
|
<meta name="Robots" content="index,follow"/>
|
||
|
<meta http-equiv="PICS-Label" content='(PICS-1.1 "http://www.icra.org/ratingsv02.html" l gen true r (cz 1 lz 1 nz 1 oz 1 vz 1) "http://www.rsac.org/ratingsv01.html" l gen true r (n 0 s 0 v 0 l 0) "http://www.classify.org/safesurf/" l gen true r (SS~~000 1))' />
|
||
|
<meta name="keywords" content="fullselect, SELECT statement, description,
|
||
|
subquery, scalar-fullselect, of fullselect, UNION clause, UNION ALL clause,
|
||
|
with duplicate rows, duplicate rows with UNION, EXCEPT clause, INTERSECT clause,
|
||
|
set operation, with UNION, parentheses, with EXCEPT, with INTERSECT, rules,
|
||
|
column" />
|
||
|
<title>fullselect</title>
|
||
|
<link rel="stylesheet" type="text/css" href="ibmidwb.css" />
|
||
|
<link rel="stylesheet" type="text/css" href="ic.css" />
|
||
|
</head>
|
||
|
<body>
|
||
|
<a id="Top_Of_Page" name="Top_Of_Page"></a><!-- Java sync-link -->
|
||
|
<script language = "Javascript" src = "../rzahg/synch.js" type="text/javascript"></script>
|
||
|
|
||
|
|
||
|
<a name="mark"></a>
|
||
|
<h2 id="mark"><a href="rbafzmst02.htm#ToC_691">fullselect</a></h2><a id="idx1219" name="idx1219"></a><a id="idx1220" name="idx1220"></a>
|
||
|
<a href="rbafzmstmark.htm#synfull"><img src="c.gif" alt="Click to skip syntax diagram" /></a>
|
||
|
<a name="wq956"></a>
|
||
|
<div class="fignone" id="wq956">
|
||
|
<pre class="cgraphic"><span><img src="c.gif" alt="Read syntax diagram" longdesc="rbafzmstsyn231.htm"
|
||
|
border="0" /></span><a href="#skipsyn-230"><img src="c.gif" alt="Skip visual syntax diagram"
|
||
|
border="0" /></a>>>-+-<span class="italic">subselect</span>----+--------------------------------------------->
|
||
|
'-<span class="italic">(fullselect)</span>-'
|
||
|
|
||
|
.---------------------------------------------------.
|
||
|
V |
|
||
|
>----+-----------------------------------------------+-+-------><
|
||
|
| .-DISTINCT-. |
|
||
|
'-+-UNION--+----------+-----+--+-<span class="italic">subselect</span>----+-'
|
||
|
| '-ALL------' | '-<span class="italic">(fullselect)</span>-'
|
||
|
| .-DISTINCT-. |
|
||
|
+-EXCEPT--+----------+----+
|
||
|
| .-DISTINCT-. |
|
||
|
'-INTERSECT--+----------+-'
|
||
|
|
||
|
</pre>
|
||
|
<a name="skipsyn-230" id="skipsyn-230"></a></div>
|
||
|
<p>The <span class="italic">fullselect</span> is a component of the <var class="pv">select-statement</var> and the CREATE VIEW statement.</p><a id="idx1221" name="idx1221"></a>
|
||
|
<p>A fullselect that is enclosed in parenthesis is called a <var class="pv">subquery</var>.
|
||
|
For example, a <var class="pv">subquery</var> can be used in a search condition.</p><a id="idx1222" name="idx1222"></a>
|
||
|
<p>A <span class="italic">scalar-fullselect</span> is a fullselect,
|
||
|
enclosed in parentheses, that returns a single result row and a single result
|
||
|
column. If the result of the fullselect is no rows, then the null value is
|
||
|
returned. An error is returned if there is more than one row in the result.</p>
|
||
|
<a name="synfull"></a>
|
||
|
<p id="synfull">A <span class="italic">fullselect</span> specifies a result table.
|
||
|
If UNION, EXCEPT, or INTERSECT is not used, the result of the fullselect is
|
||
|
the result of the specified subselect. </p>
|
||
|
<dl class="parml">
|
||
|
<dt class="bold"><span class="pk">UNION DISTINCT</span> <span class="base">or</span> <span class="pk">UNION ALL</span> </dt><a id="idx1223" name="idx1223"></a><a id="idx1224" name="idx1224"></a>
|
||
|
<dd>Derives a result table by combining two other result tables (R1 and
|
||
|
R2). If UNION ALL is specified, the result consists of all rows in R1 and
|
||
|
R2. If UNION is specified without the ALL option, the result is the set of
|
||
|
all rows in either R1 or R2, with duplicate rows eliminated. In either case,
|
||
|
however, each row of the UNION table is either a row from R1 or a row from
|
||
|
R2.
|
||
|
</dd><a id="idx1225" name="idx1225"></a><a id="idx1226" name="idx1226"></a>
|
||
|
<dt class="bold"><span class="pk">EXCEPT DISTINCT</span></dt><a id="idx1227" name="idx1227"></a>
|
||
|
<dd>Derives a result table by combining two other result tables (R1 and
|
||
|
R2). The result consists of all rows that are only in R1, with duplicate rows
|
||
|
in the result of this operation eliminated.
|
||
|
</dd>
|
||
|
<dt class="bold"><span class="pk">INTERSECT DISTINCT</span></dt><a id="idx1228" name="idx1228"></a>
|
||
|
<dd>Derives a result table by combining two other result tables (R1 and
|
||
|
R2). The result consists of all rows that are in both R1 and R2, with the
|
||
|
duplicate rows eliminated.
|
||
|
</dd>
|
||
|
</dl>
|
||
|
<p>If the <span class="italic">n</span>th column of R1 and the <span class="italic">n</span>th column of R2 have the same result column name, then the nth column
|
||
|
of the result table has the result column name. If the <span class="italic">n</span>th column of R1 and the <span class="italic">n</span>th column of R2 do
|
||
|
not have the same names, then the result column is unnamed.</p>
|
||
|
<p>Two rows are duplicates if each value in the first is equal to the corresponding
|
||
|
value of the second. (For determining duplicates, two null values are considered
|
||
|
equal.)</p>
|
||
|
<p>INTERSECT and EXCEPT are not allowed if the query specifies:</p>
|
||
|
<ul>
|
||
|
<li>lateral correlation,</li>
|
||
|
<li>a sort sequence,</li>
|
||
|
<li>an operation that requires CCSID conversion,</li>
|
||
|
<li>a UTF-8 or UTF-16 argument in a CHARACTER_LENGTH, POSITION, or SUBSTRING
|
||
|
scalar function,</li>
|
||
|
<li>a distributed table,</li>
|
||
|
<li>a table with a read trigger, or</li>
|
||
|
<li>a logical file built over multiple physical file members.</li></ul>
|
||
|
<p>If a sort sequence other than *HEX is in effect when the statement that
|
||
|
contains the UNION keyword is executed and if the result tables contain columns
|
||
|
that are SBCS data, mixed data, or Unicode data, the comparison for those
|
||
|
columns is done using weighted values. The weighted values are derived by
|
||
|
applying the sort sequence to each value.</p><a id="idx1229" name="idx1229"></a><a id="idx1230" name="idx1230"></a><a id="idx1231" name="idx1231"></a><a id="idx1232" name="idx1232"></a>
|
||
|
<p>UNION, UNION ALL, and INTERSECT are associative set operations.
|
||
|
However, when UNION, UNION ALL, EXCEPT, and INTERSECT are used in the same
|
||
|
statement, the result depends on the order in which the operations are performed.
|
||
|
Operations within parenthesis are performed first. When the order is not specified
|
||
|
by parentheses, operations are performed in left-to-right order with the exception
|
||
|
that all INTERSECT operations are performed before UNION or EXCEPT operations.</p>
|
||
|
<p>In the following example, the values of tables R1 and R2 are shown on the
|
||
|
left. The other headings listed show the values as a result of various set
|
||
|
operations on R1 and R2.</p>
|
||
|
<a name="wq957"></a>
|
||
|
<table id="wq957" width="100%" summary="" border="1" frame="hsides" rules="rows">
|
||
|
<thead valign="bottom">
|
||
|
<tr>
|
||
|
<th id="wq958" align="left">R1</th>
|
||
|
<th id="wq959" align="left">R2</th>
|
||
|
<th id="wq960" align="left">UNION ALL</th>
|
||
|
<th id="wq961" align="left">UNION</th>
|
||
|
<th id="wq962" align="left">EXCEPT</th>
|
||
|
<th id="wq963" align="left">INTERSECT</th>
|
||
|
</tr>
|
||
|
</thead>
|
||
|
<tbody valign="top">
|
||
|
<tr>
|
||
|
<td headers="wq958">1</td>
|
||
|
<td headers="wq959">1</td>
|
||
|
<td headers="wq960">1</td>
|
||
|
<td headers="wq961">1</td>
|
||
|
<td headers="wq962">2</td>
|
||
|
<td headers="wq963">1</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td headers="wq958">1</td>
|
||
|
<td headers="wq959">1</td>
|
||
|
<td headers="wq960">1</td>
|
||
|
<td headers="wq961">2</td>
|
||
|
<td headers="wq962">5</td>
|
||
|
<td headers="wq963">3</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td headers="wq958">1</td>
|
||
|
<td headers="wq959">3</td>
|
||
|
<td headers="wq960">1</td>
|
||
|
<td headers="wq961">3</td>
|
||
|
<td headers="wq962"></td>
|
||
|
<td headers="wq963">4</td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td headers="wq958">2</td>
|
||
|
<td headers="wq959">3</td>
|
||
|
<td headers="wq960">1</td>
|
||
|
<td headers="wq961">4</td>
|
||
|
<td headers="wq962"></td>
|
||
|
<td headers="wq963"></td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td headers="wq958">2</td>
|
||
|
<td headers="wq959">3</td>
|
||
|
<td headers="wq960">1</td>
|
||
|
<td headers="wq961">5</td>
|
||
|
<td headers="wq962"></td>
|
||
|
<td headers="wq963"></td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td headers="wq958">2</td>
|
||
|
<td headers="wq959">3</td>
|
||
|
<td headers="wq960">2</td>
|
||
|
<td headers="wq961"></td>
|
||
|
<td headers="wq962"></td>
|
||
|
<td headers="wq963"></td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td headers="wq958">3</td>
|
||
|
<td headers="wq959">4</td>
|
||
|
<td headers="wq960">2</td>
|
||
|
<td headers="wq961"></td>
|
||
|
<td headers="wq962"></td>
|
||
|
<td headers="wq963"></td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td headers="wq958">4</td>
|
||
|
<td headers="wq959"></td>
|
||
|
<td headers="wq960">2</td>
|
||
|
<td headers="wq961"></td>
|
||
|
<td headers="wq962"></td>
|
||
|
<td headers="wq963"></td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td headers="wq958">4</td>
|
||
|
<td headers="wq959"></td>
|
||
|
<td headers="wq960">3</td>
|
||
|
<td headers="wq961"></td>
|
||
|
<td headers="wq962"></td>
|
||
|
<td headers="wq963"></td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td headers="wq958">5</td>
|
||
|
<td headers="wq959"></td>
|
||
|
<td headers="wq960">3</td>
|
||
|
<td headers="wq961"></td>
|
||
|
<td headers="wq962"></td>
|
||
|
<td headers="wq963"></td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td headers="wq958"></td>
|
||
|
<td headers="wq959"></td>
|
||
|
<td headers="wq960">3</td>
|
||
|
<td headers="wq961"></td>
|
||
|
<td headers="wq962"></td>
|
||
|
<td headers="wq963"></td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td headers="wq958"></td>
|
||
|
<td headers="wq959"></td>
|
||
|
<td headers="wq960">3</td>
|
||
|
<td headers="wq961"></td>
|
||
|
<td headers="wq962"></td>
|
||
|
<td headers="wq963"></td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td headers="wq958"></td>
|
||
|
<td headers="wq959"></td>
|
||
|
<td headers="wq960">3</td>
|
||
|
<td headers="wq961"></td>
|
||
|
<td headers="wq962"></td>
|
||
|
<td headers="wq963"></td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td headers="wq958"></td>
|
||
|
<td headers="wq959"></td>
|
||
|
<td headers="wq960">4</td>
|
||
|
<td headers="wq961"></td>
|
||
|
<td headers="wq962"></td>
|
||
|
<td headers="wq963"></td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td headers="wq958"></td>
|
||
|
<td headers="wq959"></td>
|
||
|
<td headers="wq960">4</td>
|
||
|
<td headers="wq961"></td>
|
||
|
<td headers="wq962"></td>
|
||
|
<td headers="wq963"></td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td headers="wq958"></td>
|
||
|
<td headers="wq959"></td>
|
||
|
<td headers="wq960">4</td>
|
||
|
<td headers="wq961"></td>
|
||
|
<td headers="wq962"></td>
|
||
|
<td headers="wq963"></td>
|
||
|
</tr>
|
||
|
<tr>
|
||
|
<td headers="wq958"></td>
|
||
|
<td headers="wq959"></td>
|
||
|
<td headers="wq960">5</td>
|
||
|
<td headers="wq961"></td>
|
||
|
<td headers="wq962"></td>
|
||
|
<td headers="wq963"></td>
|
||
|
</tr>
|
||
|
</tbody>
|
||
|
</table>
|
||
|
<a name="irfrcol"></a>
|
||
|
<h3 id="irfrcol"><a href="rbafzmst02.htm#ToC_692">Rules for columns</a></h3><a id="idx1233" name="idx1233"></a>
|
||
|
<p>R1 and R2 must have the same number of columns, and the data type of the <span class="italic">n</span>th column of R1 must be compatible with the data type
|
||
|
of the <span class="italic">n</span>th column of R2. Character-string values are
|
||
|
compatible with datetime values.</p>
|
||
|
<p>The <span class="italic">n</span>th column of the result of UNION, UNION ALL,
|
||
|
EXCEPT, or INTERSECT is derived from the <span class="italic">n</span>th columns
|
||
|
of R1 and R2. The attributes of the result columns are determined using the
|
||
|
rules for result columns. For more information see <a href="rbafzmstopcomb.htm#opcomb">Rules for result data types</a>.</p>
|
||
|
<p>If UNION, INTERSECT, or EXCEPT is specified, no column can be a LOB or
|
||
|
DATALINK column.</p>
|
||
|
<a name="wq964"></a>
|
||
|
<h3 id="wq964"><a href="rbafzmst02.htm#ToC_693">Examples of a fullselect</a></h3>
|
||
|
<a name="wq965"></a>
|
||
|
<h4 id="wq965">Example 1</h4>
|
||
|
<p>Select all columns and rows from the EMPLOYEE table. </p>
|
||
|
<pre class="xmp"> <span class="bold">SELECT * FROM</span> EMPLOYEE</pre>
|
||
|
<a name="wq966"></a>
|
||
|
<h4 id="wq966">Example 2</h4>
|
||
|
<p>List the employee numbers (EMPNO) of all employees in the EMPLOYEE table
|
||
|
whose department number (WORKDEPT) either begins with 'E' <span class="bold">or</span> who are assigned to projects in the EMPPROJACT table whose project
|
||
|
number (PROJNO) equals 'MA2100', 'MA2110', or 'MA2112'. </p>
|
||
|
<pre class="xmp"> <span class="bold">SELECT</span> EMPNO <span class="bold">FROM</span> EMPLOYEE
|
||
|
<span class="bold">WHERE</span> WORKDEPT <span class="bold">LIKE</span> 'E%'
|
||
|
<span class="bold">UNION</span>
|
||
|
<span class="bold">SELECT</span> EMPNO <span class="bold">FROM</span> EMPPROJACT
|
||
|
<span class="bold">WHERE</span> PROJNO <span class="bold">IN(</span>'MA2100', 'MA2110', 'MA2112'<span class="bold">)</span></pre>
|
||
|
<a name="wq967"></a>
|
||
|
<h4 id="wq967">Example 3</h4>
|
||
|
<p>Make the same query as in example 2, only use UNION ALL so that no duplicate
|
||
|
rows are eliminated. </p>
|
||
|
<pre class="xmp"> <span class="bold">SELECT</span> EMPNO <span class="bold">FROM</span> EMPLOYEE
|
||
|
<span class="bold">WHERE</span> WORKDEPT <span class="bold">LIKE</span> 'E%'
|
||
|
<span class="bold">UNION ALL</span>
|
||
|
<span class="bold">SELECT</span> EMPNO FROM EMPPROJACT
|
||
|
<span class="bold">WHERE</span> PROJNO <span class="bold">IN(</span>'MA2100', 'MA2110', 'MA2112'<span class="bold">)</span></pre>
|
||
|
<a name="wq968"></a>
|
||
|
<h4 id="wq968">Example 4</h4>
|
||
|
<p>Make the same query as in example 2, and, in addition, "tag" the rows from
|
||
|
the EMPLOYEE table with 'emp' and the rows from the EMPPROJACT table with
|
||
|
'empprojact'. Unlike the result from example 2, this query may return the
|
||
|
same EMPNO more than once, identifying which table it came from by the associated
|
||
|
"tag".</p>
|
||
|
<pre class="xmp"> <span class="bold">SELECT</span> EMPNO, 'emp' <span class="bold">FROM</span> EMPLOYEE
|
||
|
<span class="bold">WHERE</span> WORKDEPT <span class="bold">LIKE</span> 'E%'
|
||
|
<span class="bold">UNION</span>
|
||
|
<span class="bold">SELECT</span> EMPNO, 'empprojact' <span class="bold">FROM</span> EMPPROJACT
|
||
|
<span class="bold">WHERE</span> PROJNO <span class="bold">IN(</span>'MA2100', 'MA2110', 'MA2112'<span class="bold">)</span></pre>
|
||
|
<a name="wq969"></a>
|
||
|
<h4 id="wq969">Example 5</h4>
|
||
|
<p>This example of EXCEPT produces all rows that are in T1 but not in T2,
|
||
|
with duplicate rows removed.</p>
|
||
|
<pre class="xmp"> <span class="bold">(SELECT</span> * <span class="bold">FROM</span> T1<span class="bold">)</span>
|
||
|
<span class="bold">EXCEPT DISTINCT</span>
|
||
|
<span class="bold">(SELECT</span> * <span class="bold">FROM</span> T2<span class="bold">)</span>
|
||
|
</pre><p class="indatacontent">If no NULL values are involved, this example returns the same results
|
||
|
as:</p>
|
||
|
<pre class="xmp"> <span class="bold">(SELECT DISTINCT</span> *
|
||
|
<span class="bold">FROM</span> T1
|
||
|
<span class="bold">WHERE NOT EXISTS</span> <span class="bold">(SELECT</span> * <span class="bold">FROM</span> T2
|
||
|
<span class="bold">WHERE</span> T1.C1 = T2.C1 <span class="bold">AND</span> T1.C2 = T2.C2 <span class="bold">AND</span>...<span class="bold">) )</span>
|
||
|
</pre><p class="indatacontent">where C1, C2, and so on represent the columns of T1 and T2.</p>
|
||
|
<a name="wq970"></a>
|
||
|
<h4 id="wq970">Example 6</h4>
|
||
|
<p>This example of INTERSECT produces all rows that are in both tables T1
|
||
|
and T2, with duplicate rows removed.</p>
|
||
|
<pre class="xmp"> <span class="bold">(SELECT</span> * <span class="bold">FROM</span> T1<span class="bold">)</span>
|
||
|
<span class="bold">INTERSECT DISTINCT</span>
|
||
|
<span class="bold">(SELECT</span> * <span class="bold">FROM</span> T2<span class="bold">)</span>
|
||
|
</pre><p class="indatacontent">If no NULL values are involved, this example returns the same results
|
||
|
as:</p>
|
||
|
<pre class="xmp"> <span class="bold">(SELECT DISTINCT</span> *
|
||
|
<span class="bold">FROM</span> T1
|
||
|
<span class="bold">WHERE EXISTS</span> <span class="bold">(SELECT</span> * <span class="bold">FROM</span> T2
|
||
|
<span class="bold">WHERE</span> T1.C1 = T2.C1 <span class="bold">AND</span> T1.C2 = T2.C2 <span class="bold">AND</span>...<span class="bold">) )</span>
|
||
|
</pre><p class="indatacontent">where C1, C2, and so on represent the columns of T1 and T2.</p>
|
||
|
<hr /><br />
|
||
|
[ <a href="#Top_Of_Page">Top of Page</a> | <a href="rbafzmstsubselect.htm">Previous Page</a> | <a href="rbafzmstintsel.htm">Next Page</a> | <a href="rbafzmst02.htm#wq1">Contents</a> |
|
||
|
<a href="rbafzmstindex.htm#index">Index</a> ]
|
||
|
|
||
|
<a id="Bot_Of_Page" name="Bot_Of_Page"></a>
|
||
|
</body>
|
||
|
</html>
|