Search the MySQL manual:
MySQL Manual

Buy this Reference Manual in softcover from Barnes & Noble!

Previous / / Up / Table of Contents

6.4.1.2 Синтаксис оператора UNION

SELECT ...
UNION [ALL]
SELECT ...
  [UNION 
   SELECT ...]

Оператор UNION реализован в MySQL 4.0.0.

UNION используется для объединения результатов работы нескольких команд SELECT в один набор результатов.

Эти команды SELECT являются обычными командами выборки данных, но со следующим ограничением:

Если не используется ключевое слово ALL для UNION, все возвращенные строки будут уникальными, так как по умолчанию подразумевается DISTINCT для всего результирующего набора данных. Если указать ключевое слово ALL, то результат будет содержать все найденные строки из всех примененных команд SELECT.

Если для всего результата UNION необходимо применить оператор ORDER BY, следует использовать круглые скобки:

(SELECT a FROM table_name WHERE a=10 AND B=1 ORDER BY a LIMIT 10)
UNION
(SELECT a FROM table_name WHERE a=11 AND B=2 ORDER BY a LIMIT 10)
ORDER BY a;

User Comments

Posted by on Sunday February 9 2003, @7:47pm [Delete] [Edit]

There's a tutorial though that explains how to emulate UNION statements in MySQL 3.x. The address is:

http://www.nstep.net/~mpbailey/programming/tutorials.union.php

Posted by on Tuesday February 18 2003, @4:54pm [Delete] [Edit]

One little gotcha with UNION. The manual says that the
columns you select should be of the same type. That means
that if you SELECT literal values first, as you might if you wanted column headers to be printed, subsequent SELECTs
in the UNION will be limited to the lengths of strings you give.

Example:
If you run a SELECT statement such as this:
SELECT
"foo" foo_col,
"bar" bar_col,
"zama" zama_col
UNION ALL
SELECT
foo_col,
bar_col,
zama_col
FROM
tabname
...

The returned columns will be limited to 3, 3, and
4 characters in length respectively because that was
the length of the first "row" returned.

To workaround this, select an empty row from the
true table first:

SELECT
foo_col,
bar_col,
zama_col
FROM
tabname
WHERE
1=0
UNION
SELECT
"foo" foo_col,
"bar" bar_col,
"zama" zama_col
UNION ALL
SELECT
foo_col,
bar_col,
zama_col
FROM
...

Add your own comment.

Top / Previous / / Up / Table of Contents