Guía 9 PDF
Guía 9 PDF
Guía 9 PDF
Guía N.º 9
Curso
Administración de Base de Datos
Tema
Unión de Tablas en Oracle
Tabla de Contenidos
1. Introducción a Unión......................................................................................................... 3
2. Uniones ............................................................................................................................. 4
3. Intersecciones .................................................................................................................... 5
4. Diferencias ........................................................................................................................ 5
Referencias.............................................................................................................................. 17
3
Se usan cuando los datos que se quieren obtener pertenecen a distintas tablas y no se
puede acceder a ellos con una sola consulta. Es necesario que las tablas referenciadas tengan
tipos de datos similares, la misma cantidad de campos y el mismo orden de campos en la lista
1. Introducción a Unión
Estas consultas utilizan al menos dos SELECT cuyos resultados se pueden combinar
para formar una única consulta. Se basan en los operadores matemáticos de conjuntos (unión,
intersección y diferencia).
columnas debe de ser el mismo en todas las consultas que se combinan. Por ejemplo:
UNION
Este código daría lugar a un error, ya que las columnas nombre (normalmente de tipo
VARCHAR2) y edad (normalmente de tipo NUMBER) no son del mismo tipo, lo que
provocaría un error.
UNION
Aunque ambas consultas a unir tienen las mismas columnas y del mismo tipo, no
están el mismo orden por lo que tendremos un nuevo error. (Sanchez, 2020)
2. Uniones
ello ambas instrucciones tienen que utilizar el mismo número y tipo de columnas. Ejemplo:
UNION
decir, UNION, retorna una consulta en la que el resultado son las filas de ambas consultas.
(Sanchez, 2020)
El operador UNION une los resultados de varios SELECT. Pero si hay datos
FROM clientes
UNION
FROM socios;
Si hay alguna persona que es cliente y socio a la vez solo aparecería una vez.
FROM clientes
UNION ALL
FROM socios;
El funcionamiento y uso es similar, pero UNION ALL no elimina los datos repetidos.
3. Intersecciones
modo que el resultado serán las filas que estén presentes en ambas consultas.
WHERE n_almacen=1
INTERSECT
WHERE n_almacen=2
4. Diferencias
Con MINUS también se combinan dos consultas SELECT de forma que aparecerán
WHERE n_almacen=1
MINUS
6
5. Combinaciones de Operaciones
muy complejas. Para aclarar qué operaciones deseamos realizar primero es conveniente
WHERE n_almacen=1
INTERSECT
WHERE n_almacen=2)
MINUS
WHERE n_almacen=3;
Este código devuelve los tipos y modelos de piezas que están en los almacenes 1 y 2,
salga ordenado, hay que tener en cuenta que la cláusula ORDER BY se debe indicar al final
SELECT apellido1
FROM alumnos
UNION
SELECT apellido2
7
FROM alumnos;
instrucción. Ejemplo:
SELECT apellido1
FROM alumnos
UNION
SELECT apellido2
FROM alumnos
ORDER BY apellido1;
SELECT apellido1
FROM alumnos
UNION
SELECT apellido2
FROM alumnos
deseamos ordenar:
SELECT apellido1
FROM alumnos
UNION
SELECT apellido2
FROM alumnos
ORDER BY 1;
8
Además, hay que tener muy en cuente que la cláusula ORDER BY solo se puede
utilizar al final de todos los SELECT que se han combinado. Es incorrecto el código:
FROM clientes
UNION ALL
FROM socios;
También lo es:
FROM clientes
UNION ALL
FROM socios
ORDER BY apellido1,apellido2,nombre;
Solo es correcto:
FROM clientes
UNION ALL
FROM socios
7. Taller Unión
Una clínica almacena los datos de los médicos en una tabla llamada "medicos" y los
legajo number(3),
nombre varchar2(30),
domicilio varchar2(30),
especialidad varchar2(30),
primary key(legajo)
);
nombre varchar2(30),
domicilio varchar2(30),
obrasocial varchar2(20),
primary key(documento)
);
444','oculista');
Note que existen dos médicos que también están presentes en la tabla "pacientes";
union
Realice la misma consulta anterior pero esta vez, incluya los registros duplicados.
union all
Realice la misma consulta anterior y esta vez ordene el resultado por nombre (9
registros)
union all
order by nombre;
union
almacena los datos de los alumnos que estudian inglés en una tabla llamada "ingles", los que
están inscriptos en "francés" en una tabla denominada "frances" y los que cursan portugues
en la tabla "portugues".
nombre varchar2(30),
domicilio varchar2(30),
primary key(documento)
);
nombre varchar2(30),
domicilio varchar2(30),
12
primary key(documento) );
nombre varchar2(30),
domicilio varchar2(30),
primary key(documento) );
La academia necesita el nombre y domicilio de todos los alumnos que cursan los tres
idiomas para enviarles una tarjeta de descuento. Obtenemos los datos necesarios de las tres
intersect
intersect
Aparece solamente un registro, correspondiente a "Daniel Duarte", que está en las tres
tablas. Note que los alumnos que solamente asisten a una clase o solamente a dos, no
aparecen en el resultado.
Si queremos los registros que están presentes en más de dos tablas podemos realizar
intersect
union
intersect
union
intersect
Duarte); unimos estos dos resultados con "union" y obtenemos 3 registros (Caseros, Duarte y
que al "unirlos" al resultado de la primera unión (Caseros, Duarte y Esper) nos devuelve 4
14
registros. Note que algunas consultas se encierran entre paréntesis para especificar que la
operación se realiza entre las tablas incluidas en ellos. (Oracle Ya, 2020)
los datos de los alumnos que estudian inglés en una tabla llamada "ingles" y los que están
nombre varchar2(30),
domicilio varchar2(30),
primary key(documento) );
nombre varchar2(30),
domicilio varchar2(30),
primary key(documento) );
solamente inglés (no presentes en la tabla "frances") para enviarles publicidad referida al
minus
ningún registro de la segunda consulta. Los registros presentes en ambas tablas (Daniel
domicilio de todos los alumnos que cursan solamente francés (no presentes en la tabla
minus
ningún registro de la segunda consulta. Los registros presentes en ambas tablas (Daniel
Duarte y Estela Esper), no aparecen en el resultado final. Si queremos los alumnos que cursan
un solo idioma (registros de "ingles" y de "frances" que no coinciden), podemos unir ambas
union
16
minus
intersect
buscan los registros de "ingles" que no coinciden con "frances" y los registros de "frances"
minus
union
minus
Referencias
https://www.tutorialesprogramacionya.com/oracleya/temarios/descripcion.php?cod=2
23&punto=65&inicio=
https://jorgesanchez.net/manuales/sql/select-conjuntos-sql2016.html