Clase 8

Anuncio
SQL: Lenguje de Interrogación
Estructurado
Ordenamiento en SQL
•Estructura de bloque
SELECT ... FROM...WHERE ...
ORDER BY <lista de atributos>
•Semántica
–Ordena el resultado ascendentemente según los atributos
•Ejemplo: ¿datos de libros de UNILIT,
ordenados por autor y título?
SELECT *
FROM LIBRO
WHERE editorial=‘UNILIT
ORDER BY autor, nombre
Subqueries “unitarios”
•Estructura de condición
<lista de atributos> <comparador>
(SELECT ...FROM ... WHERE ...)
•Semántica
–El resultado del subquery tiene la misma estructura
que los atributos (Estrustura compatible)
–El subquery devuelve un solo valor
–Compara la tupla con resultado del subquery
•Ejemplo: ¿libros del autor y editor de ‘Hombre eres libre’?
SELECT * FROM LIBRO
WHERE (autor,editorial) =
( SELECT autor,editorial FROM LIBRO
WHERE nombre=‘Hombre eres libre’)
Subqueries con IN
•Estructura de condición
<lista de atributos> IN
(SELECT ...FROM ... WHERE ...)
•Semántica
–Estructura compatible
–Verifica membresía de la tupla al resultado del
subquery
•Ejemplo: ¿autor y editor de libros que les gustan a Leonid?
SELECT autor,editor FROM LIBRO
WHERE codigo IN
( SELECT codlib FROM LECTOR,Gusta
WHERE nombre=‘Leonid’ AND ci=cilec)
Subqueries con ANY
•Estructura de condición
<lista de atributos><comparador>ANY
(SELECT...FROM...WHERE...)
•Semántica
–Estructura compatible
–Existe una tupla del subquery que
satisfaga el comparador con la tupla
•Ejemplo: ¿libros que no son del más alto precio?
SELECT nombre FROM LIBRO,Ofrece
WHERE codigo=codlib AND
precio<ANY(SELECT precio FROM Ofrece)
Subqueries con ALL
•Estructura de condición
<lista de atributos><comparador>ALL
(SELECT...FROM...WHERE...)
•Semántica
–Estructura compatible
–Todas las tuplas del subquery
satisfacen el comparador con la tupla
•Ejemplo: ¿el (los) título(s) más recientes?
SELECT nombre FROM LIBRO
WHERE fecha>=ALL(SELECT fecha FROM LIBRO)
Subqueries con EXISTS
•Estructura de condición
EXISTS (SELECT...FROM...WHERE...)
•Semántica
–El resultado del subquery no es vacío
•Ejemplo: ¿autores que tienen un solo libro?
SELECT autor FROM LIBRO L
WHERE NOT EXISTS (
SELECT * FROM LIBRO
WHERE autor=L.autor AND
codigo<>L.codigo )
•Nota: query correlativo
Union
•Estructura de query
•Semántica
(SELECT...FROM...WHERE...)
UNION
(SELECT...FROM...WHERE...)
–Unión de conjuntos
•Ejemplo: ¿títulos que gustan a Leonid o venden en CLC?
(SELECT LIBRO.nombre FROM LIBRO,LECTOR,Gusta
WHERE LECTOR.nombre=‘Leonid’ AND cilec=ci AND
codlib=codigo)
UNION
(SELECT LIBRO.nombre FROM
LIBRO,LIBRERIA,Ofrece
WHERE LIBRERIA.nombre=‘CLC’ AND riflib=rif
AND codlib=codigo)
Intersección
•Estructura de query
•Semántica
(SELECT...FROM...WHERE...)
INTERSECT
(SELECT...FROM...WHERE...)
–Intersección de conjuntos
•Ejemplo: ¿títulos que gustan a Leonid y venden en CLC?
(SELECT LIBRO.nombre FROM LIBRO,LECTOR,Gusta
WHERE LECTOR.nombre=‘Leonid’ AND cilec=ci AND
codlib=codigo)
INTERSECT
(SELECT LIBRO.nombre FROM
LIBRO,LIBRERIA,Ofrece
WHERE LIBRERIA.nombre=‘CLC’ AND riflib=rif
AND codlib=codigo)
Diferencia
•Estructura de query
•Semántica
(SELECT...FROM...WHERE...)
EXCEPT
(SELECT...FROM...WHERE...)
–Diferencia de conjuntos
•Ejemplo: ¿títulos que gustan a Leonid y no venden en CLC?
(SELECT LIBRO.nombre FROM LIBRO,LECTOR,Gusta
WHERE LECTOR.nombre=‘Leonid’ AND cilec=ci AND
codlib=codigo)
EXCEPT
(SELECT LIBRO.nombre FROM LIBRO,LIBRERIA,Ofrece
WHERE LIBRERIA.nombre=‘CLC’ AND riflib=rif AND
codlib=codigo)
Descargar