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)