25/02/2016 1 MÓDULO 2: SESIÓN 2 SISTEMAS DE BASES DE DATOS RELACIONALES Departamento de Informática Informática Aplicada a la Gestión Pública. GAP INDICE 2 Introducción a las bases de datos relacionales Conceptos C básicos bá i Planificación y diseño de BDR Modelos de datos Conceptos del Modelo E-R Explotación de BDR SQL (DDL, DML y DCL). Saber hacerlo en forma gráfica Ejemplos 1 25/02/2016 Sistemas de Bases de Datos Relacionales 3 Introducción a los sistemas de bases de datos relaciones Planificación y diseño de un sistema de base de datos relacional Explotación de un sistema de base de datos relacional Introducción a las BBDDRR 4 Las bases de datos relacionales se basan en el modelo de datos relacional desarrollado por Codd a principio de los años 70 Características Basado en un reducido conjunto de conceptos Permite la manipulación de los datos mediante operaciones algebraicas 2 25/02/2016 Conceptos básicos 5 Toda la información se almacena en tablas, también denominadas relaciones Una tabla es la forma en que un usuario ve sus datos Se divide horizontalmente en filas y verticalmente en columnas A cada una de las filas de una tabla se le denomina tupla, y representa un registro A cada columna se le denomina atributo y contiene información referente a un único campo La cardinalidad de una tabla es el número de filas que contiene El grado de una tabla es el número de columnas que posee Cada fila de una tabla debe ser identificada de forma única por un atributo o conjunto de atributos denominado clave de la tabla Al conjunto de posibles valores que puede tomar una columna se denomina dominio, pudiendo ser : Dominio continuo o Dominio discreto Para representar una tabla utilizaremos el siguiente esquema NOMBRE_TABLA (A1, A2, .....Am, Am+1,.....An) Ejemplo 6 Supongamos que queremos almacenar datos de los clientes de una empresa CLIENTE (DNI, (DNI NOMBRE, NOMBRE APELLIDOS APELLIDOS, DIREC, DIREC LOC, LOC PROV, PROV E_CIVIL) E CIVIL) DNI NOMBRE APELLIDOS DIREC LOC PROV E_CIVIL 25005696 Alberto Díaz Olid Álamos, 7 Jaén Jaén Casado 27102234 María Gómez Abad Nogal, 5 Jaén Jaén Soltera 24566477 Salvador Ros Bueno Martos Jaén Divorciado Grado: Cardinalidad: Clave: Dominio Discreto: Dominio Continuo: Colón, 3 7 3 DNI PROV, LOC, E_CIVIL DNI, NOMBRE, APELLIDOS, DIREC 3 25/02/2016 Restricciones de las tablas 7 Todos los registros de una tabla son del mismo tipo. Para almacenar registros g distintos se usan tablas distintas Cada campo se almacena en una columna de la tabla. Cada columna se identifica mediante un nombre de columna No se permite la existencia de dos columnas (campos) con el mismo nombre En ninguna tabla existen registros duplicados El orden de los registros en la tabla es indiferente. En cada momento se pueden recuperar los registros en un orden particular Álgebra relacional 8 El álgebra relacional es un sistema cerrado de operaciones definidas sobre relaciones (tanto los operandos como los resultados son relaciones) Permite construir fórmulas o expresiones combinando unas operaciones con otras, de manera que los resultados de unas sean operando de otras El álgebra g relacional se compone p de un conjunto j de operaciones definidas sobre tablas que usan operadores relacionales, obteniendo a su vez otras tablas 4 25/02/2016 Planificación y Diseño de una BDDR 9 A la hora de determinar una base de datos debemos establecer un proceso partiendo del acotamiento de una parcela del mundo exterior, aquél que nos interesa representar en los datos. En este proceso se debe aprender, comprender y conceptualizar dicho mundo exterior transformándolo en un conjunto de ideas y definiciones que supongan una imagen fiel del comportamiento del mundo real. A esta imagen del mundo exterior la llamaremos Modelo Conceptual Un vez definido el modelo conceptual, éste se ha de transformar en una descripción de datos, atributos y relaciones que denominaremos Esquema Conceptual de Datos Por último, este esquema conceptual habrá que traducirlo a estructuras almacenables en soportes físicos Modelo de datos 10 5 25/02/2016 Modelo de datos 11 Grupo de herramientas conceptuales para describir los datos, sus relaciones, su semántica y sus limitaciones de tal forma, que facilita la interpretación de nuestro mundo real y su representación en forma de datos, en nuestro mundo informático Un modelo de datos contiene dos tipos de propiedades que se obtienen a partir de las propiedades del mundo real Propiedades Estáticas. Son invariables en el tiempo. Quedan especificadas en el modelo de datos por las estructuras. La parte estática se define mediante el esquema de la base de datos,, con el lenguaje g j de definición de datos ((DDL).) Propiedades Dinámicas. Son las propiedades que varían con el tiempo. En el modelo de datos son las operaciones. La parte dinámica se define a través de un conjunto de operaciones con el lenguaje de manipulación de datos (DML). Las operaciones sobre un modelo de datos pueden ser de: Selección. Localización de los datos deseados Acción. Realización de una acción sobre los datos seleccionados. Dicha acción puede ser: Recuperación (obtención de los datos seleccionados) y Actualización (modificación, inserción y borrado) Modelo Entidad – Relación (ER) 12 Es el más extendido de los modelos de datos para describir esquemas conceptuales E t bl Establece relaciones l i simultáneas i ltá entre t varias i entidades tid d por medio di de d herramientas gráficas permitiendo la representación de esquemas de fácil lectura incluso para aquellos sistemas con relaciones complejas El Modelo Entidad-Relación es una técnica especial de representación gráfica que incorpora información relativa a los datos y la relación existente entre ellos, para darnos una visión del mundo real Las características del modelo E-R son Reflejan tan sólo la existencia de los datos, no lo que se hace con ellos Se incluyen todos los datos del sistema en estudio y, y por tanto no es orientado a aplicaciones particulares Es independiente de las bases de datos y sistemas operativos concretos No se tienen en cuenta restricciones de espacio, almacenamiento ni tiempo de ejecución Está abierto a la evolución del sistema 6 25/02/2016 Conceptos básicos 13 Entidad objeto real o abstracto con características diferenciadoras capaces de hacerse distinguir de otros objetos y del cual se almacena información Una entidad toma como significado conceptos u objetos que juegan un papel importante en el sistema u organización Gráficamente las entidades se representan con su nombre encerrado en un rectángulo Atributos una unidad básica e indivisible de información acerca de una entidad que sirve para identificarla o describirla Gráficamente los atributos se representan con su nombre encerrado en una elipse o un rectángulo de bordes redondeados Los atributos se unen a sus entidades mediante líneas Ejemplos 14 PELICULA COD MATRICULA TITULO MARCA DURACION MODELO PRECIO COLOR TIPO AUTOMOVIL CV NSS PAIS KM DNI AÑO SEGURO NOMBRE DNI PROFESOR DPTO F_COMPRA AREA CATEGORIA DESPACHO 7 25/02/2016 Claves de una entidad 15 Se denomina Superclave de una entidad a un conjunto de uno o más atributos que permite identificar de forma única a cada ocurrencia de la entidad. Es decir, dados los valores de los atributos que forman la superclave, es posible conocer el resto de valores de los atributos de la entidad Si de una superclave no se puede obtener ningún subconjunto que sea a su vez superclave, se dice que dicha superclave es una Clave Candidata. Es decir, una clave candidata será una superclave con un número mínimo de atributos De todas las claves candidatas existentes en una entidad, el diseñador ha de escoger una, que se denominará Clave Principal o Primaria. Normalmente, se elegirá como clave primaria aquella que sea la más restrictiva entre las candidatas. Gráficamente se representa subrayando s bra ando los atributos atrib tos que q e forman parte de la clave cla e primaria Al resto de las claves candidatas de una entidad que no han sido elegidas como primarias se les llamará Claves Alternativas Si un atributo o conjunto de atributos de una entidad es clave primaria de otra entidad, a dicho conjunto de atributos se le denomina Clave Foránea o Clave Ajena de la entidad Ejemplos 16 Superclaves {NSS} {DNI} {NOMBRE, DESPACHO} {NOMBRE, DPTO} {DNI, DPTO} {NSS, DNI, AREA} {NSS, DNI, CATEGORIA} {NSS, DNI, DESPACHO} {NSS DNI {NSS, DNI, NOMBRE NOMBRE, DPTO} {NSS, DNI, NOMBRE, AREA} {NSS, DNI, NOMBRE, CATEGORIA} {NSS, DNI, NOMBRE, DESPACHO} {DNI, NOMBRE, DPTO, AREA} {NSS, DNI, NOMBRE, DPTO, DESPACHO} {NOMBRE, DESPACHO, AREA} C. Candidatas {NSS} {DNI} {NOMBRE, DESPACHO} C. Principal {NSS} C. Alternativas {DNI} {NOMBRE, DESPACHO} 8 25/02/2016 Relaciones 17 Las entidades por sí solas no describen la realidad de unn sistema de información No basta con identificar objetos, hay además que establecer las asociaciones existentes entre los mismos a través de Relaciones Relación significa la existencia de algo común entre entidades Las relaciones se representan mediante rombos y el nombre de la relación en su interior Grado de una relación 18 El Grado de una Relación representa la participación en la relación de cada una de las entidades afectadas y existen 3 tipos posibles: 1:1 (una a una). A cada ocurrencia de una entidad le corresponde no más de una ocurrencia de la otra y a la inversa 1:n (una a muchas). A cada ocurrencia de la primera entidad le pueden corresponder varias ocurrencias de la segunda y a cada ocurrencia de la segunda le corresponde no más de una ocurrencia de la primera n:m (muchas a muchas). A cada ocurrencia de la primera entidad le pueden corresponder varias ocurrencias de la segunda y viceversa El grado de las relaciones se puede representar de dos formas diferentes (a veces se utilizan ambos métodos en el mismo diagrama) Indicando el grado en los segmentos que asocian las entidades de la relación Incluyendo en los segmentos que asocian las entidades una flecha para indicar el grado 1, y dos flechas para mostrar el grado n o m 9 25/02/2016 Ejemplos 19 1 1 LOCALIDAD TIENE ALCALDE 1 M PADRE P-H HIJO 1 M SECCION TRABAJA N EMPLEADO M AUTOR ESCRIBE LIBRO Ejemplos 20 N M PROFESOR IMPARTE N ASIGNATURA N P-D D-P 1 1 1 DPTO 1 D-D DIRECTOR 10 25/02/2016 Ejemplos NSS N_COLEG DNI DNI NOMBRE 21 NOMBRE ACTOR N_ARTISTICO ABOGADO ESPECIALID NSS N_COLEG N F_NAC N AÑO_T PAIS COD REPRES AÑO_E COD PAPEL FECHA ACT-PEL CONSULTA CACHE COD HORA F_CONTRAT COD OSCAR TITULO DNI TIPO M NOMBRE M CLIENTE DIRECCION PELICULA DURACION PRECIO LOCALIDAD TIPO PROVINCIA PAIS TLF AÑO Explotación de un SBDR 22 En un SGBD las operaciones sobre los datos se realizan a través de consultas formuladas con un lenguaje específico declarativo SQL (Structured Query Language – Lenguaje de Consulta Estructurado) se considera el lenguaje estándar de base de datos relacional SQL es algo más que un lenguaje de consulta como su propio nombre indica, puesto que no sólo ofrece funciones de recuperación, sino también una diversidad de operaciones de actualización y manipulación de información y estructura de los datos La versión original de SQL fue desarrollada por IBM (San José Research Laboratory) a mediados de los años setenta. A partir de entonces, se han derivado numerosas versiones hasta que en 1986, el American National Standards Institute (ANSI) publicó un SQL estándar 11 25/02/2016 Lenguajes específicos en SQL 23 El Lenguaje de Definición de Datos (DDL - Data Definition Language) Permite describir el esquema q de la base de datos mediante un conjunto j de instrucciones El DDL proporciona órdenes para definir, eliminar y modificar tablas, así como para crear índices y vistas El Lenguaje de Manipulación de Datos (DML - Data Management Language) Permite el acceso a los datos almacenados en una base de datos El DML está basado en el álgebra relacional e incluye órdenes para insertar, insertar suprimir, suprimir y modificar tuplas (filas) de la base de datos El Lenguaje de Control de Datos (DCL - Data Control Language) Permite establecer derechos de acceso a los usuarios, comprobaciones de integridad y control de transacciones Incluye órdenes para dar y quitar privilegios, así como para completar y abortar transacciones Características 24 Sencillez. Principalmente derivada de la sencillez conceptual del modelo en el que se basa, el modelo relacional Carácter estándar. Existe una especificación estándar de este lenguaje, la ANSI SQL. No obstante, cada fabricante refleja las peculiaridades propias de su SGBD modificando su SQL Lenguaje declarativo. SQL es un lenguaje declarativo. Cuando realizamos una consulta, describimos cuál es el conjunto de datos que queremos obtener, obtener sin tener que especificar cuál es la estrategia de recuperación de esos datos. Especificamos QUÉ queremos, sin decir CÓMO conseguirlo. Los lenguajes en los que es necesario decir cómo obtener los datos, se denominan lenguajes imperativos 12 25/02/2016 Notación 25 El lenguaje SQL consta de una serie de sentencias cada una de las cuales requiere una acción específica por parte del SGBD (por ejemplo la creación de una tabla, la inserción de datos en una tabla...) Todas las órdenes en SQL comienzan con un verbo que indica la operación a realizar (CREATE, ALTER, UPDATE...) seguido de una o más cláusulas que especifican los datos sobre los que actuar o proporcionan más detalles de la operación que hay que llevar a cabo (WHERE, FROM, SET...) Algunas cláusulas son opcionales y otras obligatorias pero todas deben comenzar con una palabra clave. Las palabras clave no pueden ser utilizadas para designar objetos de la base de datos, tales como nombres de tabla o de columna La normativa ANSI especifica las palabras claves que se pueden utilizar en las órdenes SQL. Sin embargo, la mayoría de productos comerciales SQL incluyen, además d á del d l conjunto j t de d palabras l b clave l estándar, tá d extensiones t i significativas i ifi ti que permiten la construcción de sentencias más complejas A la hora de expresar las distintas construcciones de SQL seguiremos la siguiente notación: Las palabras clave aparecerán en este texto en mayúsculas Los corchetes indican algo opcional Las llaves encierran alternativas de las que se debe elegir una Tipos de datos 26 Numéricos SMALLINTEGER e INTEGER (o SMALLINT e INT). INT) Antonio1 DECIMAL(a,b) o NUMERIC(a,b). CHAR(n) Fechas FLOAT(a,b), REAL y DOUBLE_PRECISION. Alfanuméricos a = longitud total b = dígitos a la derecha del punto decimal El nombre de tipo más usual es DATE Lógicos Los nombres de tipos más comunes son BOOLEAN y LOGICAL. 13 Diapositiva 26 Antonio1 A simple vista diferentes definiciones pueden servir para el mismo tipo dipo de dato: NUMERIC y DECIMAL Antonio Sánchez; 04/03/2012 25/02/2016 Constantes y Expresiones 27 Se pueden utilizar constantes numéricas, de cadena, de fecha Expresiones Aritméticas De cadenas Con fechas Boleanas Valores Nulos (NULL) Ejemplos de operaciones 28 Antonio2 INSERT INTO PROFESOR VALUES (348, NULL, ‘Asociado’, ‘602’, {15-9-2010}) INSERT INTO PROFESOR (C (C_PROF, PROF NOMBRE NOMBRE, FF_CONTR) CONTR) VALUES (348, {1-9-2010}, ‘Carlos López Calvo’) E Erróneas INSERT INTO PROFESOR VALUES (348, ‘Carmen Mª Valdivieso Guevara’, NULL, ‘652’,NULL) C_PROF NOMBRE CATEGORI DPTO F_CONTR A 344 Ana Osorio Bueno Asociado 653 20-9-2010 345 Alberto Gutiérrez Paz NULL NULL 23-9-2010 346 María Tapia Mora Ayudante 618 2-2-2011 347 Blas González Rus NULL 618 15-2-2011 348 Carmen Mª Valdivieso Guev NULL 652 NULL 14 Diapositiva 28 Antonio2 Intenta introducir un valor nulo en el campo NOMBRE que tiene la restricción que no admite valores nulos. Antonio Sánchez; 04/03/2012 25/02/2016 Ejemplos de posibles consultas 29 PERSONAL(C_EMP, NOMBRE, PUESTO, SALARIO, DPTO FF_NAC) DPTO, NAC) Aumentar el salario en un 5% UPDATE PERSONAL SET SALARIO=SALARIO*1.05 Ascender A d a Director Di t all empleado l d Juan J Sánchez Sá h Molina UPDATE PERSONAL SET PUESTO=’Director’ WHERE NOMBRE=’Juan Sánchez Molina’ Condiciones (cláusula WHERE) 30 Condiciones de comparación =, <>, <=, >=, >, < WHERE SALARIO >= 1000 WHERE CATEGORIA = 'Ayudante' WHERE F_CONTR < {1-10-2010} Condiciones de correspondencia con patrón ([NOT] LIKE) Comprueba si el valor de un columna de tipo cadena de caracteres se corresponde a un patrón especificado Permite comparar cadenas alfanuméricas haciendo uso de símbolos comodín _ Sustituye a un único carácter % Sustituye a varios caracteres Condiciones de valor nulo (IS [NOT] NULL) Comprueba si una columna tiene valores desconocidos o nulos WHERE CIUDAD LIKE 'Villa%' WHERE DPTO LIKE '61_‘ WHERE CATEGORIA IS NULL Condición de rango (BETWEEN x AND y) Selecciona valores dentro del rango x - y WHERE SALARIO BETWEEN 3000 AND 6000 (es equivalente a WHERE (SALARIO >= 3000) AND (SALARIO<= 6000) 15 25/02/2016 Condiciones de pertenencia a conjunto 31 IN lista_valores: Comprueba si un valor se corresponde con un elemento de un conjunto de valores op ALL lista_valores: Selecciona valores que cumplen la operación op con todos los elementos de la lista de valores. op puede ser <, >, <=, >=, <> WHERE CIUDAD IN (('Almería' Almería , 'Granada' Granada , 'Jaén‘) Jaén ) es equivalente a WHERE (CIUDAD = 'Almería') OR (CIUDAD = 'Granada') OR (CIUDAD = 'Jaén') WHERE CIUDAD <> ALL ('Almería', 'Granada', 'Jaén‘) es equivalente a WHERE NOT ((CIUDAD = 'Almería') OR (CIUDAD = 'Granada') OR (CIUDAD = 'Jaén')) o es equivalente a WHERE (CIUDAD <> 'Almería') AND (CIUDAD <> 'Granada') AND (CIUDAD <> 'Jaén')) op ANY lista_valores: Selecciona valores que cumplen la operación op con algún elemento de la lista de valores WHERE CIUDAD = ANY ( 'Almería', 'Granada', 'Jaén‘) es equivalente a WHERE (CIUDAD = 'Almería') OR (CIUDAD = 'Granada') OR (CIUDAD = 'Jaén')) Condiciones complejas 32 Cada una de esta operaciones de comparación pueden ser combinadas haciendo uso de los operadores booleanos OR AND NOT WHERE (NOMBRE LIKE 'Antonio%') OR (C_EMP BETWEEN 30 AND 60) WHERE (SALARIO > 100000 ) AND (PUESTO IS NULL) WHERE NOT (C_EMP = 10) OR (C_EMP = 12) Se pueden generar condiciones tan complejas como sea necesario pero hay ha que q e tener mucho m cho cuidado c idado con el uso so de paréntesis WHERE NOT ((C_EMP = 10) OR (C_EMP = 12)) AND ((NOMBRE LIKE 'Antonio%') OR (C_EMP BETWEEN 30 AND 60)) WHERE NOT (C_EMP = 10) OR (C_EMP = 12) AND (NOMBRE LIKE 'Antonio%') OR (C_EMP BETWEEN 30 AND 60) OJO: Los resultados de ambas sentencias son distintos 16 25/02/2016 SELECT 33 Es la operación fundamental de SQL La sentencia SELECT es la más potente y compleja de las sentencias de SQL Selecciona un conjunto de registros de una o más tablas que cumplan una condición (en caso de no poner condición, se seleccionan todas las filas de la tabla) Permite también crear un filtro seleccionando solamente algunos campos de la tabla Su sintaxis más usual es la siguiente, aunque esta orden es muy flexible y admite muchas variaciones: SELECT { * | ALL | DISTINCT | lista_columnas/expresiones} FROM lista_tablas [WHERE condición] [ORDER BY lista_columna [GROUP BY lista_columnas] [HAVING condición] orden] SELECT 34 CONSULTA DE TODAS LAS FILAS Y COLUMNAS DE UNA TABLA CONSULTA DE TODAS LAS FILAS Y ALGUNAS COLUMNAS DE UNA TABLA SELECT nombre_columnas FROM nombre_tabla CONSULTA DE DETERMINADAS FILAS DE UNA TABLA SELECT * FROM tabla SELECT * FROM tabla WHERE condición CONSULTA ORDENADA SELECT * FROM tabla ORDER BY nombre_columnas 17 25/02/2016 Ejemplos con Tabla PROFESOR 35 C_PROF NOMBRE CATEGORIA DPTO F_CONTR 344 Ana Osorio Bueno Asociado 653 20-9-2010 345 Alberto Gutiérrez Paz NULL NULL 23-9-2010 346 María Tapia Mora Ayudante 618 2-2-2011 347 Blas González Rus NULL 618 15-2-2011 348 Carmen Mª Valdivieso Guev NULL 652 NULL Ejemplos sentencia SELECT 36 SELECT * FROM PROFESOR SELECT C_PROF, NOMBRE FROM PROFESOR SELECT * FROM PROFESOR WHERE DPTO LIKE '61_‘ SELECT * FROM PROFESOR WHERE CATEGORIA IS NOT NULL SELECT NOMBRE FROM PROFESOR WHERE F_CONTR BETWEEN {1-1-2010} AND {31-12-2010} SELECT * FROM PROFESOR WHERE (C_PROF<347) AND (NOMBRE NOT LIKE ‘A%’) 18 25/02/2016 Resultados con Tabla PROFESOR 37 C_PROF NOMBRE CATEGORIA DPTO F_CONTR 344 Ana Osorio Bueno Asociado 653 20-9-2010 345 Alberto Gutiérrez Paz NULL NULL 23-9-2010 346 María Tapia Mora Ayudante 618 2-2-2011 347 Blas González Rus NULL 618 15-2-2011 348 Carmen Mª Valdivieso Guev NULL 652 NULL SELECT C_PROF, NOMBRE FROM PROFESOR C_PROF NOMBRE 344 Ana Osorio Bueno 345 Alberto Gutiérrez Paz 346 María Tapia Mora 347 Blas González Rus 348 Carmen Mª Valdivieso Guev SELECT * FROM PROFESOR WHERE DPTO LIKE '61_‘ C_PROF NOMBRE F_CONTR 346 CATEGORI DPT A O María Tapia Mora Ayudante 618 347 Blas González Rus 15-2-2011 NULL 618 2-2-2011 Resultados con Tabla PROFESOR 38 C_PROF NOMBRE CATEGORIA DPTO F_CONTR 344 Ana Osorio Bueno Asociado 653 20-9-2010 345 Alberto Gutiérrez Paz NULL NULL 23-9-2010 346 María Tapia Mora Ayudante 618 2-2-2011 347 Blas González Rus NULL 618 15-2-2011 348 Carmen Mª Valdivieso Guev NULL 652 NULL SELECT * FROM PROFESOR WHERE CATEGORIA IS NOT NULL C_PROF NOMBRE 344 Ana Osorio Bueno 346 María Tapia Mora CATEGORI DPTO F_CONTR SELECT NOMBRE FROM PROFESOR A WHERE F_CONTR BETWEEN {1-1-2010} Asociado 653 20-9-2010 AND {31-12-2010} Ayudante 618 2-2-2011 NOMBRE Ana Osorio Bueno SELECT * FROM PROFESOR Alberto Gutiérrez Paz WHERE (C_PROF<347) AND (NOMBRE NOT LIKE ‘A%’) C_PROF 346 NOMBRE María Tapia Mora CATEGORIA Ayudante DPTO 618 F_CONTR 2-2-2011 19 25/02/2016 Consulta usando operaciones 39 En las expresiones SELECT se pueden utilizar e presiones tales como operaciones aritméticas o expresiones con cadenas de caracteres, pudiéndose utilizar paréntesis en estas expresiones Ejemplo con Tabla ARTÍCULOS C_ART C ART 3 4 5 6 PRECIO 1000 500 2000 1000 IVA 12 7 12 12 COMISION 1.0 0.5 1.0 0.75 Ejemplos haciendo operaciones 40 SELECT * FROM ARTICULO ORDER BY PRECIO SELECT * FROM ARTICULO ORDER BY PRECIO DESC SELECT PRECIO, IVA, (PRECIO+PRECIO*IVA/100) FROM ARTICULOS SELECT C_ART, PRECIO, PRECIO*COMISION/100 FROM ARTICULOS WHERE (PRECIO*(1+IVA/100))>1000 SELECT IVA, IVA C_ART C ART FROM ARTICULO ORDER BY IVA DESC, DESC C_ART C ART ASC SELECT * FROM ARTICULO ORDER BY DESC, DESC 20 25/02/2016 Resultados con Tabla ARTICULOS 41 C_ART PRECIO IVA COMISION 3 1000 12 1.0 4 500 7 0.5 5 2000 12 1.0 6 1000 12 0.75 SELECT * FROM ARTICULO ORDER BY PRECIO SELECT PRECIO, IVA, C_ART PRECIO IVA COMISION 5 2000 12 1.0 3 1000 12 1.0 6 1000 12 0.75 4 500 7 0.5 (PRECIO+PRECIO*IVA/100) FROM ARTICULOS (PRECIO+PRECIO*IVA)/100 IVA)/100 PRECIO IVA (PRECIO+PRECIO 1000 1120 12 500 7 535 2000 12 2240 1000 12 1120 Resultados con Tabla ARTICULOS 42 C_ART PRECIO IVA COMISION 3 1000 12 1.0 (PRECIO+PRECIO*IVA/100) FROM ARTICULOS 4 500 7 0.5 5 2000 12 1.0 PRECI IV PRECIO+PRECIO*IVA /100 O A 6 1000 12 0.75 SELECT PRECIO, IVA, SELECT C_ART, PRECIO, PRECIO*COMISION/100 FROM ARTICULOS WHERE (PRECIO*(1+IVA/100))>1000 C_ART PRECIO 3 1000 PRECIO*COMIS ION/100 10 5 2000 20 6 1000 7,5 1000 12 1120 7 535 2000 12 2240 1000 12 1120 500 SELECT IVA, C_ART FROM ARTICULO ORDER BY IVA DESC, C ART ASC C_ART IVA C_ART 12 3 12 5 12 6 7 4 21 25/02/2016 Consultas con funciones agregadas 43 Las funciones agregadas son funciones que devuelven información resumen sobre grupos de filas. Esta funciones agregadas son las siguientes: COUNT: Devuelve el número de filas que cumplen la condición. COUNT(*) incluye los valores nulos en la cuenta. COUNT(DISTINCT columna) devuelve el numero de valores distintos, no incluyendo nulos COUNT { (*) | [DISTINCT] columna} SUM (columna/expresión): Devuelve la suma de los valores. La columna o expresión debe ser numérica AVG (columna/expresión): Devuelve la media de los valores. valores La columna o expresión debe ser numérica MAX(columna/expresión): Devuelve el valor máximo. La columna o expresión debe ser numérica MIN(columna/expresión): Devuelve el valor mínimo. La columna o expresión debe ser numérica Ejemplos con funciones agregadas 44 SELECT COUNT(*) FROM ARTICULO SELECT COUNT(DISTINCT IVA) FROM ARTICULO SELECT COUNT(DISTINCT PRECIO) FROM ARTICULO WHERE IVA=12 SELECT SUM(PRECIO) FROM ARTICULO WHERE COMISION<1.0 SELECT SUM(PRECIO*COMISION/100) ( / ) FROM ARTICULO SELECT AVG(PRECIO) FROM ARTICULO SELECT MAX(PRECIO) FROM ARTICULO SELECT MIN(PRECIO) FROM ARTICULO 22 25/02/2016 Resultados con la tabla ARTICULOS 45 C_ART PRECIO IVA 3 1000 12 1.0 4 500 7 05 0.5 5 2000 12 1.0 6 1000 12 0.75 SELECT COUNT(*) FROM ARTICULO CIO*COMISION/100) / ) Devolvería 1500 SELECT SUM(PRECIO*COMISION/100) FROM ARTICULO FROM ARTICULOS Devolvería 2 SELECT SUM(PRECIO) FROM ARTICULO WHERE COMISION<1.0 PRECIO,IVA,COMISION,(PRE Devolvería 2 SELECT COUNT(DISTINCT PRECIO) FROM ARTICULO WHERE IVA=12 SELECT C_ART, Devolvería 4 SELECT COUNT(DISTINCT IVA) FROM ARTICULO COMISION C_AR PRECIO T 3 1000 4 500 5 2000 6 1000 IVA 12 7 12 12 COMISIO PRECIO*COMI N SION/100 1 10 0,5 2,5 1 20 0,75 7,5 Devolvería 40 Resultados con la tabla ARTICULOS 46 C_ART PRECIO IVA COMISION 3 1000 12 1.0 4 500 7 0.5 5 2000 12 1.0 6 1000 12 0.75 SELECT AVG(PRECIO) FROM ARTICULO SELECT MAX(PRECIO) FROM ARTICULO Devolvería 1125 Devolvería 2000 SELECT MIN(PRECIO) FROM ARTICULO Devolvería 500 23 25/02/2016 Consulta de información agrupada 47 SQL permite obtener una tabla agrupada que contiene una fila por cada grupo. grupo Esta fila contendrá información resumen sobre el grupo. Para obtener esta información agrupada se hace uso de la cláusula GROUP BY Ejemplos con Tabla PEDIDOS C_ART C ART 3 6 3 4 5 3 F PED F_PED 1-3-2010 1-3-2010 15-8-2010 27-2-2010 11-12-2010 27-2-2010 CANT 12 8 10 2 10 5 F SUM F_SUM 2-3-2010 3-3-2010 3-9-2010 2-3-2010 20-12-2010 2-3-2010 Ejemplos de información agrupada 48 C_ART 3 6 3 4 5 F_PED 1-3-2010 1-3-2010 15 8 2010 15-8-2010 27-2-2010 11-12-2010 CANT 12 8 10 2 10 3 27-2-2010 5 SELECT C_ART, SUM(CANT) FROM PEDIDO GROUP BY C_ART ORDER BY C_ART SELECT C_ART, SUM(CANT) FROM PEDIDO GROUP BY C_ART HAVING SUM(CANT)<10 F_SUM 2-3-2010 3-3-2010 3 9 2010 3-9-2010 2-3-2010 20-12-2010 2-3-2010 C_ART 3 4 5 6 C_ART 6 4 CANT 27 2 10 8 CANT 8 2 24 25/02/2016 Consulta usando varias tablas 49 Se pueden realizar consultas de más de una tabla bl de d la l base b d datos, de d especificando ifi d las l relaciones entre las distintas tablas en la cláusula WHERE y las tablas que intervienen en la cláusula FROM Este tipo p de consultas son muyy comunes y aportan una gran flexibilidad a la hora de acceder a la información Consulta usando varias tablas 50 Disponemos de la tabla ARTICULO y de la tabla PEDIDO Se desea comprobar los códigos y el precio de los artículos pedidos en el mes de marzo de 2010 Para consultar el precio debemos incluir en la cláusula FROM la tabla ARTICULO puesto que es la que contiene este campo Además, se necesita también la tabla PEDIDO para especificar la condición (F_PED BETWEEN {1-3-2010} AND {31-3-2010}) Pero, la consulta únicamente debe incluir los artículos cuyo código de artículo coincide en ambas tablas La consulta correcta sería la siguiente: SELECT ARTICULO.C_ART, ARTICULO.PRECIO, PEDIDO.C_ART, PEDIDO.F_PED FROM ARTICULO, PEDIDO WHERE PEDIDO.F_PED BETWEEN {1-3-2010} AND {31-3-2010} AND ARTICULO.C_ART=PEDIDO.C_ART 25 25/02/2016 Alias de tablas 51 Cuando se utilizan varias tablas en una consulta o cuando los nombres de tablas son muy largos se pueden utilizar alias de tablas especificando el nombre del alias después del nombre real de la tabla en la cláusula FROM Cuando una cláusula FROM contiene un alias, éste debe ser utilizado para identificar la tabla en las referencias de columnas cualificadas SELECT ARTICULO.C_ART, ARTICULO.PRECIO, PEDIDO.C_ART, PEDIDO.F_PED FROM WHERE ARTICULO, PEDIDO PEDIDO.F_PED BETWEEN {1-3-2010} AND {31-3-2010} AND ARTICULO.C_ART=PEDIDO.C_ART Si utilizamos alias para cada una de las tablas (A para la tabla ARTICULO y P para la tabla PEDIDO) SELECT A.C_ART, A.PRECIO, P.C_ART, P.F_PED FROM ARTICULO A, PEDIDO P WHERE P.F_PED BETWEEN {1-3-2010} AND {31-3-2010} AND A.C_ART=P.C_ART Subconsultas 52 Una subconsulta es una consulta dentro de otra Es decir, decir un SELECT anidado en la cláusula WHERE de otro SELECT Esta anidación permite realizar consultas complejas, que no serían posible, o poco eficiente haciendo consultas simples SELECT columnas FROM tabla WHERE columna l op (SELECT columna l FROM tabla t bl WHERE condición) di ió ) El operador (op) a utilizar dependerá del número de valores que se van a obtener en la subconsulta Las subconsultas pueden aparecer en cualquier orden en la que se pueda utilizar la cláusula WHERE (SELECT, UPDATE, DELETE) 26 25/02/2016 Ejemplos con la Tabla PROFESOR 53 Consultar los nombres de los profesores que están á adscritos d i all mismo i d departamento que ell profesor 347 SELECT NOMBRE FROM PROFESOR WHERE DPTO =(SELECT DPTO FROM PROFESOR WHERE C_PROF= 347) Consultar el precio de los artículo pedidos el mismo día que se pidió el artículo 3 SELECT PRECIO FROM ARTICULO WHERE C_ART IN (SELECT DISTINCT(C_ART) FROM PEDIDO WHERE F_PED IN (SELECT F_PED FROM PEDIDO WHERE C_ART=3) ) Normas generales para subconsultas 54 Las subconsultas deben generar una única columna La subconsulta debe estar limitada por paréntesis Las subconsultas que generen una única fila se pueden usar tanto con operadores simples como con operadores multivaluados (que utilizan más de un valor, por ejemplo IN) Las subconsultas que produzcan más de una fila se pueden d usar sólo l con operadores d multivaluados l l d El operador BETWEEN no se puede utilizar con una subconsulta 27 25/02/2016 Lenguaje de Control de Datos (DCL) 55 Permite controlar el acceso a la base de datos y su utilización Normalmente es el Administrador de la Base de Datos el encargado de utilizar las órdenes DCL Las órdenes principales son: COMMIT (confirmar las operaciones de manera definitiva)) ROLLBACK (deshacer las operaciones) GRANT (asignar derechos) REVOKE (eliminar derechos) Resumen 56 Introducción a las bases de datos relacionales Conceptos C básicos bá i Planificación y diseño de BDR Modelos de datos Conceptos del Modelo E-R Explotación de BDR SQL (DDL, DML y DCL) Ejemplos 28