BASES DE DATOS
Consultas multitabla y
subconsultas
11
/ 1. Introducción y contextualización práctica 3
/ 2. Consultas sobre varias tablas 4
2.1. Composiciones internas: producto cartesiano 5
2.2. Composiciones externas 6
/ 3. Caso práctico 1: “Sentencias en Oracle SQL Live” 7
/ 4. Subconsultas 7
4.1. Subconsultas de varias filas 8
4.2. Subconsultas con exists, from, join y having 9
/ 5. Funciones de agregado: unión e intersección 11
/ 6. Funciones de agregado: diferencias, combinación
de operaciones y ordenación 12
/ 7. Caso práctico 2: “Subconsultas en Oracle SQL Live” 13
/ 8. Resumen y resolución del caso práctico de la unidad 13
/ 9. Bibliografía 14
© MEDAC 978-84-18864-07-0
Reservados todos los derechos. Queda rigurosamente prohibida, sin la autorización escrita de los titulares del copyright,
bajo las sanciones establecidas en las leyes, la reproducción, transmisión y distribución total o parcial de esta obra por
cualquier medio o procedimiento, incluidos la reprografía y el tratamiento informático.
Conocer las posibilidades de las consultas multitabla.
Realizar y manejar consultas multitabla con fluidez.
Comprender las características y método de utilización de las subconsultas.
Conocer el manejo de uniones, intersecciones y diferencia de consultas.
/ 1. Introducción y contextualización práctica
En temas anteriores, hemos estudiado varios tipos de consultas a bases de datos, pero, en todos los casos, se referían
al acceso a la información contenida en una única tabla.
No obstante, según hemos estudiado, una de las principales características de las bases de datos es que reparten la
información que contienen en varias tablas, con el fin de evitar el duplicado de registros.
Por lo tanto, es obvio que, en muchas ocasiones, puede ser útil obtener información de varias tablas a través de una
misma sentencia. De hecho, es bastante habitual que sea el caso en entornos profesionales.
Mediante el estudio de este tema, profundizaremos, en primer lugar, en cómo realizar consultas multitabla y
en la problemática que existe al respecto. También veremos ejemplos prácticos. Posteriormente, estudiaremos
el uso y características de las subconsultas, también por medio de
ejemplos prácticos.
Al igual que en temas anteriores, en este caso, la práctica es muy importante,
para poder dominar la utilización de este tipo de consultas y beneficiarse de
las ventajas y del potencial que ofrecen.
Fig. 1. Podemos utilizar Oracle SQL Developer
Escucha el siguiente audio en el que planteamos la contextualización práctica para prácticar con consultas aplicando la
del tema. Encontrarás su resolución en el apartado final. teoría que se verá en el tema.
Audio intro. “Vamos a practicar con
consultas multitabla y subconsultas”
https://bit.ly/30LFQAv
TEMA 11. CONSULTAS MULTITABLA Y SUBCONSULTAS
Bases de datos /4
/ 2. Consultas sobre varias tablas
En el mundo de las bases de datos, es muy habitual recabar datos de varias tablas en una misma consulta. Por
ejemplo, si necesitamos obtener los datos de los clientes que han comprado un artículo determinado, necesitaremos
obtener datos de la tabla CLIENTES y de la tabla VENTAS al mismo tiempo. Entre ambas tablas existirá una relación,
por ejemplo, a través del campo ID_CLIENTE.
Utilizando el comando SELECT, es posible realizar consultas a varias tablas en una misma sentencia, mediante la
operación conocida como composición o JOIN. En el siguiente ejemplo, se muestra una consulta multitabla realizada
en Oracle SQL Live:
SELECT E. NOMBRE, C.NOMBRE
FROM EMPLEADOS E
JOIN CLIENTES C ON (E.DNI = C.DNI);
Código 1. Consulta sobre varias tablas.
En el ejemplo anterior, se extraen datos de las tablas EMPLEADOS y CLIENTES a través de una sola consulta, lo que
permite ahorrar tiempo y recursos al sistema, por lo que se aumenta el rendimiento de la consulta y, por tanto, del
sistema.
La sintaxis que podemos definir para realizar consultas multitablas es la siguiente, según SQL 99:
SELECT tablaA.columna1, tablaA.columna2, …, tablaB.columna1, tablaB.clumna2, …
FROM tablaA
[(INNER) JOIN tablaB USING columna]
[(INNER) JOIN tablaB ON (tablaA.colUM = tablaB.colum)]
[NATURAL JOIN tablaB]
[CROSS JOIN tablaB]
[LEFT JOIN tablaB ON (tabla.columna = tablaB.columna)]
[RIGHT JOIN tablaB ON (tabla.columna = tablaB.columna)]
[FULL OUTER JOIN tablaB ON (tabla.columna = tablaB.columna)]
Código 2. Sintaxis de sentencias multitabla, según SQL 99.
Las diferentes cláusulas y opciones existentes (JOIN) las estudiaremos con mayor detalle a lo largo del tema. Estas
se pueden clasificar en dos tipos de composiciones:
• Composiciones internas
• Composiciones externas
Audio 1. “Naturall join y Cross join”
https://bit.ly/30OzHDN
TEMA 11. CONSULTAS MULTITABLA Y SUBCONSULTAS
/5 MEDAC · Instituto Oficial de Formación Profesional
2.1. Composiciones internas: producto cartesiano
Las composiciones internas se caracterizan por asociar una fila de una tabla a todas las filas de otra, eliminando
aquellas filas que no cumplan la condición indicada. En otras palabras, es el resultado de todas las combinaciones de
filas posibles entre las dos tablas de la consulta, en base a un criterio definido. El ejemplo de consulta indicada en el
Código 2 sería un ejemplo de composición interna.
Para relacionar las tablas, se utiliza la cláusula WHERE y se indican las columnas que están relacionadas entre sí.
WHERE tablaA.columna1 = tablaB.columna2
Código 3. Sentencia WHERE para emparejar campos.
Para su uso, deben cumplirse una serie de reglas:
• Se pueden usar más de dos columnas como columnas de emparejamiento.
• Se permite combinar entre sí varias tablas, no solo dos.
• Se permite indicar columnas de varias tablas en la sentencia de consulta, sean o no de emparejamiento.
• En el caso de que existan columnas que tengan el mismo nombre en ambas tablas, será necesario identificarlas
indicando la tabla de procedencia.
• Se aconseja utilizar el menor número de tablas posible.
En el siguiente ejemplo se desea obtener los datos de los clientes que han comprado el producto PC:
SELECT CLIENTES.Id_cliente, CLIENTES.nombre, fecha_compra
FROM CLIENTES c, VENTAS v
WHERE c.id_cliente = v.id_cliente AND v.producto = ‘PC’
Código 4. Ejemplo de sentencia multitabla.
En este ejemplo, debe considerarse que se han creado alias para las tablas CLIENTES y VENTAS (c y v, respectivamente).
Esto es totalmente opcional y se realiza por un motivo de sencillez. Como se puede comprobar, la cláusula WHERE
admite varias condiciones sobre las tablas indicadas, mediante el uso del operador AND. En el ejemplo anterior
también podría utilizarse la cláusula ORDER BY para obtener los datos ordenados de una manera determinada.
En el siguiente ejemplo, se utilizan datos de más de dos tablas. Esto puede deberse a que no hay una relación directa
entre ambas, pero sí a través de una tercera (ASISTENCIA):
SELECT nombre, apellido, fecha_inicio, fecha_fin, as.asignatura
FROM ALUMNOS a, ASIGNATURAS as, ASISTENCIA asi
WHERE a.id_alumno = asi.id_alumno AND as.asignatura = asi.asignatura
Código 5. Ejemplo de sentencia multitabla con más de dos tablas.
TEMA 11. CONSULTAS MULTITABLA Y SUBCONSULTAS
Bases de datos /6
2.2. Composiciones externas
Las composiciones externas no son resultado de un producto cartesiano, ya que en el resultado pueden existir filas
que no tengan correspondencia entre tablas. Es decir, las filas de una de las tablas se combinan con la de la otra, una
a una.
En el formato de SQL 92, las composiciones externas se marcan a través del carácter (+), que se incluirá en la
cláusula WHERE antes de establecer la condición de igualdad.
SELECT C.NOMBRE, C.APELLIDO, V.CANTIDAD
FROM CLIENTES c, VENTAS v
WHERE C.ID_CLIENTE(+) = V.ID_CLIENTE
Código 6. Ejemplo de composición externa.
Entenderemos mejor el concepto en los siguientes puntos del tema.
En la siguiente imagen, se muestra de una manera gráfica e intuitiva la diferencia entre los diferentes tipos de
composiciones (JOINS) existentes en SQL, en base a la sintaxis de SQL 99. Como se puede apreciar, las de tipo
interno (INNER JOIN) combinan elementos comunes de las tablas A y B.
Sin embargo, las composiciones externas (LEFT JOIN, RIGHT JOIN, OUTER JOIN) pueden combinar todos los
elementos de una de las tablas, además de los que sean comunes con la segunda tabla, o únicamente los elementos
que no son comunes. También se pueden mostrar todos los elementos de ambas tablas, o bien todos los elementos
que no sean comunes a ambas tablas, en función de los resultados que se desee obtener en cada caso.
Fig. 2. Tipos de JOINs en SQL.
Vídeo 1. “Concepto y ejemplos de uso de
sentencias Inner join, Left join y Right
join”
https://bit.ly/3iz0rOt
TEMA 11. CONSULTAS MULTITABLA Y SUBCONSULTAS
/7 MEDAC · Instituto Oficial de Formación Profesional
/ 3. Caso práctico 1: “Sentencias en Oracle SQL Live”
Planteamiento: Dado que es muy importante practicar con sentencias SQL para adquirir conocimiento de estas y de
su funcionamiento, vamos a utilizar la herramienta Oracle Live SQL que vimos en temas anteriores.
Nudo: Concretamente, vamos a crear las siguientes tablas, siguiendo el procedimiento que vimos en temas anteriores:
PRODUCTOS CATEGORÍAS
ID_PRODUCTO ID_CATEGORÍA
NOMBRE_PRODUCTO NOMBRE_CATEGORÍA
ID_CATEGORÍA
PRECIO
Tabla 1. Ejemplo
Sobre cada tabla, crearemos varios elementos (por lo menos 5 en cada una). El objetivo de la actividad es practicar
con las consultas multitabla estudiadas anteriormente, de manera que se utilicen varias consultas tipo JOIN. Hay que
tener en cuenta que puede (y debe) haber ID_CATEGORÍA que no tienen productos asociados.
Se debe especificar el objetivo de la consulta y explicar el resultado obtenido.
Desenlace: Una posible consulta puede ser la siguiente, en la que se devuelven los nombres de producto y de
categoría de ambas tablas a través de una cláusula INNER JOIN, es decir, solo los que son comunes a ambas tablas.
SELECT NOMBRE_PRODUCTO, ID_CATEGORIA
FROM PRODUCTOS P
INNER JOIN CATEGORÍAS C ON P.ID_PRODUCTO = C.ID_PRODUCTO
Código 7. Ejemplo de composición interna sobre las tablas indicadas.
/ 4. Subconsultas
Las subconsultas se pueden definir como una consulta dentro de otra consulta, es decir, se aprovechan los resultados
de una consulta específica para realizar otra consulta nueva, en una única sentencia. La sintaxis que suelen seguir es la
siguiente: En color azul se marca lo que se conoce como SUBSELECT (o segunda consulta), que debe ir entre paréntesis:
SELECT Columnas
FROM tabla
WHERE expresión [OPERADOR]
(SELECT colums FROM tabla);
Código 8. Sintaxis habitual de una subconsulta.
El operador que se puede utilizar puede ser cualquiera de los siguientes: <,>, <=, >=, !=, = o IN. En ese caso, la
subconsulta suele devolver un único valor.
TEMA 11. CONSULTAS MULTITABLA Y SUBCONSULTAS
Bases de datos /8
Además de en la cláusula WHERE, la subconsulta también puede incluirse en el interior de cláusulas como HAVING
o FROM.
Por ejemplo, podemos necesitar información de los empleados de un determinado departamento (VENTAS,
en nuestro caso práctico), cuyo ID no es conocido. Para ello, puede ser necesario obtener datos de dos tablas:
EMPLEADOS y DEPARTAMENTOS. En la primera, está el ID_Dpto y en la segunda, el nombre.
SELECT NOMBRE, APELLIDO, DNI
FROM EMPLEADOS
WHERE ID_DPTO = (Departamento cuyo nombre es Ventas);
Código 9. Ejemplo de primera parte de subconsulta.
Para saber el código del departamento VENTAS necesitamos buscarlo en DEPARTAMENTOS, mediante una subconsulta:
SELECT ID_DPTO
FROM DEPARTAMENTOS
WHERE NOMBRE = ‘VENTAS’;
Código 10. Ejemplo de segunda parte de subconsulta
De esta manera, la consulta global quedaría de la siguiente forma:
SELECT NOMBRE, APELLIDO, DNI
FROM EMPLEADOS
WHERE ID_DPTO = (SELECT ID_DPTO FROM DEPARTAMENTOS
WHERE NOMBRE = ‘VENTAS’);
Código 11. Ejemplo de subconsulta
4.1. Subconsultas de varias filas
Anteriormente indicamos que una subconsulta solo puede obtener una fila, en el caso en el que se utilicen operadores
de comparación, pero, a veces, es necesario mostrar más. Para ello, se utilizan otras instrucciones que lo permiten:
INSTRUCCIÓN USO
Se compara con cualquier fila de la subconsulta. Es válida si existe algún registro de la
ANY / SOME
subconsulta que lo permita.
Se compara con todas las filas de la subconsulta. Es válida si la comparación con todos los
ALL
registros de la subconsulta es cierta.
IN Se comprueba si un determinado valor está en el resultado de la subconsulta.
NOT IN Se comprueba si un valor no está en la subconsulta, es decir, el contrario del anterior.
Tabla 2. Instrucciones para subconsultas múltiples.
TEMA 11. CONSULTAS MULTITABLA Y SUBCONSULTAS
/9 MEDAC · Instituto Oficial de Formación Profesional
Vamos a ver algunos ejemplos para entender mejor su uso. Mediante la siguiente consulta, se obtendrían los
empleados que se encuentran en la tabla de CLIENTES:
SELECT NOMBRE, APELLIDOS FROM EMPLEADOS
WHERE DNI IN
(SELECT DNI FROM CLIENTES);
Código 12. Ejemplo de subconsulta múltiple utilizando IN.
En el siguiente ejemplo, se selecciona información sobre el empleado con mayor salario del departamento de
VENTAS:
SELECT NOMBRE, APELLIDOS FROM EMPLEADOS
WHERE SALARIO > ALL (SELECT SALARIO FROM EMPLEADOS
WHERE NOMBRE_DPTO = ‘VENTAS’);
Código 13. Ejemplo de subconsulta múltiple utilizando ALL.
En este caso, obtenemos los datos de los empleados con un salario mayor que alguno de los empleados (id_empleado
= 5):
SELECT NOMBRE, APELLIDOS, SALARIO FROM EMPLEADOS
WHERE SALARIO > ANY
(SELECT SALARIO FROM EMPLEADOS WHERE ID_EMPLEADO = 5);
Código 14. Ejemplo de subconsulta múltiple utilizando ANY.
4.2. Subconsultas con exists, from, join y having
Subconsultas con exists
Mediante esta cláusula, se obtiene el valor «verdadero» si la subconsulta devuelve algún valor. En caso contrario,
devuelve «falso». Se puede utilizar también negada: «NOT EXISTS».
En este ejemplo, se muestran los productos que se encuentran en la tabla ALMACEN. Puede observarse que se
utilizan consultas correlacionadas (incluyen alias de una tabla en concreto):
SELECT NOMBRE, PRECIO, FABRICANTE FROM PRODUCTOS P
WHERE EXISTS (SELECT NOMBRE, PRECIO FROM ALMACEN
WHERE NOMBRE = P.NOMBRE AND PRECIO = P.PRECIO);
Código 15. Ejemplo de subconsulta múltiple utilizando ALL.
TEMA 11. CONSULTAS MULTITABLA Y SUBCONSULTAS
Bases de datos / 10
Subconsultas con la cláusula from y join
Las subconsultas pueden anidarse con otras cláusulas, como FROM o JOIN. El objetivo es el mismo que en los casos
que hemos visto hasta ahora, y es el de obtener, mediante la subconsulta, datos necesarios para realizar la consulta
principal.
Por ejemplo, si quisiésemos conocer datos sobre los empleados de cargo «Responsables» con un salario determinado,
podemos utilizar las siguientes consultas, mediante FROM y JOIN:
SELECT E.NOMBRE
FROM EMPLEADOS E,
(SELECT NOMBRE, ID_EMPLEADO FROM EMPLEADOS
WHERE SALARIO > 1000) EMP2
WHERE E.RESPONSABLE = EMP2.ID_EMPLEADO;
Código 16. Ejemplo de subconsulta con FROM.
SELECT E.NOMBRE
FROM EMPLEADOS E,
JOIN
(SELECT NOMBRE, ID_EMPLEADO FROM EMPLEADOS
WHERE SALARIO > 1000) EMP2
ON E.RESPONSABLE = EMP2.ID_EMPLEADO;
Código 17. Ejemplo de subconsulta con JOIN
Subconsultas con having
Las subconsultas también pueden utilizarse de manera conjunta con GROUP BY y HAVING. A través del siguiente
ejemplo, se selecciona el departamento cuya media de salarios sea mayor que la total:
SELECT DEPARTAMENTO,
FROM EMPLEADOS GROUP BY DEPARTAMENTO
HAVING AVG(SALARIO) > (SELECT AVG(SALARIO) FROM EMPLEADOS);
Código 18. Ejemplo de subconsulta con FROM.
TEMA 11. CONSULTAS MULTITABLA Y SUBCONSULTAS
/ 11 MEDAC · Instituto Oficial de Formación Profesional
/ 5. Funciones de agregado: unión e intersección
En muchas ocasiones, es necesario unir, crear intersecciones o verificar la diferencia de datos entre dos tablas que
contengan diferentes registros de unos mismos datos con el fin de crear una única tabla. Para ello, se utilizan las
cláusulas UNION, INTERSECT y MINUS.
UNIÓN INTERSECCIÓN DIFERENCIA
Tabla 3. Representación gráfica de unión, intersect y minus.
Estas cláusulas utilizan dos SELECT para combinar sus resultados. Es fundamental que el orden, tipo y número de
columnas sea el mismo. No se pueden combinar columnas tipo NUMBER con columnas tipo DATE, por ejemplo.
Además, pueden realizarse de forma anidada entre sí.
• Unión: Mediante esta cláusula, se combinan los resultados de dos sentencias SELECT y se eliminan las filas
duplicadas. Estas filas podrían mantenerse si se utiliza el operador UNION ALL.
SELECT NOMBRE, APELLIDOS, DNI FROM CLIENTES
UNION
SELECT NOMBRE, APELLIDOS, DNI FROM SOCIOS;
Código 19. Ejemplo de unión de consultas.
• Intersección: Mediante la cláusula INTERSECT, se analizan las filas de los dos SELECT, devolviendo únicamente
aquellas filas que estén en ambas tablas. Además, las filas duplicadas se eliminan.
SELECT NOMBRE, APELLIDOS, DNI FROM CLIENTES
INTERSECT
SELECT NOMBRE, APELLIDOS, DNI FROM SOCIOS
INTERSECT
SELECT NOMBRE, APELLIDOS, DNI FROM EMPLEADOS;
Código 20. Ejemplo de intersección de consultas.
TEMA 11. CONSULTAS MULTITABLA Y SUBCONSULTAS
Bases de datos / 12
/ 6. Funciones de agregado: diferencias, combinación de
operaciones y ordenación
• Diferencias: Mediante la cláusula MINUS, se obtienen las filas que se encuentran en el primer SELECT, pero no
aparecen en el segundo. Las filas duplicadas, de igual forma, se eliminan.
SELECT FABRICANTE, MODELO FROM MECANICA
WHERE TALLER = 1
MINUS
SELECT FABRICANTE, MODELO FROM MECANICA
WHERE TALLER = 2
Código 21. Ejemplo de diferencia de consultas.
En el ejemplo anterior, se obtendrían los modelos y fabricantes de coches que se encuentran en el taller número 1,
pero no en el número 2.
• Combinación de operaciones: Tal y como se indicó anteriormente, estas operaciones pueden realizarse de
manera anidada, con el fin de realizar consultas de mayor complejidad. Es recomendable usar paréntesis
para evitar problemas y errores que pudieran surgir. En el siguiente ejemplo, se obtendrían los fabricantes y
modelos de coches del taller 1 y 2 que no están en el taller número 3.
(SELECT FABRICANTE, MODELO FROM MECANICA
WHERE TALLER = 1
INTERSECT
SELECT FABRICANTE, MODELO FROM MECANICA
WHERE TALLER = 2)
MINUS
SELECT FABRICANTE, MODELO FROM MECANICA
WHERE TALLER = 3;
Código 22. Ejemplo de combinación de operaciones
• Ordenación de consultas: Es posible ordenar los datos obtenidos a través de las cláusulas UNION, INTERSECT
o MINUS, mediante la cláusula ORDER BY. Debe hacer referencia siempre a la columna del primer SELECT.
SELECT TELEFONO1 FROM EMPLEADOS
UNION
SELECT TELEFONO2 FROM EMPLEADOS
ORDER BY TELEFONO1;
Código 23. Ejemplo de diferencia de consultas
Vídeo 2. “Uso de union, intersect y
minus en oracle express 18c”
https://bit.ly/30M5ULL
TEMA 11. CONSULTAS MULTITABLA Y SUBCONSULTAS
/ 13 MEDAC · Instituto Oficial de Formación Profesional
/ 7. Caso práctico 2: “Subconsultas en Oracle SQL Live”
Planteamiento: Seguiremos practicando con sentencias SQL mediante Oracle SQL Live, poniendo en práctica los
conocimientos que hemos visto a lo largo del tema.
Nudo: Para ello, vamos a utilizar las tablas creadas en el Caso Práctico 1, junto a otras dos nuevas tablas
que crearemos:
EMPLEADOS DEPARTAMENTOS
ID_EMPLEADO ID_DPTO
NOMBRE NOMBRE
APELLIDOS RESPONSABLE DPTO.
TELÉFONO
SALARIO
RESPONSABLE
ID_DPTO
Tabla 4. Ejemplo
El objetivo de la actividad es practicar con las subconsultas estudiadas anteriormente, de manera que se utilicen
varias variantes y cláusulas.
Se debe especificar el objetivo de la consulta y explicar el resultado obtenido.
Desenlace: Una posible consulta puede ser la siguiente, mostrada en el último ejemplo del punto 4.2.:
SELECT DEPARTAMENTO,
FROM EMPLEADOS
GROUP BY DEPARTAMENTO
HAVING AVG(SALARIO) > (SELECT AVG(SALARIO) FROM EMPLEADOS);
Código 24. Ejemplo subconsulta con distintas variantes.
/ 8. Resumen y resolución del caso práctico de la unidad
En este tema, hemos comenzado estudiando la forma de realizar consultas sobre varias tablas. Para ello, hemos
estudiado los conceptos de composiciones internas y composiciones externas. También hemos analizado los tipos
de JOIN que existen en SQL y hemos comprobado cómo se aplican sobre las tablas de una base de datos.
Posteriormente, hemos profundizado en el concepto de subconsulta, analizando los principales tipos de subconsultas
existentes y los usos que se les puede dar en un entorno real de base de datos: subconsultas de varias filas, utilizando
el operador EXIST, utilizando las cláusulas FROM, JOIN o HAVING, etc.
TEMA 11. CONSULTAS MULTITABLA Y SUBCONSULTAS
Bases de datos / 14
Por último, hemos practicado con las cláusulas UNION, INTERSECT y MINUS, que se utilizan habitualmente en bases
de datos para realizar uniones, intersecciones y diferencias entre los datos de diferentes tablas. Además del concepto
de estas cláusulas y de varios ejemplos sobre su uso, también hemos estudiado las operaciones de combinación y
ordenación de datos utilizándolas.
Resolución del caso práctico de la unidad.
Como planteamos inicialmente, ahora que tenemos un diseño bastante avanzado de la base de datos para la tienda
de nuestro amigo, nos traslada una necesidad en la cual podamos ayudarle. Necesita saber, de entre sus clientes,
cuáles han comprado un determinado producto.
También desea saber los nombres y apellidos de sus clientes y empleados, mediante una única consulta a la base de
datos.
• ¿Cómo podríamos ayudarle a conseguir estos datos?
Podríamos ayudarle mediante el uso de las siguientes consultas, vistas en el tema a modo de ejemplos prácticos:
SELECT CLIENTES.Id_cliente, CLIENTES.nombre, fecha_compra
FROM CLIENTES c, VENTAS v
WHERE c.id_cliente = v.id_cliente AND v.producto = ‘PC’
SELECT NOMBRE, APELLIDOS, DNI FROM CLIENTES
INTERSECT
SELECT NOMBRE, APELLIDOS, DNI FROM EMPLEADOS
Código 25. Resolución caso práctico inicial.
/ 9. Bibliografía
Cabrera, G. (2011). Sistemas gestores de bases de datos. Madrid: Paraninfo.
Elmasri, R. y Navathe, S. (2007). Fundamentos de Bases de Datos (5.a. ed.). Madrid: Pearson Addison-Wesley.
López, I., Castellano, M.J. y Ospino, J. (2011). Bases de datos. Madrid: Garceta.
Oppel, A. (2009). Databases: A Beginner’s Guide. Madrid, España: McGraw-Hill.