Está en la página 1de 17

UT6.

CONSULTAS DE
RECUPERACIÓN
MULTITABLA EN SQL
UT6. CONSULTAS DE RECUPERACIÓN
MULTITABLA EN SQL

• Herramientas gráficas, proporcionadas por el sistema gestor o externas, para la


realización de consultas.
• Vinculación de tablas: claves primarias y ajenas. Joins.
• Subconsultas
• Selección de registros, filtrado y ordenamiento en consultas multitablas.
• Tratamiento de valores nulos en consultas multitablas.
• Consultas de resumen, agrupamiento de registros y filtrado sobre agrupaciones en
consultas multitablas.
COMPONENTES DE LOS SGBD:
LENGUAJES
EL LENGUAJE DML

• Las sentencias DML del lenguaje SQL son las siguientes:


• SELECT: Se utiliza para extraer información de la base de datos, tanto de una tabla,
como de varias.
• INSERT: Inserta uno o varios registros en una tabla
• DELETE: Borra registros de una tabla
• UPDATE: Modifica registros en una tabla.
• A todas las sentencias o comandos que se ejecutan en un SGBD se les denomina
CONSULTAS o QUERIES (a veces, también se denominan consultas solo a las
sentencias SELECT, por lo que da lugar a errores de interpretación).
• Todas las sentencias terminan en punto y coma (‘;’).
TABLAS DE EJEMPLOS
EDITORIALES
Nombre_e Direccion Pais Ciudad
Universal Books Brown Sq. 23 EEUU Los Ángeles
Rama Canillas, 144 España Madrid
Mc Graw-Hill Basauri, 17 España Madrid
Paraninfo Virtudes, 7 España Madrid

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.

• Se pueden utilizar tanto en el WHERE, como el HAVING. En algunos casos también se


utilizan como expresión en el SELECT.

• Una subconsulta, es una consulta SELECT encerrada entre paréntesis.

• Se ejecuta primero la subconsulta, y luego la consulta principal.

• 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.

SELECT e.pais FROM editoriales AS e WHERE e.nombre_e = (SELECT l.editorial FROM


libro l WHERE l.codigo = 1022305);

• 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 direccion FROM editoriales WHERE nombre_e IN (SELECT editorial FROM


libros) Ciudad
Madrid
Madrid
Devuelve las editoriales que tienen algún libro.
Madrid
Los Ángeles se eliminan, porque no hay ningún libro de la
editorial ‘Universal Books’.
SUBCONSULTAS: EXISTS Y NOT EXISTS
Filtra los resultados de una consulta si existen filas en la subconsulta asociada. Es decir,
si la subconsulta genera un número de filas distinto de 0. Muchas de las consultas con
EXISTS se pueden escribir de otras formas.
SELECT direccion, pais, ciudad FROM editorial e WHERE EXISTS (SELECT 1 FROM
libros lib WHERE lib.editorial = e.nombre_e);
Selecciona las editoriales que tienen libros.
Observad que en la subconsulta se referencia a la tabla de la consulta principal
(editorial). Para entender el funcionamiento de esta consulta, se puede suponer que
para cada fila de la consulta principal, se realiza la subconsulta. En el ejemplo, la primera
fila que devuelve la consulta principal es la editorial ‘Universal Books’, por lo que se
comprueba (subconsulta) si hay algún libro de esa editorial (se reemplaza e.nombre_e
por ‘Universal Books’), y esa subconsulta no retorna valor, por lo que la condición del
WHERE es falsa (esa fila no es parte de los resultados). Después se toma la segunda
editorial (‘Rama’) y se hace lo mismo, como la subconsulta devuelve valor, esa fila de
editorial sí pasa al conjunto de resultados.
SUBCONSULTAS: EXISTS Y NOT EXISTS
SELECT direccion, pais, ciudad FROM editorial e WHERE EXISTS (SELECT 1 FROM
libros lib WHERE lib.editorial = e.nombre_e);

Direccion Pais Ciudad


Canillas, 144 España Madrid
Basauri, 17 España Madrid
Virtudes, 7 España Madrid

En el ejemplo se ha utilizado el valor 1 como resultado de la subconsulta porque es


una expresión muy eficiente (no hay que consultar ninguna columna).
NOT EXISTS se utiliza de la misma, y es cierto (esa fila pasa a los resultados)
cuando la subconsulta no devuelve ningún valor.
SUBCONSULTAS: ALL Y ANY
Se puede comparar (con un operador de comparación) el valor de una columna con
todos los elementos resultados de una subconsulta que devuelva una única columna.
Existen 2 comparadores:
- ALL: Indica que la condición de comparación debe ser satisfactoria con todos los
resultados de la subconsulta.
- ANY: Indica que la condición de comparación debe ser satisfactoria para al menos uno
de los resultados de la subconsulta.

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;

Nombre_e Direccion libroConMasPaginas libroConMenosPaginas


Mc Graw-Hill Basauri, 17 125 125
Paraninfo Virtudes, 7 70 30
Rama Canillas, 144 358 48
Universal Books Brown Sq. 23 NULL NULL

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

Dentro de una subconsulta, puede haber otras subconsultas de cualquiera de los


tipos aquí mencionados.
SELECT direccion, pais FROM editoriales WHERE nombre_e IN (SELECT editorial
FROM libros WHERE num_paginas = (SELECT max(num_paginas) FROM
libros));

Direccion Pais
Canillas, 144 España

Selecciona los datos de la editorial que tenga el libro con más páginas.

También podría gustarte