DOC HOME SITE MAP MAN PAGES GNU INFO SEARCH
 

(mysql.info.gz) UNION

Info Catalog (mysql.info.gz) JOIN (mysql.info.gz) SELECT
 
 13.1.7.2 `UNION' Syntax
 .......................
 
      SELECT ...
      UNION [ALL | DISTINCT]
      SELECT ...
        [UNION [ALL | DISTINCT]
         SELECT ...]
 
 `UNION' is used to combine the result from many `SELECT' statements
 into one result set.  `UNION' is available from MySQL 4.0.0 on.
 
 Selected columns listed in corresponding positions of each `SELECT'
 statement should have the same type. (For example, the first column
 selected by the first statement should have the same type as the first
 column selected by the other statements.) The column names used in the
 first `SELECT' statement are used as the column names for the results
 returned.
 
 The `SELECT' statements are normal select statements, but with the
 following restrictions:
 
    * Only the last `SELECT' statement can have `INTO OUTFILE'.
 
    * `HIGH_PRIORITY' cannot be used with `SELECT' statements that are
      part of a `UNION'. If you specify it for the first `SELECT', it
      has no effect. If you specify it for any subsequent `SELECT'
      statements, a syntax error results.
 
 If you don't use the keyword `ALL' for the `UNION', all returned rows
 will be unique, as if you had done a `DISTINCT' for the total result
 set.  If you specify `ALL', you will get all matching rows from all the
 used `SELECT' statements.
 
 The `DISTINCT' keyword is an optional word (introduced in MySQL 4.0.17).
 It does nothing, but is allowed in the syntax as required by the SQL
 standard.
 
 Before MySQL 4.1.2, you cannot mix `UNION ALL' and `UNION DISTINCT' in
 the same query.  If you use `ALL' for one `UNION', it is used for all
 of them. As of MySQL 4.1.2, mixed `UNION' types are treated such that a
 `DISTINCT' union overrides any `ALL' union to its left. A `DISTINCT'
 union can be produced explicitly by using `UNION DISTINCT' or
 implicitly by using `UNION' with no following `DISTINCT' or `ALL'
 keyword.
 
 If you want to use an `ORDER BY' or `LIMIT' clause to sort or limit the
 entire `UNION' result, parenthesize the individual `SELECT' statements
 and place the `ORDER BY' or `LIMIT' after the last one.  The following
 example uses both clauses:
 
      (SELECT a FROM TBL_NAME WHERE a=10 AND B=1)
      UNION
      (SELECT a FROM TBL_NAME WHERE a=11 AND B=2)
      ORDER BY a LIMIT 10;
 
 This kind of `ORDER BY' cannot use column references that include a
 table name (that is, names in TBL_NAME.COL_NAME format). Instead,
 provide a column alias in the first `SELECT' statement and refer to the
 alias in the `ORDER BY', or else refer to the column in the `ORDER BY'
 using its column position.  (An alias is preferable because use of
 column positions is deprecated.)
 
 To apply `ORDER BY' or `LIMIT' to an individual `SELECT', place the
 clause inside the parentheses that enclose the `SELECT':
 
      (SELECT a FROM TBL_NAME WHERE a=10 AND B=1 ORDER BY a LIMIT 10)
      UNION
      (SELECT a FROM TBL_NAME WHERE a=11 AND B=2 ORDER BY a LIMIT 10);
 
 The types and lengths of the columns in the result set of a `UNION'
 take into account the values retrieved by all the `SELECT' statements.
 Before MySQL 4.1.1, a limitation of `UNION' is that only the values from
 the first `SELECT' are used to determine result column types and
 lengths.  This could result in value truncation if, for example, the
 first `SELECT' retrieves shorter values than the second `SELECT':
 
      mysql> SELECT REPEAT('a',1) UNION SELECT REPEAT('b',10);
      +---------------+
      | REPEAT('a',1) |
      +---------------+
      | a             |
      | b             |
      +---------------+
 
 That limitation has been removed as of MySQL 4.1.1:
 
      mysql> SELECT REPEAT('a',1) UNION SELECT REPEAT('b',10);
      +---------------+
      | REPEAT('a',1) |
      +---------------+
      | a             |
      | bbbbbbbbbb    |
      +---------------+
 
Info Catalog (mysql.info.gz) JOIN (mysql.info.gz) SELECT
automatically generated byinfo2html