• No se han encontrado resultados

Bases de Datos Geográficos

N/A
N/A
Protected

Academic year: 2021

Share "Bases de Datos Geográficos"

Copied!
26
0
0

Texto completo

(1)

Bases de Datos Geográficos

SQL - Lenguaje de Bases de Datos

Relacionales

Instituto de Agrimensura - Facultad de Ingeniería

Universidad de la República

(2)

Introducción

El nombre SQL (Structured Query Language) significa “Lenguaje de Consulta

Estructurado”.

Es una especificación estándar de un lenguaje declarativo de acceso a bases de

datos relacionales. El usuario sólo especifica lo que debe ser el resultado,

dejando para el DBMS la optimización y las decisiones de cómo ejecutar la

consulta.

Lo implementan y respetan en mayor medida los DBMS relacionales.

– En la práctica hay muchas diferencias entre los distintos paquetes DBMS

relacionales comerciales.

– Sin embargo, si el usuario sólo utiliza las funciones que forman parte del estándar, y

si ambos sistemas relacionales soportan fielmente el estándar, la conversión entre

los dos sistemas es mucho más sencilla.

En este texto se trabaja con PostgreSQL que respeta “fuertemente” el estándar

(3)

Introducción

Es un lenguaje de Bases de Datos global, por tanto brinda las operaciones

para:

– Crear "esquemas" y tablas.

– Especificar las restricciones de integridad clave y referencial.

– Modificar esquemas, tablas y restricciones.

– Inserción, eliminación y actualización de datos.

– Especificar las consultas de recuperación de datos.

– Especificar aserciones (CREATE ASSERT), que son las restricciones más generales

de la base de datos.

– Definir "triggers".

– Definir "vistas".

– Especificar controles de transacciones.

(4)

Crear Tablas

CREATE TABLE

– Se utiliza para especificar una nueva relación (tabla), asignándole a esta última un nombre y sus atributos y restricciones iniciales.

– Primero se especifican los atributos.

• Nombre

• Un tipo de datos para especificar su dominio de valores. Los tipos estandar de SQL que soporta PostgreSQL son: int, smallint, real, double precision, char(N), varchar(N), date, time, timestamp, interval. Pero tiene además otros tipos de datos como el geométrico u otros definidos por el usuario.

• Restricciones de atributo, como NOT NULL

– Después de haber declarado los atributos, pueden especificarse con la sentencia CREATE TABLE las restricciones:

• Clave

• Integridad de entidad

• Integridad referencial (Foreign Key)

– Se puede modificar la especificación de la relación con el comando ALTER TABLE. Por ejemplo para definir restricciones después de creada la tabla.

CREATE TABLE VENTA (

Id_Prod int NOT NULL,

Id_Emp int NOT NULL,

CONSTRAINT PK_VENTA PRIMARY

KEY(Id_Prod, Id_Emp),

CONSTRAINT FK_VEN_PROD

FOREIGN KEY (Id_Prod) REFERENCES

PRODUCTO(Id_Prod),

CONSTRAINT FK_VEN_EMP FOREIGN

KEY (Id_Emp) REFERENCES

EMPLEADO(Id_Emp)

);

(5)
(6)

Modificar Datos

INSERT

– En su formato más sencillo se utiliza para añadir una sola tupla a una relación.

– Permite especificar explícitamente los nombres de los atributos que se corresponden con los valores suministrados en el comando INSERT

.

INSERT INTO EMPLEADO (Id_Emp, Nombre, Direccion) VALUES (65439, 'Rita Ponce', 'Mercedes 232'); INSERT INTO EMPLEADO (Id_Emp, Nombre, Direccion)

VALUES (7694, 'Luis Páez', 'J. E. Rodo 2456');

INSERT INTO PRODUCTO(Id_Prod, Descripcion, Precio) VALUES

(26, 'Arroz', 29.90);

INSERT INTO PRODUCTO(Id_Prod, Descripcion, Precio) VALUES

(13, 'Harina', 45.99);

INSERT INTO PRODUCTO(Id_Prod, Descripcion, Precio) VALUES

(855, 'Aceite', 60.00);

INSERT INTO VENTA(Id_Prod, Id_Emp) VALUES (26, 65439); INSERT INTO VENTA(Id_Prod, Id_Emp) VALUES (26, 7694); INSERT INTO VENTA(Id_Prod, Id_Emp) VALUES (13, 7694);

(7)

Modificar Datos

DELETE

– Elimina tuplas de una relación.

– Incluye una cláusula WHERE, parecida

a la que se utiliza en una consulta SQL,

para seleccionar las tuplas que se van a

eliminar.

– La ausencia de una cláusula WHERE

significa que se borrarán todas las

tuplas de la relación, o sea que la tabla

permanece en la base de datos, pero

vacía.

DELETE FROM PRODUCTO WHERE

Id_Prod=855;

DELETE FROM VENTA WHERE

Id_Prod=26;

UPDATE

– Modificar los valores de atributo de una

o más tuplas seleccionadas.

– Una cláusula WHERE en el comando

UPDATE selecciona las tuplas de una

relación que se van a modificar.

– Una cláusula SET adicional en el

comando UPDATE especifica los

atributos que se modificarán y sus

nuevos valores.

UPDATE PRODUCTO SET Precio=48.35

WHERE Id_Prod=13;

(8)

Consultar Datos

• Distinción importante entre SQL y el modelo

relacional formal

– Una tabla (relación) SQL no es un conjunto de

tuplas. Porque permite que una tabla (relación) tenga

dos o más tuplas idénticas en todos sus valores de

atributo.

– Una relación SQL está restringida a ser un conjunto.

Porque se ha declarado una restricción de clave o

porque se ha utilizado la opción DISTINCT con la

sentencia SELECT.

(9)

Consultar Datos

• Una consulta SQL puede constar de hasta seis cláusulas que se especifican en el siguiente orden (las que aparecen entre corchetes son opcionales)

SELECT <lista de atributos y funciones> FROM <lista de tablas>

[WHERE <condición>]

[GROUP BY <atributos de agrupamiento>] [HAVING <condición de agrupamiento>] [ORDER BY <lista de atributos>];

– La cláusula SELECT lista los atributos y funciones que se recuperarán. – La cláusula FROM especifica todas las relaciones (tablas) que se

necesitan en la consulta, incluyendo las relaciones concatenadas, pero no las que están en las consultas anidades.

– La cláusula WHERE especifica las condiciones de selección de tuplas para esas relaciones, incluyendo, si es necesario, las condiciones de concatenación.

– GROUP BY especifica los atributos de agrupamiento. – HAVING especifica una condición en los grupos que se están

seleccionando, más que en las tuplas individuales.

– ORDER BY especifica un orden para la visualización del resultado de la consulta.

• Las funciones agregadas integradas COUNT, SUM, MIN, MAX y AVG se pueden

– utilizar en combinación con el agrupamiento (GROUP BY)

– aplicar a todas las tuplas seleccionadas en una consulta (sin una cláusula GROUP BY).

• Una forma de ver conceptualmente el orden en que se ejecuta una consulta a fin de formularla correctamente (el orden que realmente sigue el DBMS para evaluar una consulta depende de la implementación):

– Aplicando primero la cláusula FROM (para identificar todas las tablas implicadas en la consulta o para plasmar las tablas concatenadas).

– Seguida por la cláusula WHERE. – Después GROUP BY y HAVING.

– Y el ORDER BY se aplica al final para ordenar el resultado de la consulta.

• En general, en SQL hay varias formas de especificar la misma consulta.

El usuario puede elegir la técnica con la que se encuentra más cómodo a la hora de definir una consulta. Por ejemplo, muchas consultas pueden especificarse

con condiciones de concatenación en la cláusula WHERE, o utilizando relaciones concatenadas en la cláusula FROM, o con alguna forma de consultas anidadas y el operador de comparación IN.

El usuario se puede sentir confundido, al no saber la técnica que tiene que

utilizar para especificar determinados tipos de consultas.

El DBMS debe procesar la misma consulta de la misma forma,

independientemente de cómo se haya especificado. En la práctica, esto es muy

complejo, ya que cada DBMS tiene métodos distintos para procesar las consultas especificadas de formas diferentes.

El DBMS tiene la responsabilidad de ejecutar la consulta eficazmente. Sin

embargo, en la práctica, ayuda que el usuario sea consciente de cuáles son las estructuras de consulta que más cuesta procesar.

(10)

Consultar Datos

• Las consultas que se muestran a partir de ahora en este documento se basan en la base de datos PEDIDOS.

• En la sección "SQL - Lenguaje de Bases de Datos Relacionales" se colgaron los documentos:

Esquema Relacional de PEDIDOS, que muestra el

esquema relacional que representa a la base de datos PEDIDOS.

Script para crear PEDIDOS, tiene el script en SQL

para crear la base de datos pedidos.

• En la sección "Material del Curso" se colgaron los tutoriales:

Tutorial de PgAdmin III. Muestra los pasos para

crear una base de datos, ejectar consultas y ejecutar scripts, utilizando la aplicación PgAdmin III.

Tutorial de Instalación de PostGIS. Muestra la forma

de utilizar PgAdmin III para: instalar PostgreSQL, instalar PostGIS, crear una base de datos geográficas y realizar análisis espaciales con PostGIS.

(11)

Consultar Datos

Estructura SELECT-FROM-WHERE de las consultas básicas de SQL

• La forma básica de la sentencia SELECT está formada por las cláusulas SELECT, FROM y WHERE y tiene la siguiente forma:

SELECT <lista de atributos> FROM <lista de tablas> WHERE <condición>;

<lista de atributos> es una lista de los atributos cuyos valores serán recuperados por la consulta. <lista de tablas> es una lista de las relaciones necesarias para procesar la consulta.

<condición> es una expresión condicional (booleana) que identifica las tuplas que la consulta recuperará.

• Los operadores básicos para comparar lógicamente los valores de los atributos entre sí y con constantes literales son =, <, <=, >, >= y <>

Consulta 0. Recuperar la fecha de

nacimiento del empleado (o empleados)

cuyo nombre sea JUAN ANDRADE

SELECT FECHA_NAC

FROM EMPLEADOS

WHERE NOMBRE='JUAN' AND

APELLIDO ='ANDRADE';

(12)

Consultar Datos

Nombres de atributo ambiguos, alias y variables de tupla

• En SQL el mismo nombre se puede utilizar para dos (o más) atributos, siempre y cuando los atributos se encuentren en relaciones diferentes.

• Colocar como prefijo el nombre de la relación al nombre del atributo, y separando los dos nombres con un punto.

Consulta 1. Recuperar la descripción de los productos y el id de los productos, que tienen categoría

'COSMETICOS'.

SELECT PRODUCTOS.DESCRIPCION, PRODUCTOS.PRODUCTOID

FROM CATEGORIAS, PRODUCTOS

WHERE

CATEGORIAS.CATEGORIAID=PRODUCTOS.CATEGORIAID

AND CATEGORIAS.NOMBRECAT='COSMETICOS';

Consulta 2. Por cada producto que tiene como

proveedor a 'REVLON', mostrar la descripción, el id, y el nombre de la categoría.

SELECT PRODUCTOS.DESCRIPCION,

PRODUCTOS.PRODUCTOID, CATEGORIAS.NOMBRECAT

FROM CATEGORIAS, PRODUCTOS, PROVEEDORES

WHERE

CATEGORIAS.CATEGORIAID=PRODUCTOS.CATEGORIAID

AND

PRODUCTOS.PROVEEDORID=PROVEEDORES.PROVEEDORID

(13)

Consultar Datos

Nombres de atributo ambiguos, alias y variables de tupla

• Colocar un alias que puede seguir a la palabra clave

AS, o puede seguir directamente al nombre de la

relación.

Consulta 2B. Por cada producto que tiene como proveedor a 'REVLON', mostrar la descripción, el id, y el nombre de la categoría.

SELECT PROD.DESCRIPCION,

PROD.PRODUCTOID, CAT.NOMBRECAT

FROM CATEGORIAS AS CAT,

PRODUCTOS AS PROD, PROVEEDORES AS PROV

WHERE CAT.CATEGORIAID=PROD.CATEGORIAID

AND PROD.PROVEEDORID=PROV.PROVEEDORID

AND PROV.NOMBREPROV='REVLON';

• La ambigüedad también aparece en el caso de las consultas que se refieren dos veces a la misma relación, como en el siguiente ejemplo.

Consulta 3. Por cada empleado, recuperar el nombre y el primer apellido del empleado, y el nombre y el primer apellido de su "supervisor inmediato" (a quien reporta).

SELECT E.NOMBRE, E.APELLIDO, S.NOMBRE, S.APELLIDO FROM EMPLEADOS E, EMPLEADOS S WHERE E.REPORTA_A=S.EMPLEADOID;

(14)

Consultar Datos

Cláusula WHERE no especificada y uso del asterisco (*)

• La ausencia de cláusula WHERE indica que no hay una condición de selección de tuplas, por tanto todas las tuplas de la relación especificada en la cláusula FROM se seleccionan para la consulta resultante.

Consulta 4. Seleccionar el ID de todos los productos.

SELECT P.IDPRODUCTOS FROM PRODUCTOS AS P;

• Para recuperar todos los valores de atributo de las tuplas seleccionadas podemos escribir un asterisco (*), que tiene el significado de todos los atributos.

Consulta 4B. Recuperar todos los valores de atributo de todos los productos.

SELECT *

FROM PRODUCTOS;

• Si en la cláusula FROM se especifica más de una relación y no hay una cláusula WHERE, entonces se selecciona el PRODUCTO CRUZADO (todas las posibles combinaciones de tuplas) de esas relaciones.

Consulta 5. Seleccionar todas las combinaciones de id de los productos e id de categorias en la base de datos.

SELECT P.PRODUCTOID, C.CATEGORIAID

FROM PRODUCTOS P, CATEGORIAS D;

(15)

Consultar Datos

Tablas como conjuntos en SQL

• SQL trata una tabla no como un conjunto, las tuplas duplicadas pueden aparecer más de una vez en una tabla.

– Pero una tabla SQL con una clave está

restringida a ser un conjunto, ya que el valor de la clave debe ser distinto en cada tupla.

• SQL no elimina automáticamente las tuplas duplicadas en los resultados de las consultas.

– Si queremos eliminar las tuplas duplicadas del resultado de una consulta SQL, utilizamos la palabra clave DISTINCT en la cláusula SELECT.

Consulta 6. Recuperar el precio de todos los productos.

SELECT P.PRECIOUNIT

FROM PRODUCTOS P;

Consulta7. Recuperar los distintos valores de precio de los productos.

SELECT DISTINCT P.PRECIOUNIT

(16)

Consultar Datos

Tablas como conjuntos en SQL

• SQL ha incorporado operaciones de conjuntos: unión de conjuntos (UNION), diferencia de conjuntos

(EXCEPT) e intersección de conjuntos (INTERSECT).

– Las tuplas duplicadas son eliminadas del

resultado de la relación resultado de la operación. – Como estas operaciones con conjuntos sólo se

aplican a las relaciones compatibles, debemos asegurarnos de que las dos relaciones sobre las que apliquemos la operación tengan los mismos atributos y que éstos aparezcan en el mismo orden en las dos relaciones.

– SQL también dispone de las operaciones de conjunto seguidas por la palabra ALL (UNION ALL, EXCEPT ALL, INTERSECT ALL). Sus resultados son relaciones en los que los

duplicados no se eliminan (multiconjuntos).

Consulta 8. Recuperar el id y la descripción de todos los productos vendidos (estan en una orden) por los empleados VERONICA ARIAS y PABLO CELY.

(SELECT DISTINCT P.DESCRIPCION, P.PRODUCTOID

FROM PRODUCTOS P,

ORDENES O, DETALLE_ORDENES D, EMPLEADOS E

WHERE P.PRODUCTOID=D.PRODUCTOID AND O.ORDENID=D.ORDENID AND O.EMPLEADOID=E.EMPLEADOID AND E.NOMBRE='VERONICA' AND E.APELLIDO='ARIAS') UNION

(SELECT DISTINCT P.DESCRIPCION, P.PRODUCTOID FROM PRODUCTOS P, ORDENES O, DETALLE_ORDENES

D, EMPLEADOS E WHERE P.PRODUCTOID=D.PRODUCTOID AND O.ORDENID=D.ORDENID AND O.EMPLEADOID=E.EMPLEADOID AND E.NOMBRE='PABLO' AND E.APELLIDO='CELY');

(17)

Consultar Datos

Comparación de subcadenas y operadores aritméticos

• Comparación de partes de una cadena de caracteres mediante el operador de comparación LIKE.

– Las cadenas parciales se especifican mediante dos caracteres reservados: % sustituye una cantidad arbitraria de caracteres (de cero o más caracteres), y el guión de subrayado (_)

reemplaza un solo carácter.

– En las cadenas es posible utilizar el operador de concatenación (||) para añadir dos valores de cadena.

Consulta 9. Recuperar id y el NOMBRECIA todos los clientes que tienen en el atributo NOMBRECIA la cadena SUPERMERCADO.

SELECT C.CLIENTEID, C.NOMBRECIA FROM CLIENTES C

WHERE C.NOMBRECIA LIKE '%SUPERMERCADO%';

• Los operadores aritméticos estándar para la suma (+), la diferencia (-), la multiplicación (*) y la división (/) se pueden aplicar a valores o atributos numéricos con dominios numéricos.

Consulta 10. Mostrar el id, la descripcion y el precio de los productos aumentados un 15%. Este ejemplo también muestra cómo podemos renombrar un

atributo en el resultado de la consulta utilizando AS en la cláusula SELECT.

SELECT P.PRODUCTOID, P.DESCRIPCION,

P.PRECIOUNIT * 1.15 AS PRECIOAUMENTADO

FROM PRODUCTOS P;

• En el caso de fechas, horas, marcas de tiempo e intervalos, los operadores suponen incrementar (+) o decrementar (-) una fecha, una hora o una marca de tiempo según un intervalo. Además, un valor de intervalo es el resultado de la diferencia entre dos valores de fecha, hora o marca de tiempo.

(18)

Consultar Datos

Comparación de subcadenas y operadores aritméticos

• Otro operador de comparación que se puede utilizar es BETWEEN.

Consulta 11. Recuperar todos las productos que tienen precio entre 3.5 y 10.

SELECT *

FROM PRODUCTOS P

WHERE P.PRECIOUNIT BETWEEN 3.5 AND 10;

La condición (P.PRECIOUNIT BETWEEN 3.5 AND 10) es equivalente a la condición (P.PRECIOUNIT >= 3.5 AND P.PRECIOUNIT<=10)

• Los operadores aritméticos estándar para la suma (+), la diferencia (-), la multiplicación (*) y la división (/) se pueden aplicar a valores o atributos numéricos con dominios numéricos.

Consulta 10. Mostrar el id, la descripcion y el precio de los productos aumentados un 15%. Este ejemplo también muestra cómo podemos

renombrar un atributo en el resultado de la consulta utilizando AS en la cláusula SELECT. SELECT P.PRODUCTOID,

P.DESCRIPCION,

P.PRECIOUNIT * 1.15 AS PRECIOAUMENTADO

(19)

Consultar Datos

Ordenación del resultado de una consulta

• SQL permite ordenar las tuplas del resultado de una consulta por los valores de uno o más atributos, utilizando la cláusula ORDER BY.

– El orden predeterminado es el ascendente. – Con la palabra clave DESC podemos ver el

resultado ordenado descendentemente. – La palabra clave ASC permite especificar

explícitamente el orden ascendente.

Consulta 12. Por cada empleado, recuperar el nombre y el primer apellido del empleado, y el nombre y el primer apellido de su "supervisor inmediato" (a quien reporta); ordenados por apellido y nombre de supervisor en forma

descendente, y por apellido y nombre de empleado en forma ascendete. SELECT E.NOMBRE, E.APELLIDO, S.NOMBRE, S.APELLIDO FROM EMPLEADOS E, EMPLEADOS S WHERE E.REPORTA_A=S.EMPLEADOID

ORDER BY S.APELLIDO DESC, S.NOMBRE DESC,

E.APELLIDO ASC, E.NOMBRE ASC;

(20)

Consultar Datos

Conjuntos explícitos y renombrado de atributos en SQL

• Es posible utilizar un conjunto explícito de valores en la cláusula WHERE, el conjunto debe ir entre paréntesis. Consulta 13 Recuperar los empleados que tienen como supervisores a los empleados con ID 1 (JUAN CRUZ) o 3 (VERONICA ARIAS).

SELECT *

FROM EMPLEADOS E

WHERE E.REPORTA_A IN (1,3);

• En SQL, es posible renombrar cualquier atributo que aparezca en el resultado de una consulta añadiendo el calificador AS seguido por el nombre nuevo deseado.

– Consulta 12A muestra unos ligeros cambios respecto a Consulta 12, renombra los nombres de atributo resultantes como NombreDeEmpleado ApellidoDeEmpleado y NombreDeSupervidor ApellidoDeSupervisor. Los nombres nuevos aparecerán como cabeceras de columna en el resultado de la consulta.

Consulta 12A. Por cada empleado, recuperar el nombre y el primer apellido del empleado, y el nombre y el primer apellido de su "supervisor inmediato" (a quien reporta); ordenados por apellido y nombre de supervisor en forma

descendente, y por apellido y nombre de empleado en forma ascendete.

SELECT E.NOMBRE AS NombreDeEmpleado, E.APELLIDO AS ApellidoDeEmpleado, S.NOMBRE AS NombreDeSupervisor, S.APELLIDO AS ApellidoDeSupervisor FROM EMPLEADOS E, EMPLEADOS S WHERE E.REPORTA_A=S.EMPLEADOID

ORDER BY ApellidoDeSupervisor DESC, NombreDeSupervisor DESC,

ApellidoDeEmpleado ASC, NombreDeEmpleado ASC;

(21)

Consultar Datos

Comparaciones con valores NULL y lógica de tres valores

SQL utiliza NULL para representar la ausencia de un valor.

• Cuando en una comparación se ve implicado un

NULL, se considera que el resultado es UNKNOWN, o desconocido. Por tanto SQL utiliza una lógica de tres valores con los valores TRUE, FALSE y UNKNOWN, en lugar de la lógica estándar de dos valores con TRUE o FALSE.

• SQL permite consultas que comprueban si el valor de un atributo es NULL. En lugar de utilizar = o <> para comparar el valor de un atributo con NULL, SQL utiliza IS o IS NOT.

Consulta 14. Recuperar el nombre y el apellido de todos los empleados que no tienen supervisor. SELECT E.NOMBRE, E.APELLIDO

FROM EMPLEADOS E

(22)

Consultar Datos

Funciones agregadas en SQL

• SQL dispone de funciones que incorporan estos conceptos:

COUNT, SUM, MAX, MIN y AVG.

COUNT devuelve el número de tuplas o valores

especificados en una consulta.

Las funciones SUM, MAX, MIN y AVG se aplican a un conjunto o multiconjunto de valores numéricos y devuelven, respectivamente, la suma, el valor máximo, el valor mínimo y el promedio de esos valores.

– Estas funciones se pueden utilizar en la cláusula

SELECT o en una cláusula HAVING.

Las funciones MAX y MIN también se pueden utilizar con atributos que tienen dominios no numéricos si los valores del dominio tienen una ordenación total entre sí. • Estas funciones también se utilizan en las condiciones de

selección que implican consultas anidadas. Podemos especificar una consulta anidada correlacionada con una función agregada, y después utilizar la consulta anidada en la cláusula WHERE de una consulta externa.

Consulta 15. Recuperar la suma de los precios de todos los productos, el precio más alto, el precio más bajo y el precio medio.

SELECT SUM (P.PRECIOUNIT), MAX (P.PRECIOUNIT), MIN (P.PRECIOUNIT), AVG (P.PRECIOUNIT)

FROM PRODUCTOS P;

Consulta 16. Recuperar el número total de empleados.

SELECT COUNT(*)

FROM PRODUCTOS P;

Consulta 17. Recuperar el número de precios de producto distintos almacenados en la base de datos.

SELECT COUNT(DISTINCT P.PRECIOUNIT)

(23)

Consultar Datos

Agrupamiento: las cláusulas GROUP BY y HAVING

• SQL permite aplicar las funciones agregadas a grupos de tuplas de una relación

– Cada grupo estará compuesto por las tuplas que tienen el mismo valor para algún(os)

atributo(s), denominado(s) atributo(s) de agrupamiento.

SQL tiene una cláusula GROUP BY que especifica los atributos de agrupamiento, que también deben aparecer en la cláusula

SELECT, por lo que el valor resultante de

aplicar la función de agregación a un grupo de tuplas aparece junto con el valor de los

atributos de agrupamiento.

Consulta 18. Por cada categoría de producto, recuperar el precio promedio por categoría. SELECT C.CATEGORIAID,

C.NOMBRECAT,

AVG(P.PRECIOUNIT)

FROM CATEGORIAS C, PRODUCTOS P WHERE C.CATEGORIAID=P.CATEGORIAID GROUP BY C.CATEGORIAID, C.NOMBRECAT;

(24)

Consultar Datos

Agrupamiento: las cláusulas GROUP BY y HAVING

• El agrupamiento y las funciones se aplican después de la concatenación.

• A veces es necesario recuperar los valores de esas funciones sólo para aquellos grupos que satisfacen ciertas condiciones.

SQL proporciona una cláusula HAVING, que puede aparecer en combinación con una cláusula GROUP BY, con este propósito. • Mientras que las condiciones de selección de la

cláusula WHERE limitan las tuplas a las que se aplican las funciones, la cláusula HAVING sirve para elegir grupos enteros.

Consulta 19. Por cada categoría de producto con un precio promedio mayor a 2.25, recuperar el precio promedio por categoría.

SELECT C.CATEGORIAID, C.NOMBRECAT, AVG(P.PRECIOUNIT)

FROM CATEGORIAS C, PRODUCTOS P WHERE C.CATEGORIAID=P.CATEGORIAID GROUP BY C.CATEGORIAID, C.NOMBRECAT HAVING AVG(P.PRECIOUNIT)>2.25;

(25)

Consultar Datos

Tablas concatenadas en SQL y concatenaciones exteriores

• El concepto de tabla concatenada (o relación concatenada) se incorporó a SQL para poder

especificar una tabla como resultado de una operación de concatenación en la cláusula FROM de una

consulta.

• Esta estructura es más fácil que mezclar todas las condiciones de selección y concatenación en la cláusula WHERE.

La cláusula FROM de Consulta 1A contiene una sola tabla concatenada. Los atributos de dicha tabla son todos los atributos de la primera tabla,

CATEGORIAS, seguidos por todos los atributos de la segunda tabla, PRODUCTOS.

• Las opciones disponibles para especificar las tablas concatenadas en SQL son INNER JOIN (igual que

JOIN), LEFT OUTER JOIN, RIGHT OUTER JOIN y FULL OUTER JOIN.

Consulta 1. Recuperar la descripción de los productos y el id de los productos, que tienen categoría 'COSMETICOS'.

SELECT P.DESCRIPCION, P.PRODUCTOID FROM CATEGORIAS C, PRODUCTOS P WHERE C.CATEGORIAID=P.CATEGORIAID AND C.NOMBRECAT='COSMETICOS';

Consulta 1A. La consulta 1 utilizando relación concatenada.

SELECT P.DESCRIPCION, P.PRODUCTOID FROM (CATEGORIAS AS C JOIN PRODUCTOS AS P ON C.CATEGORIAID=P.CATEGORIAID) WHERE C.NOMBRECAT='COSMETICOS';

(26)

Consultar Datos

Consultas anidadas, tuplas y comparaciones conjunto/multiconjunto

Las consultas se pueden formular mediante consultas anidadas, que son bloques select-from-where completos dentro de la cláusula WHERE de otra consulta. Esa otra consulta es la que se conoce como consulta externa.

Se introduce el operador de comparación IN, que compara un valor v con un conjunto (o multiconjunto) de valores V y se evalúa como TRUE si v es uno de los elementos de V.

Consultas anidadas correlacionadas

Siempre que una condición de la cláusula WHERE de una consulta anidada se refiera a algún atributo de una relación declarada en la consulta exterior, se dice que las dos consultas son correlacionadas.

La consulta anidada se evalúa una vez por cada tupla (o combinación de tuplas) en la consulta exterior.

Las funciones EXISTS y UNIQUE en SQL

La función EXISTS de SQL se utiliza para comprobar si el resultado de una consulta anidada correlacionada está vacío (no contiene tuplas) o no.

• El resultado de EXISTS es un valor booleano, TRUE o FALSE.

EXISTS Y NOT EXISTS normalmente se utilizan en combinación con una consulta anidada correlacionada.Función UNIQUE(Q)

• Devuelve TRUE si no hay tuplas duplicadas en el resultado de la consulta Q; en caso contrario, devuelve FALSE. • Se puede utilizar para probar si el resultado de una consulta anidada es un conjunto o un multiconjunto.

Referencias

Documento similar

CECEBRE Mero 20,61 8,34 40,44 59,56 ABTO. UXIA BARRIÉ DE LA MAZA VILAGUDÍN VILASENÍN

Cuando en periodos sucesivos de noventa días y con el objeto de eludir las previsiones contenidas en este artículo, la empresa realice extinciones de contratos al amparo

(...) la situación constitucional surgida tras la declaración del estado de emergencia es motivo de preocupación para la Comisión de Venecia. La declaración en sí misma no definió

13 El candidato que encabezaba la terna remitida por el gobernador de Orihuela –en marzo de 1593– para la provisión del primer titular de la Abogacía fiscal alicantina,

Sabemos que, normalmente, las ​cookies deben ser almacenadas y enviadas de vuelta al servidor sin modificar; sin embargo existe la posibilidad de que un atacante

Luis Miguel Utrera Navarrete ha presentado la relación de Bienes y Actividades siguientes para la legislatura de 2015-2019, según constan inscritos en el

Éstos son fuertes predictores de la presencia de alteraciones de la salud en los niños que han vivido la ruptura de los progenitores (Overbeek et al., 2006). En este

Sobre la base de que son numerosas y consistentes inter-contextos jurídicos las críticas a la eficacia de los Tribunales de Jurados, nos hemos planteado un estudio comparativo de