Curso de MySQL
Consultas, lista de correo 'C++ Con Clase' 'MySQL Con Clase' página de entrada Tabla de contenido Contactar con Webmaster
Curso Sentencias Funciones API C

SQL

Sentencias

ALTER TABLE ANALYZE TABLE BACKUP TABLE BEGIN BEGIN WORK CHECK TABLE CHECKSUM TABLE COMMIT CREATE DATABASE CREATE TABLE CREATE USER DELETE DESCRIBE DO DROP DATABASE DROP INDEX DROP TABLE DROP USER FLUSH GRANT HANDLER INSERT INSERT ... SELECT INSERT DELAYED JOIN KILL LOAD DATA LOCK TABLES OPTIMIZE TABLE RENAME TABLE REPAIR TABLE REPLACE RESET REVOKE ROLLBACK SELECT SET SET TRANSACTION SHOW SHOW CHARACTER SET SHOW COLLATION SHOW COLUMNS SHOW CREATE DATABASE SHOW CREATE TABLE SHOW CREATE VIEW SHOW DATABASES SHOW ENGINES SHOW ERRORS SHOW GRANTS SHOW INDEX SHOW INNODB STATUS SHOW KEYS SHOW LOGS SHOW PRIVILEGES SHOW PROCESSLIST SHOW STATUS SHOW TABLE STATUS SHOW TABLES SHOW VARIABLES SHOW WARNINGS START TRANSACTION TRUNCATE UNLOCK TABLES UPDATE USE

UNION

SELECT ...
UNION [ALL | DISTINCT]
SELECT ...
  [UNION [ALL | DISTINCT]
   SELECT ...]

UNION se usa para combinar los resultados de varias sentencias SELECT en un único conjunto de resultados. UNION está disponible a partir de MySQL 4.0.0.

Las columnas seleccionadas listadas en las posiciones correspondientes para cada sentencia SELECT deben ser del mismo tipo. (Por ejemplo, la primera columna seleccionada por la primera sentencia debe ser del mismo tipo que la primera columna seleccionada por las otras sentencias.) En los resultados devueltos se usarán los nombres de columna usados en la primera sentecia SELECT.

Las sentencias SELECT son sentencias de selección normales, pero con las siguientes restricciones:

Si no se usa la palabra clave ALL para la UNION, todas las filas devueltas serán únicas, igual que si se hubiese especificado DISTINCT para el conjunto de resultados total. Si se especifica ALL, se obtendrán todas las filas coincidentes de todas las sentencias SELECT.

La palabra clave DISTINCT es una palabra opcional (introducida en MySQL 4.0.17). No hace nada, pero se admite en la sintaxis tal como se requiere en SQL estándar.

Antes de MySQL 4.1.2, no era posible mezclar UNION ALL y UNION DISTINCT en la misma consulta. Si se usa ALL para una UNION, se usará para todas ellas. A partir de MySQL 4.1.2, los tipos de UNION mezclados se tratan como si una unión DISTINCT anulara cualquier unión ALL a su izquierda. Una unión DISTINCT se puede producir explícitamente usando UNION DISTINCT o sencillamente UNION sin las palabras DISTINCT o ALL a continuación.

Si se quiere usar una cláusula ORDER BY o LIMIT para ordenar o limitar el resultado completo de una UNION, hay que poner entre paréntesis cada sentencia SELECT individual y colocar el ORDER BY o LIMIT después de la última. El ejemplo siguiente usa ambas cláusulas:

(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;

Este tipo de ORDER BY no puede usar referencias de columna que incluyan un nombre de tabla (esto es, nombres en el formato tbl_name.col_name). En su lugar, hay que proporcionar un alias de columna en la primera sentencia SELECT y referirse al alias en la cláusula ORDER BY, o si no referirse a la columna en el ORDER BY usando su posición. (Es preferible un alias ya que el uso de posiciones de columna está desaconsejado.)

Para aplicar ORDER BY o LIMIT a un SELECT individual, hay que colocar la cláusula dentro del paréntesis que contiene el 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);

Los tipos y longidudes de las columnas en el conjunto de resultados de una UNION tienen en cuenta los valores recuperados por todas las sentencias SELECT. Antes de MySQL 4.1.1, una limitación de UNION es que sólo los valores del primer SELECT se usan para determinar los tipos y longitudes de las columnas del resultado. Esto puede producir valores truncados, por ejemplo, el primer SELECT devuelve valores más cortos que el segundo:

mysql> SELECT REPEAT('a',1) UNION SELECT REPEAT('b',10);
+---------------+
| REPEAT('a',1) |
+---------------+
| a             |
| b             |
+---------------+

Esta limitación se ha eliminado desde MySQL 4.1.1:

mysql> SELECT REPEAT('a',1) UNION SELECT REPEAT('b',10);
+---------------+
| REPEAT('a',1) |
+---------------+
| a             |
| bbbbbbbbbb    |
+---------------+

(4.1.1)