Intro a SQL y MySQL
Por Nacho Cabanes, versión 0.16

Tema 11 - Union, Vistas

En el apartado anterior comentábamos que la versión actual de MySQL no permite usar "full outer join" para mostrar todos los datos que hay en dos tablas enlazadas, aunque alguno de esos datos no tenga equivalencia en la otra tabla.

También decíamos que se podría imitar haciendo a la vez un "right join" y un "left join".

En general, tenemos la posibilidad de unir dos consultas en una usando "union", así:

select persona.nombre, capacidad.nombre
from persona right outer join capacidad
on persona.codcapac = capacidad.codigo
union
select persona.nombre, capacidad.nombre
from persona left outer join capacidad
on persona.codcapac = capacidad.codigo;



+--------+-----------------+
| nombre | nombre          |
+--------+-----------------+
| Juan   | Progr.C         |
| NULL   | Progr.Java      |
| Javier | Progr.Pascal    |
| NULL   | Bases datos SQL |
| Jesus  | NULL            |
| Jose   | NULL            |
+--------+-----------------+

Nota: en algunos gestores de bases de datos, podemos no sólo crear "uniones" entre dos tablas, sino también realizar otras operaciones habituales entre conjuntos, como calcular su intersección ("intersection") o ver qué elementos hay en la primera pero no en la segunda (diferencia, "difference"). Estas posibilidades no están disponibles en la versión actual de MySQL.

 

Por otra parte, podemos crear "vistas", que nos permitan definir la cantidad de información a la que queremos que ciertos usuarios tengan acceso:

create view personasycapac as
select persona.nombre nompres, capacidad.nombre nomcapac
from persona left outer join capacidad
on persona.codcapac = capacidad.codigo;

Y esta "vista" se utiliza igual que si fuera una tabla:

select * from personasycapac;

+---------+--------------+
| nompres | nomcapac     |
+---------+--------------+
| Javier  | Progr.Pascal |
| Jesus   | NULL         |
| Jose    | NULL         |
| Juan    | Progr.C      |
+---------+--------------+

Cuando una vista deje de sernos útil, podemos eliminarla con "drop view".

(Las vistas están disponibles en MySQL desde la versión 5.0. Más detalles en el apartado 21 del manual de referencia MySQL 5.0)