Documentos de Académico
Documentos de Profesional
Documentos de Cultura
UT6.CONSULTAS MULTITABLA 1 Subconsultas
UT6.CONSULTAS MULTITABLA 1 Subconsultas
CONSULTAS DE
RECUPERACIÓN
MULTITABLA EN SQL
UT6. CONSULTAS DE RECUPERACIÓN
MULTITABLA EN SQL
LIBROS
Codigo Titulo Num_paginas Editorial
34587 Int. Artificial 50 Paraninfo
1022305 Concep. Y Dis. 48 Rama
493942 Turbo C++ 125 Mc Graw-Hill
45307 Virus Informát. 50 NULL
112313 Sist. Informac. 358 Rama
CONSIDERACIONES GENERALES
• Se puede poner un alias a cada tabla. Se recomienda en el caso de utilizar varias
tablas en la misma sentencia. Esto se realiza igual que los alias de las columnas. Tanto
para la tabla, como para las columnas, no es necesario poner la palabra reservada
‘AS’. Normalmente en las columnas se suele poner, mientras que en las tablas no.
• A las columnas se les puede llamar por su nombre de columna, o por el nombre de
tabla, un punto y el nombre de columna.
Ejemplo: SELECT libros.titulo FROM libros;
• Esto último hay que hacerlo cuando hay dos columnas que se llaman igual (veremos los
casos), ya que el SGBD no es capaz de distinguir a cual de ellas nos referimos.
• Como una tabla puede tener un alias, en vez del nombre de la tabla, se puede utilizar el
alias para calificar la columna.
Ejemplo: SELECT lib.titulo FROM libros lib;
SUBCONSULTAS
• Se utilizan para realizar filtrados con los datos de otra consulta.
• La subconsulta puede utilizar la misma tabla que la tabla principal, pero el tratamiento
es distinto.
SUBCONSULTAS: COMPARACIÓN
• Se usa con los operadores de comparación (=, >=, <=, >, < y <>).
• La subconsulta solo debe devolver una fila y una columna, que debe ser del mismo
tipo que la columna con la que se compara.
• Los pasos que se realizan internamente para resolver esta sentencia son:
• Primero se realiza el SELECT del libro, que devuelve ‘Rama’ y se reemplaza la subconsulta
por ‘Rama’.
SELECT pais FROM editoriales WHERE nombre_e = ‘Rama’ Pais
• Se ejecuta la sentencia. España
SUBCONSULTAS: COMPARACIÓN
SELECT titulo, num_paginas FROM libros WHERE num_paginas < (SELECT
num_paginas FROM libros WHERE codigo = 493942);
Titulo Num_paginas
Int. Artificial 50
La subconsulta devuelve 125, por lo que se
Eliminan todos los libros que tengan 125 Concep. Y Dis. 48
páginas o más. Virus Informát. 50
Optimización 30
En estos casos, aunque en ambos SELECT se
utilizan la misma tabla (libros), no hay lugar Seguridad 50
a equivocaciones, y en cada caso se sabe a Hardware 70
qué libros se está refiriendo (uno es la Optimización2 30
subconsulta, y otro la consulta principal).
SUBCONSULTAS: IN
El operador de pertenencia a conjuntos (IN), comprobaba que el valor de la
columna fuera uno de los indicados en el conjunto de valores. Una subconsulta que
devuelva varios valores (muchas filas, una columna), puede utilizarse con este
operador.
SELECT titulo FROM libros WHERE num_paginas >= ALL (SELECT num_paginas FROM
libros); Titulo
Sist. Informac.
Devuelve el título del libro que tiene más páginas de todos los libros. Esta consulta se
puede realizar de otras formas.
SUBCONSULTAS: ALL Y ANY
SELECT titulo FROM libros WHERE editorial LIKE ‘Paraninfo’ AND num_paginas >
ALL (SELECT num_paginas FROM libros WHERE editorial LIKE ‘Rama);
Selecciona los libros de la editorial Paraninfo que tengan más páginas que todos los
libros de la editorial Rama. No devuelve ningún resultado, porque hay un libro de Rama
con 358 páginas, y ningún libro de Paraninfo lo supera.
Titulo
SELECT titulo FROM libros WHERE editorial LIKE ‘Paraninfo’ AND num_paginas >
ANY (SELECT num_paginas FROM libros WHERE editorial LIKE ‘Rama);
Selecciona los libros de la editorial Paraninfo que tengan más páginas que algún libro de
la editorial Rama. Titulo
Int. Artificial
Seguridad
Hardware
SUBCONSULTA EN SELECT
Una subconsulta también puede utilizarse como un campo (columna) más de los
resultados de otro SELECT.
Se suele dar un nombre a esa columna resultado.
En este caso, la subconsulta debe devolver sólo un campo, y una fila.
En la subconsulta, se suele referenciar también a la tabla principal (por eso, se
entiende que por cada fila de la consulta principal se realiza la subconsulta).
SUBCONSULTA EN SELECT
SELECT nombre_e, direccion,
(SELECT MAX(num_paginas) FROM libros lib WHERE lib.editorial = e.nombre_e) AS libroConMasPaginas,
(SELECT MIN(num_paginas) FROM libros lib2 WHERE lib2.editorial = e.nombre_e) AS libroConMenosPaginas
FROM editoriales e;
En este caso, se muestran las editoriales, y para cada editorial, se muestra el número
de páginas del libro que más página tiene de esa editorial (la primera subconsulta),
y el número de páginas del libro que menos páginas tiene de esa editorial (la
segunda subconsulta).
SUBCONSULTAS ANIDADAS
Direccion Pais
Canillas, 144 España
Selecciona los datos de la editorial que tenga el libro con más páginas.