Página inicial  

Tema 3. Las consultas multitabla (II)


El operador UNION


Como ya hemos visto en la página anterior, el operador UNION sirve para obtener a partir de dos tablas con las mismas columnas, una nueva tabla con las filas de la primera y las filas de la segunda.

La sintaxis es la siguiente:

 


Consulta puede ser un nombre de tabla, un nombre de consulta (en estos dos casos el nombre debe estar precedido de la palabra TABLE), o una sentencia SELECT completa (en este caso no se puede poner TABLE). La sentencia SELECT puede ser cualquier sentencia SELECT con la única restricción de que no puede contener la cláusula ORDER BY.

Después de la primera consulta viene la palabra UNION y a continuación la segunda consulta. La segunda consulta sigue las mismas reglas que la primera consulta.

Las dos consultas deben tener el mismo número de columnas pero las columnas pueden llamarse de diferente forma y ser de tipos de datos distintos.

Las columnas del resultado se llaman como las de la primera consulta.

Por defecto la unión no incluye filas repetidas, si alguna fila está en las dos tablas, sólo aparece una vez en el resultado.

Si queremos que aparezcan todas las filas incluso las repeticiones de filas, incluimos la palabra ALL (todo en inglés).

El empleo de ALL tienen una ventaja, la consulta se ejecutará más rapidamente. Puede que la diferencia no se note con tablas pequeñas, pero si tenemos tablas con muchos registros (filas) la diferencia puede ser notable.

Se puede unir más de dos tablas, para ello después de la segunda consulta repetimos la palabra UNION ... y así sucesivamente.

También podemos indicar que queremos el resultado ordenado por algún criterio, en este caso se incluye la cláusula ORDER BY que ya vimos en el tema anterior. La cláusula ORDER BY se escribe después de la última consulta, al final de la sentencia; para indicar las columnas de ordenación podemos utilizar su número de orden o el nombre de la columna, en este último caso se deben de utilizar los nombres de columna de la primera consulta ya que son los que se van a utilizar para nombrar las columnas del resultado.

 

Para ilustrar la operación vamos a realizar el ejercicio visto en la página anterior, vamos a obtener los códigos de los productos que tienen existencias iguales a cero o que aparezcan en pedidos del año 90.

 

SELECT idfab,idproducto
FROM productos
WHERE existencias = 0
UNION ALL
SELECT fab,producto
FROM pedidos
WHERE year(fechapedido) = 1990
ORDER BY idproducto

 

o bien

TABLE [existencias cero]
UNION ALL
TABLE [pedidos 90]
ORDER BY idproducto

Se ha incluido la cláusula ALL porque no nos importa que salgan filas repetidas.

Se ha incluido ORDER BY para que el resultado salga ordenado por idproducto, observar que hemos utilizado el nombre de la columna de la primera SELECT, también podíamos haber puesto ORDER BY 2 pero no ORDER BY producto (es el nombre de la columna de la segunda tabla).


Para el 2º caso hemos creado una consulta llamada existencias cero con la primera SELECT, y una consulta llamada pedidos 90 con la segunda SELECT. Observar que los nombres de las consultas están entre corchetes porque contienen espacios en blanco, y que en este caso hay que utilizar TABLE.

 



 
Pag. 3.2
Aviso legal: este curso es gratuito siempre que se visualice desde la página web de aulaClic. No está permitido descargar el curso ni utilizarlo en academias o centros de enseñanza privados sin estar conectado a Internet.
© aulaClic. Todos los derechos reservados. Free Computer tutorials . Prohibida la reproducción por cualquier medio.
Abril-2001.aulaClic.com