Universidad Nacional del Sur – Departamento de Ciencias e Ingeniería de la Computación Elementos de Bases de Datos – 2do. Cuatrimestre de 2004 Cálculo Relacional de Tuplas (CRT) Elementos de Bases de Datos Una expresión del álgebra relacional es una secuencia de procedimientos que genera respuestas a consultas. Respeta la definición de lenguajes de consulta procedurales. Dpto.Ciencias e Ingeniería de la Computación Universidad Nacional del Sur El cálculo relacional de tuplas es un lenguaje de consulta declarativo / no procedural. Lic. María Mercedes Vitturini [mvitturi@cs.uns.edu.ar] Clase 7 1er. Cuatrimestre de 2004 Elementos de Bases de Datos Clase 7 2 Notación del CRT CRT Las consultas en CRT se expresan de manera declarativa, sin expresar el procedimiento efectivo para obtener la información. t[A]: denota el valor de la tupla t en el atributo A. t ∈ r: denota que la tupla t está en relación de pertenencia con la relación r. Formato general de una consulta: { t : P(t) } Se lee: “es el conjunto de tuplas t que satisfacen el predicado P”. Esto es, el resultado es un conjunto de tuplas t que satisfacen el predicado P. ∀: cuantificador universal “para todo”. ∃: cuantificador existencial “existe”. ∧: conjunción lógica “y”. ∨: disyunción lógica “o”. ¬: negación lógica “no”. ⇒: implicación o entonces. Elementos de Bases de Datos Clase 7 Definición Formal del CRT Cada variable que se usa en una fórmula puede estar libre o ligada. Una variable está ligada cuando está cuantificada universalmente (∀) o existencialmente (∃). Ejemplo: {t : ∃s ∈Clientes (s[localidad]=“Bahia Blanca” ∧ t=s)} En el ejemplo t es una variable libre y s está ligada. Elementos de Bases de Datos Clase 7 4 Definición Formal del CRT Dada una expresión en el CRT de la forma {t : P(t)} P es una fórmula que puede contener variables. Elementos de Bases de Datos Clase 7 3 Una fórmula del cálculo relacional de tuplas está compuesta de átomos. Un átomo puede ser de la forma: 5 s ∈ r donde s es una variable tupla y r una relación. s[X] θ u[Y] donde s y u son variables de tupla, X un atributo definido en s, Y un atributo definido en u, y θ un operador relacional en el conjunto {<, ≤, >, ≥, =, ≠}. s[X] θ c donde s es una variable tupla, θ un operador relacional y c una constante en el dominio del atributo X. Elementos de Bases de Datos Clase 7 6 1 Universidad Nacional del Sur – Departamento de Ciencias e Ingeniería de la Computación Elementos de Bases de Datos – 2do. Cuatrimestre de 2004 Definición Formal del CRT Significado de expresiones Las fórmulas se construyen usando las reglas: Un átomo es una fórmula. Si P es una fórmula entonces lo son ¬P y (P). ∃t ∈ r (Q(t)) significa que “existe una tupla t en la relación r tal que el predicado Q(t) es verdadero”. Si P1 y P2 son fórmulas entonces lo son P1 ∧ P2, P1 ∨ P2 y P1 ⇒ P2. Si P(s) es una fórmula con variable libre s, y r es una relación, entonces son fórmulas: ∀t ∈ r (Q(t)) significa que “Q es verdadera para todas las tuplas t pertenecientes a r”. P1 ∧ P2 es equivalente a ¬(¬P1 ∨ ¬P2). P1 ⇒ P2 es equivalente a ¬P1 ∨ P2. ∀t ∈ r (Q(t)) es equivalente a ¬(∃t ∈ r (¬Q(t))). ∃s ∈ r (P(s)) y ∀s ∈ r (P(s)). Elementos de Bases de Datos Clase 7 7 Elementos de Bases de Datos Clase 7 8 Diagrama E-R para un Banco Nro-Cuenta Saldo Ciu-Sucur Nom-Sucur Dom-Sucur Cuentas Sucursales Cta-Suc Deposita Esquema Relacional Relaciones del Modelo E/R anterior: Cuentas (Nro_Cuenta, Nom_Sucur, Saldo). Clientes (Nom_Cliente, Dir_Cliente, Ciu_Cliente). Suc-Pre Préstamos (Nro_Prest, Nom_Sucur, Monto). Clientes Nom-Cliente Ciu-Cliente Ciu-Cliente Sucursales (Nom_Sucur, Dir_Sucur, Ciu_Sucur). Préstamos Presta Nro-Prest Deposita (Nom_Cliente, Nro_Cuenta). Presta (Nom_Cliente, Nro_Prest). Monto Elementos de Bases de Datos Clase 7 9 10 Ejemplos de consultas Ejemplos de consultas Encontrar los números de préstamos de monto mayor a $1200. { t : ∃s ∈ Préstamos (s[Monto] > 1200) ∧ t [Nro-Prest]=s [Nro-Prest]} Esto se lee como "el conjunto de todas las tuplas t tales que existe una tupla s en la relación Préstamos para las cuales coinciden los valores del atributo Nro-Prest y el valor del atributo Monto es mayor que 1200". La variable tupla t se define solamente sobre el atributo NroPrest, puesto que es el único atributo que se pide como resultado. Elementos de Bases de Datos Clase 7 Elementos de Bases de Datos Clase 7 11 Encontrar los nombres de los clientes que tienen un préstamo de la sucursal Universitario: { t : ∃s ∈ Presta (t[Nom-Cliente]=s[Nom-Cliente] ∧ ∃u ∈ Préstamos (u[Nro-Prest]=s[Nro-Prest] ∧ u[Nom-Sucur]="Universitario")) } Esto se lee como "el conjunto de todas las tuplas (con atributo Nom-Cliente) para las cuales el Cliente tiene un préstamo en la sucursal Universitario". La variable tupla u asegura que el cliente tiene un préstamo en la sucursal Universitario. Elementos de Bases de Datos Clase 7 12 2 Universidad Nacional del Sur – Departamento de Ciencias e Ingeniería de la Computación Elementos de Bases de Datos – 2do. Cuatrimestre de 2004 Ejemplos de consultas Ejemplos de consultas Encontrar todos los clientes que tienen un préstamo, una cuenta, o ambos en un banco: { t : ∃s ∈ Presta(t[Nom-Cliente]=s[Nom-Cliente]) ∨ ∃u ∈ Deposita(t[Nom-Cliente]=u[Nom-Cliente]) } Esto es, el conjunto de todas las tuplas (con atributo Nom-Cliente) para las cuales vale una de las siguientes condiciones: Nom-Cliente aparece en alguna tupla de la relación Presta como prestatario del banco. Nom-Cliente aparece en alguna tupla de la relación Deposita Encontrar todos los clientes que tienen un préstamo y una cuenta en un banco: { t : ∃s ∈ Presta(t[Nom-Cliente]=s[Nom-Cliente]) ∧ ∃u ∈ Deposita(t[Nom-Cliente]=u[Nom-Cliente]) } Encontrar todos los clientes que tienen un préstamo pero no una cuenta en un banco: { t : ∃s ∈ Presta(t[Nom-Cliente]=s[Nom-Cliente]) ∧ ¬(∃u ∈ Deposita(t[Nom-Cliente]=u[Nom-Cliente])) } como depositante del banco. Elementos de Bases de Datos Clase 7 Elementos de Bases de Datos Clase 7 13 Ejemplos de consultas Seguridad de las Expresiones Encontrar todos los clientes que tienen una cuenta en todas las sucursales situadas en Tres Arroyos: {t : ∀u ∈ Sucursales (u [Ciu-Sucur]="Tres Arroyos" ⇒ ∃s ∈ Deposita(t [Nom-Cliente]=s [Nom-Cliente] ∧ ∃w ∈ Cuentas(w [Nro-Cuenta]=s [Nro-Cuenta] ∧ w [Nom-Sucur] =u [Nom-Sucur]))) } Supongamos que deseamos escribir una consulta del tipo { t : ¬( t ∈ Préstamo) }. Existen infinitas tuplas que no pertenecen a Préstamo, por lo que no se desean estos tipos de expresiones. El dominio de una fórmula P en el CRT es el conjunto de todos los valores que aparecen explícitamente en P. Esto es, el conjunto de todos los clientes (con atributo NomCliente) tales que, para todas las tuplas en la relación Sucursales cuyo atributo Ciu-Sucur es Tres Arroyos, cada Cliente tiene una cuenta en la Sucursal cuyo nombre aparece en el atributo NomSucur de u. Elementos de Bases de Datos Clase 7 15 Seguridad de las Expresiones Una expresión {t : P(t)} es segura si todos los valores que aparecen en el resultado son valores de dom(P). La expresión { t : ¬( t ∈Préstamo) } no es segura. Sabemos que dom(¬( t ∈Préstamo)) es el conjunto de valores que aparecen en Préstamo. Sin embargo, es posible tener una tupla t que no esté en Préstamo que contenga valores que no aparecen en Préstamo. El resto de las expresiones que presentamos hasta ahora eran seguras. Elementos de Bases de Datos Clase 7 14 17 dom(t ∈ Préstamo ∧ t[Monto] > 1200) es el conjunto de valores que aparecen en Préstamo (sin restringirnos al valor 1200). dom(¬(t ∈ Préstamo)) es el conjunto de valores que aparecen en Préstamo. Elementos de Bases de Datos Clase 7 16 Ejercicios propuestos Encontrar los saldos de las cuentas de Pablo García. Encontrar todos los clientes con dos o más cuentas. Encontrar todos los clientes con más de una cuenta en las sucursales Almafuerte y Universitario. Encontrar todos los clientes que tienen préstamos en dos sucursales distintas. Encontrar todas las sucursales que comparten clientes con otras sucursales. Elementos de Bases de Datos Clase 7 18 3 Universidad Nacional del Sur – Departamento de Ciencias e Ingeniería de la Computación Elementos de Bases de Datos – 2do. Cuatrimestre de 2004 STRUCTURED QUERY LANGUAGE - SQL STRUCTURED QUERY LANGUAGE – SQL Es el lenguaje comercial de mayor influencia. Combina el AR y CRT. Incluye capacidades para: Lenguaje de Consulta Comercial Apunte sobre SQL standard Definir consultas sobre los datos. Modificar el contenido de los datos. Definir la estructura de datos, Especificar ligaduras de integridad. DML DDL Elementos de Bases de Datos Clase 7 Capacidades del Lenguaje Ejemplo Sistema Obra Social DDL - Lenguaje de definición de datos. Se desea diseñar un sistema de Base de Datos para un Obra Social. La obra social trabaja con médicos, afiliados asociados y prácticas reconocidas (por ejemplo: análisis de distintos tipos, extracción de dentición, operaciones, etc.). Interesa mantener información de las atenciones de sus afiliados, constatando el médico que las realizó. En caso que el médico lo indique, se quiere mantener información de las prácticas indicadas. Definición de relaciones y vistas. Instrucciones para autorización. Definición de reglas de integridad. DML - Lenguaje interactivo de manipulación de datos. DML se incorpora a lenguajes de propósito general. Consultar datos almacenados. Modificar el contenido de los datos almacenados. Elementos de Bases de Datos Clase 7 21 Modelo Entidad Relación Precio_Real atenciones 22 PRACTICAS (pr_numero, pr_nombre, pr_valor_est). MEDICOS (me_numero, me_apellido, me_nombre, me_especialidad). PACIENTES (pa_numero, pa_nombre, pa_apellido, pa_fechanac). ATENCIONES (at_numero,pa_numero, me_numero, at_fecha). PRACTICAS_REALIZADAS (at_numero, pr_numero, re_precio_real). PACIENTES pr_realizadas PRACTICAS Elementos de Bases de Datos Clase 7 Elementos de Bases de Datos Clase 7 Modelo Relacional fecha MEDICOS 20 23 Elementos de Bases de Datos Clase 7 24 4 Universidad Nacional del Sur – Departamento de Ciencias e Ingeniería de la Computación Elementos de Bases de Datos – 2do. Cuatrimestre de 2004 Medicos me_nro me_apellido me_nombre m1 Carpio Juan José m2 Benitez Ana Belén m3 Rossi Ramiro m4 Sardi Juan Martín m5 Zunni Cecilia m6 Marino Tomás m7 Dellia Francisco ER Actualizado número MEDICOS Precio_Real fecha PACIENTES atenciones pr_realizadas Ejemplo Instancias me_especial Traumatólogo Dentista Dentista Pediatra Pediatra Traumatólogo Pacientes par_nro pa_apellido pa_nombre pa_fechanac Traumatólogo Atenciones at_nro pa_numero me_número at1 p1 m1 at2 p1 m2 at3 p1 m1 at4 p2 m3 at5 p3 m4 at6 p3 m2 at7 p4 m4 PRACTICAS Elementos de Bases de Datos Clase 7 25 p1 p2 p3 p4 p5 p6 Ruiz Molino Ferro Gadio Ruiz Escala Agustina Mariano Federico Luciana Verónica Clara 02/10/89 15/08/70 19/01/01 25/04/94 06/11/45 18/06/60 at_fecha 10/04/02 10/05/02 25/05/02 03/03/02 10/04/02 26/07/02 30/06/02 Elementos de Bases de Datos Clase 7 26 Estructura Básica LENGUAJE DE MANIPULACIÓN DE DATOS - DML •Estas operaciones están disponibles a cualquier tipo de usuario que este autorizado a modificar los datos. •El programador de aplicación desarrolla en un lenguaje con sentencias SQL embebidas. •Un usuario más experto puede realizar sus propias consultas para obtener los datos que desea. La estructura básica consiste de tres cláusulas: SELECT, FROM y WHERE. SELECT, corresponde con la operación de proyección del álgebra relacional. FROM, corresponde con la operación producto cartesiano del álgebra relacional. WHERE, corresponde con el predicado de selección del álgebra relacional. Elementos de Bases de Datos Clase 7 Consulta Simples Selección: se usa para obtener de una tabla aquellas filas que satisfacen una dada condición Estructura básica 28 Aplicación de la consulta Medicos me_nro me_apellido me_nombre m1 Carpio Juan José m2 Benitez Ana Belén m3 Rossi Ramiro m4 Sardi Juan Martín m5 Zunni Cecilia m6 Marino Tomás m7 Dellia Francisco SELECT * FROM medicos WHERE me_especialidad =“Dentista” me_nrome_apellidme_nombreme_especial m2 Benitez Ana Belén Dentista m3 Rossi Ramiro Dentista SELECT * FROM <relación> [WHERE <condición sobre las columnas>] Elementos de Bases de Datos Clase 7 me_especial Traumatólogo Dentista Dentista Pediatra Pediatra Traumatólogo Traumatólogo SELECT * FROM Medicos WHERE me_especialidad="Dentista" 29 Elementos de Bases de Datos Clase 7 30 5 Universidad Nacional del Sur – Departamento de Ciencias e Ingeniería de la Computación Elementos de Bases de Datos – 2do. Cuatrimestre de 2004 Aplicación de la consulta Consulta Simples Proyección: se usa para obtener de una tabla solo algunas columnas SELECT <lista de columnas> FROM <relación> SELECT me_apellido, me_especialidad FROM medicos Observación: en las consultas SQL no se eliminan las tuplas duplicadas. Para eliminar usar la palabra reservada DISTINCT Elementos de Bases de Datos Clase 7 31 Selección + Proyección me_apellid Carpio Benitez Rossi Sardi Zunni Marino Dellia me_especial Traumatólogo Dentista Dentista Pediatra Pediatra Traumatólogo Traumatólogo Medicos me_nro me_apellido me_nombre m1 Carpio Juan José m2 Benitez Ana Belén m3 Rossi Ramiro m4 Sardi Juan Martín m5 Zunni Cecilia m6 Marino Tomás m7 Dellia Francisco me_especial Traumatólogo Dentista Dentista Pediatra Pediatra Traumatólogo Traumatólogo SELECT me_apellido, me_especialidad FROM Medicos Elementos de Bases de Datos Clase 7 32 Aplicación de la consulta Medicos me_nro me_apellido me_nombre m1 Carpio Juan José m2 Benitez Ana Belén m3 Rossi Ramiro m4 Sardi Juan Martín m5 Zunni Cecilia m6 Marino Tomás m7 Dellia Francisco Ejemplo: para obtener sólo los datos nombre y apellido de los médicos que son dentistas SELECT me_nombre, me_apellido FROM medicos WHERE me_especialidad=“dentista” me_especial Traumatólogo Dentista Dentista Pediatra Pediatra Traumatólogo Traumatólogo me_apellido me_nombre Benitez Ana Belén Rossi Ramiro SELECT me_nombre, me_apellido FROM medicos WHERE me_especialidad=“dentista” Elementos de Bases de Datos Clase 7 33 El operador selección en SQL 34 Ordenar la Salida Se implementa a través de las expresiones condicionales en el WHERE. Las expresiones se arman con los operadores de comparación >, <, =, <>, >=, <= y los conectores AND, OR, NOT. Los valores que se comparan pueden incluir atributos de las relaciones mencionadas en el FROM y/o constantes. Pueden usarse operadores aritméticos Elementos de Bases de Datos Clase 7 Elementos de Bases de Datos Clase 7 35 La cláusula ORDER BY <lista de atributos> permite ordenar la salida. En la lista de atributos puede aparecer cualquier atributo de las relaciones que aparecen en la cláusula FROM. Por defecto la salida se ordena en forma ascendente. Se puede indicar el orden con las palabras reservadas DESC y ASC. Elementos de Bases de Datos Clase 7 36 6 Universidad Nacional del Sur – Departamento de Ciencias e Ingeniería de la Computación Elementos de Bases de Datos – 2do. Cuatrimestre de 2004 Consultas sobre más de una Relación Para un resultado ordenado Producto cartesiano: si después de la palabra reservada FROM se enumera más de una relación, SQL hace el producto cartesiano entre ellas. Ejemplo: obtener los datos apellido y nombre de médicos traumatólogos ordenados alfabéticamente SELECT me_apellido, me_nombre FROM medicos WHERE me_especialidad=“traumatólogo” ORDER BY me_apellido, me_nombre Elementos de Bases de Datos Clase 7 Atenciones at_nro pa_numero me_número at1 p1 m1 at2 p1 m2 at3 p1 m1 at4 p2 m3 at5 p3 m4 at6 p3 m2 at7 p4 m4 at_nro m1 m1 m1 m1 m1 m1 m1 m2 m2 m2 m2 m2 m2 m2 … m7 m7 m7 m7 m7 m7 m7 me_apellido me_nombre Carpio Juan José Carpio Juan José Carpio Juan José Carpio Juan José Carpio Juan José Carpio Juan José Carpio Juan José Benitez Ana Belén Benitez Ana Belén Benitez Ana Belén Benitez Ana Belén Benitez Ana Belén Benitez Ana Belén Benitez Ana Belén … … Dellia Francisco Dellia Francisco Dellia Francisco Dellia Francisco Dellia Francisco Dellia Francisco Dellia Francisco Especialidad Traumatólogo Traumatólogo Traumatólogo Traumatólogo Traumatólogo Traumatólogo Traumatólogo Dentista Dentista Dentista Dentista Dentista Dentista Dentista … Traumatólogo Traumatólogo Traumatólogo Traumatólogo Traumatólogo Traumatólogo Traumatólogo at_nro at1 at2 at3 at4 at5 at6 at7 at1 at2 at3 at4 at5 at6 at7 … at1 at2 at3 at4 at5 at6 at7 pa_numerome_número p1 m1 p1 m2 p1 m1 p2 m3 p3 m4 p3 m2 p4 m4 p1 m1 p1 m2 p1 m1 p2 m3 p3 m4 p3 m2 p4 m4 … … p1 m1 p1 m2 p1 m1 p2 m3 p3 m4 p3 m2 p4 m4 Elementos de Bases de Datos Clase 7 Elementos de Bases de Datos Clase 7 me_especial Traumatólogo Dentista Dentista Pediatra Pediatra Traumatólogo Traumatólogo 38 Join Natural El join natural entre dos o más relaciones no es una operación provista en SQL. at_fecha 10/04/02 10/05/02 25/05/02 03/03/02 10/04/02 26/07/02 30/06/02 10/04/02 10/05/02 25/05/02 03/03/02 10/04/02 26/07/02 30/06/02 … 10/04/02 10/05/02 25/05/02 03/03/02 10/04/02 26/07/02 30/06/02 Para realizar una consulta con el operador join natural, es necesario implementarlo manualmente, esto es, imponiendo la/s condición/es de igualdad sobre el/los campos de join en la expresión de condición del WHERE. Elementos de Bases de Datos Clase 7 39 Ejemplo SELECT medicos.me_número, me_apellido, me_especialidad, at_numero, at_fecha, pacientes.pa_numero, pa_apellido,pa_nombre, pa_fechaNac FROM pacientes, medicos, atenciones WHERE pacientes.pa_numero=atenciones.pa_numero AND medicos.me_numero = atenciones.me_numero Muestra datos más claros de leer que un listado de atenciones Elementos de Bases de Datos Clase 7 SELECT * FROM medicos, atenciones 37 Medicos me_nro me_apellid me_nombre m1 Carpio Juan José m2 Benitez Ana Belén m3 Rossi Ramiro m4 Sardi Juan Martín m5 Zunni Cecilia m6 Marino Tomás m7 Dellia Francisco at_fecha 10/04/02 10/05/02 25/05/02 03/03/02 10/04/02 26/07/02 30/06/02 Este tipo de consulta sin imponer condiciones en el WHERE generalmente da resultados sin significado semántico 41 Medicos me_nro me_apellido me_nombre m1 Carpio Juan José m2 Benitez Ana Belén m3 Rossi Ramiro m4 Sardi Juan Martín m5 Zunni Cecilia m6 Marino Tomás m7 Dellia Francisco me_nro m1 m2 m1 m3 m4 m2 m4 Atenciones at_nro pa_numero me_número at1 p1 m1 at2 p1 m2 at3 p1 m1 at4 p2 m3 at5 p3 m4 at6 p3 m2 at7 p4 m4 me_especial Traumatólogo Dentista Dentista Pediatra Pediatra Traumatólogo Traumatólogo me_apellido me_nombre me_especial at_nro at_fecha Carpio Benitez Carpio Rossi Sardi Benitez Sardi Traumatólogo Dentista Traumatólogo Dentista Pediatra Dentista Pediatra at1 at2 at3 at4 at5 at6 at7 10/04/02 10/05/02 25/05/02 03/03/02 10/04/02 26/07/02 30/06/02 Juan José Ana Belén Juan José Ramiro Juan Martín Ana Belén Juan Martín pa_nro p1 p1 p1 p2 p3 p3 p4 pa_apellido Ruiz Ruiz Ruiz Molino Ferro Ferro Gadio 40 Pacientes pa_nro pa_apellido pa_nombrepa_fechana p1 Ruiz Agustina 02/10/89 p2 Molino Mariano 15/08/70 p3 Ferro Federico 19/01/01 p4 Gadio Luciana 25/04/94 p5 Ruiz Verónica 06/11/45 p6 Escala Clara 18/06/60 at_fecha 10/04/02 10/05/02 25/05/02 03/03/02 10/04/02 26/07/02 30/06/02 pa_nombre Agustina Agustina Agustina Mariano Federico Federico Luciana pa_fechana 02/10/89 02/10/89 02/10/89 15/08/70 19/01/01 19/01/01 25/04/94 SELECT medicos.me_número, me_apellido, me_especialidad, at_numero, at_fecha, pacientes.pa_numero, pa_apellido, pa_nombre, pa_fechaNac FROM pacientes, medicos, atenciones WHERE pacientes.pa_numero=atenciones.pa_numero AND medicos.me_numero=atenciones.me_numero Elementos de Bases de Datos Clase 7 42 7 Universidad Nacional del Sur – Departamento de Ciencias e Ingeniería de la Computación Elementos de Bases de Datos – 2do. Cuatrimestre de 2004 Cómo se resuelven las consultas en SQL? El operador renombrar Cada vez que en la cláusula FROM de una instrucción SELECT se menciona a más de una relación, para resolver la consulta, se realiza el producto cartesiano de todas las relaciones involucradas y a continuación se filtran aquellas que cumplen con la condición del WHERE. El join es una operación muy costosa en tiempo. Elementos de Bases de Datos Clase 7 43 Ejemplo SQL proporciona un mecanismo para renombrar columnas (atributos) y/o relaciones. Para renombrar se usa la palabra reservada AS. La cláusula AS puede aparecer Siguiendo a los atributos que aparecen en el SELECT, para renombrar atributos. Siguiendo a las relaciones del FROM, para renombrar relaciones. Elementos de Bases de Datos Clase 7 44 En el ejemplo SELECT DISTINCT T1.pa_numero AS Nro_Pac, T1.at_fecha AS Fecha FROM atenciones AS T1, atenciones AS T2 WHERE T1. pa_numero=T2.pa_numero AND T1.at_número<>T2.at_número ORDER BY t1.pa_numero, t1_at_fecha Atenciones Número pa_numero me_número at1 p1 m1 at2 p1 m2 at3 p1 m1 at4 p2 m3 at5 p3 m4 at6 p3 m2 at7 p4 m4 SELECT DISTINCT T1.pa_numero AS Nro_Pac, T1.at_fecha AS Fecha T1 y T2 actúan como variables de tuplas del CRT. La forma de resolver esta consulta es hacer el producto cartesiano y dejar solo las tuplas que cumplen las condiciones del WHERE. Se uso de DISTINCT para no repetir tuplas. Elementos de Bases de Datos Clase 7 FROM atenciones AS T1, atenciones AS T2 WHERE T1. pa_numero=T2.pa_numero AND T1.at_número<>T2.at_número ORDER BY t1.pa_numero, t1_at_fecha 45 Nro_Pac p1 p1 p1 p3 p3 Fecha 4/10/2002 5/10/2002 5/25/2002 4/10/2002 7/26/2002 Elementos de Bases de Datos Clase 7 46 Condiciones sobre relaciones Operaciones sobre conjuntos Las cláusulas UNION, UNION ALL, INTERSECT, INTERSECT ALL, EXCEPT, EXCEPT ALL permiten vincular dos consultas del con la misma estructura. (SELECT pa_numero FROM atenciones WHERE at_fecha=“10/04/2002”) UNION (SELECT pa_numero FROM atenciones WHERE at_fecha=“10/05/2002”) Elementos de Bases de Datos Clase 7 at_fecha 4/10/2002 5/10/2002 5/25/2002 3/3/2002 4/10/2002 7/26/2002 6/30/2002 47 s IN R es verdadero si el atributo s está en el conjunto R. s NOT IN R es verdadero si el atributo s no está en el conjunto R. s > ALL R es verdadero si el atributo s es mayor que todos los elementos de R. s > ANY R es verdadero si el atributo s es mayor que alguno de los elementos de R. En todos los casos anteriores, R puede ser el resultado de una subconsulta anidada “SELECT .. FROM .. WHERE ..” Elementos de Bases de Datos Clase 7 48 8 Universidad Nacional del Sur – Departamento de Ciencias e Ingeniería de la Computación Elementos de Bases de Datos – 2do. Cuatrimestre de 2004 Pacientes pa_nro pa_apellido p1 Ruiz p2 Molino p3 Ferro p4 Gadio p5 Ruiz p6 Escala Ejemplos SELECT p.pa_apellido, p.pa_nombre FROM pacientes AS p WHERE p.pa_numero IN (SELECT a.pa_numero FROM atenciones AS a) pa_apellido Ruiz Molino Ferro Gadio Da por resultado el apellido y nombres de pacientes que recibieron al menos una atención. Elementos de Bases de Datos Clase 7 pa_nombre pa_fechanac Agustina 02/10/89 Mariano 15/08/70 Federico 19/01/01 Luciana 25/04/94 Verónica 06/11/45 Clara 18/06/60 49 Observaciones Atenciones at_nro pa_numero me_número at1 p1 m1 at2 p1 m2 at3 p1 m1 at4 p2 m3 at5 p3 m4 at6 p3 m2 at7 p4 m4 at_fecha 10/04/02 10/05/02 25/05/02 03/03/02 10/04/02 26/07/02 30/06/02 pa_nombre Agustina Mariano Federico Luciana SELECT p.pa_apellido, p.pa_nombre FROM pacientes AS p WHERE p.pa_numero IN (SELECT a.pa_numero FROM atenciones AS a) Elementos de Bases de Datos Clase 7 50 Funciones Agregadas Las mismos resultados pueden se pueden obterner con distintas consultas. Las consultas anidadas son más eficientes en tiempo que las consultas que tienen muchas relaciones siguiendo a la cláusula FROM. Son funciones que toman un conjunto de valores de entrada y producen un único valor de salida. Las sentencias SELECT se pueden anidar en dos o más niveles. Elementos de Bases de Datos Clase 7 51 Funciones Agregadas Elementos de Bases de Datos Clase 7 52 Ejemplos simples AVG (atributo) o promedio. Se aplica sobre columnas numéricas. No cuenta los valores nulos. SELECT AVG(pr_valor_est) FROM practicas. COUNT (atributo) retorna el número de valores no nulos. SELECT MAX(re_precio_real) FROM practicas_realizadas. MAX (atributo) retorna el valor máximo. SELECT COUNT(at_numero) FROM atenciones. MIN (atributo) retorna el valor mínimo. SELECT COUNT(DISTINCT pa_numero) FROM atenciones. SUM (atributo) retorna la suma. Se pueden combinar con DISTINCT u ALL (por defecto) Elementos de Bases de Datos Clase 7 53 Elementos de Bases de Datos Clase 7 54 9 Universidad Nacional del Sur – Departamento de Ciencias e Ingeniería de la Computación Elementos de Bases de Datos – 2do. Cuatrimestre de 2004 Agrupación Agrupación: GROUP BY Existen situaciones donde sería deseable aplicar la funciones agregadas a grupos de conjuntos de tuplas. SELECT pr_numero, SUM (re_precio_real) FROM practicas_realizadas GROUP BY pr_numero En estas situaciones de usa la cláusula GROUP BY. El resultado de la consulta es para cada número de práctica y la suma total de lo pagado por esa práctica. Elementos de Bases de Datos Clase 7 Cuando se usa la palabra reservada GROUP BY, siguiendo al SELECT sólo se admiten a los atributos del GROUP BY o funciones agregadas. Elementos de Bases de Datos Clase 7 55 En el ejemplo 56 Cláusula HAVING Practicas_Realizadas at_numero pr_numero re_precio_real at3 pr1 $ 20 at7 pr1 $ 25 at1 pr2 $ 100 at2 pr2 $ 90 at1 pr4 $ 25 at6 pr4 $ 30 at3 pr5 $ 10 SELECT pr_numero, SUM (re_precio_real) FROM practicas_realizadas GROUP BY pr_numero pr_numero pr1 pr2 pr4 pr5 Elementos de Bases de Datos Clase 7 SUM $ 45 $ 190 $ 55 $ 10 SELECT pr.pr_numero, pr_nombre, SUM(re_precio_real) FROM practicas_realizadas re , practicas pr WHERE re.pr_numero=pr.pr_numero GROUP BY pr_numero, pr_nombre HAVING SUM(re_precio_real) > 10.00$ Se utiliza para imponer condiciones sobre columnas con agregados Elementos de Bases de Datos Clase 7 57 En el ejemplo 58 RESUMEN Practicas_Realizadas at_numero pr_numero re_precio_real at1 pr2 $ 100 at1 pr4 $ 25 at2 pr2 $ 90 at3 pr1 $ 20 at3 pr5 $ 10 at6 pr4 $ 30 at7 pr1 $ 25 SELECT <lista de atributos y agregados> FROM <lista de relaciones> WHERE <condición sobre los atributos de las pr_numero pr_nombre pr1 Fondo de Ojo pr2 Aplicaciones XX pr4 Radiografia de Rodilla SELECT pr.pr_numero, pr_nombre, SUM(re_precio_real) FROM practicas_realizadas re , practicas pr WHERE re.pr_numero=pr.pr_numero GROUP BY pr_numero, pr_nombre HAVING SUM(re_precio_real) > 10.00$ Elementos de Bases de Datos Clase 7 SUM $ 45 $ 190 $ 55 59 relaciones> GROUP BY <lista de atributos> HAVING <condiciones sobre los agregados> ORDER BY <lista de atributos> Elementos de Bases de Datos Clase 7 60 10 Universidad Nacional del Sur – Departamento de Ciencias e Ingeniería de la Computación Elementos de Bases de Datos – 2do. Cuatrimestre de 2004 Agregar filas Actualizando el contenido de la Base de Datos Agregar una fila a una tabla: INSERT INTO tab_name (<column_name>,) VALUES (<valor>,): Las siguientes instrucciones también son parte del DML y sirven para actualizar (agregar, borrar o modificar) el contenido de las relaciones. Agregar una fila INSERT INTO pacientes (pa_numero,pa_apellido, pa_fechanac) VALUES (15, “Polo”, 25/03/1992) INSERT INTO pacientes VALUES (16, “Polo”,“José”, 25/03/1992) Elementos de Bases de Datos Clase 7 Observaciones sobre INSERT Borrar Filas de una tabla Existen dos maneras básicas de insertar. Borrar una o mas filas de una tabla: Insertar la fila completa Insertar sólo algunas columnas de una fila En el segundo caso se debe necesariamente especificar los nombres de las columnas que se van a completar. La operación se INSERT será rechazada cuando los atributos que se inserten no cumplan con las restricciones preexistentes. Elementos de Bases de Datos Clase 7 63 La operación DELETE sin cláusula de condición borra todas las filas de una tabla, no su esquema de relación. La operación de DELETE será exitosa siempre y cuando no se violen las restricciones preexistentes. Ejemplo: no será posible borrar una tupla de médicos, si dicho médico participa en alguna tupla de atenciones porque se estaría violandola resctricción de clave foránea de la relación atenciones. Elementos de Bases de Datos Clase 7 DELETE FROM tab_name [WHERE condición]; Borrar una/s fila/s DELETE FROM pacientes DELETE FROM medicos WHERE me_especialidad =“Pediatra” DELETE FROM practicas WHERE pr_numero=p4 Elementos de Bases de Datos Clase 7 64 DML – Actualizar filas de una tabla Observaciones sobre DELETE 62 65 Actualizar los datos de una o más filas de una tabla: UPDATE tab_name SET <nueva asignación de valores> [WHERE condición]; Actualizar una/s fila/s UPDATE practicas SET pr_valor_est = pr_valor_est - 10 UPDATE paciente SET pa_apellido = “Preda” WHERE pa_numero = p4 Elementos de Bases de Datos Clase 7 66 11 Universidad Nacional del Sur – Departamento de Ciencias e Ingeniería de la Computación Elementos de Bases de Datos – 2do. Cuatrimestre de 2004 Observaciones sobre UPDATE Resumen Al igual que en el caso de INSERT y DELETE esta operación solo será exitosa si como resultado de la modificación se siguen respetando todas las restricciones preexistenes. Elementos de Bases de Datos Clase 7 DML sobre el contenido de las tablas: 67 Agregar una o mas filas INSERT INTO Borrar una o mas filas DELETE FROM Actualizar el contenido de una o mas filas UPDATE ... SET Elementos de Bases de Datos Clase 7 68 Instrucciones del LDD Lenguaje de Definición de Datos Para la definición de esquemas: CREATE TABLE tab_nombre ( atrib1 TIPO [restricción1], atrib2 TIPO [restricción2], .... <restriccion_integridad1>, .... <restriccion_integridadn>); Estas operaciones sólo está autorizado a realizarla el DBA o administrador de la base de datos Elementos de Bases de Datos Clase 7 Creación de Esquemas 70 Instrucción ALTER TABLE Definir el esquema de la tabla (atributos y sus tipos). Permite modificar definiciones del esquema de una tabla. Definir, si existen, restricciones sobre los atributos. En líneas generales la definición de las tablas debe ser estática, una vez creado todo el esquema para la base de datos se espera no tener que modificarlo. Condición de no nulo, restricciónes de valores, subconjunto válido, etc. ALTER TABLE <nombre_tabla> DROP columna1 MODIFY columna2 <modificación>, ADD column3 INTEGER, ADD/DROP CONSTRAINT restricción1 ... Definir restricciones a nivel de tabla Clave primaria, clave foránea, índices, restricciones entre columnas. Elementos de Bases de Datos Clase 7 71 Elementos de Bases de Datos Clase 7 72 12 Universidad Nacional del Sur – Departamento de Ciencias e Ingeniería de la Computación Elementos de Bases de Datos – 2do. Cuatrimestre de 2004 Borrado de Esquemas Temas de la Clase de Hoy Lenguaje de Consulta Relacional Formal La instrucción DROP TABLE permite borrar el contenido y el esquema de una tabla. Para poder borrar una tabla la misma no debe estar referenciada. Calculo Relacional de Tuplas (CRT) Estructura general. Átomos y Fórmulas. Fórmulas Seguras. Lenguajes Consulta Relacional Comercial SQL Instrucción SELECT/FROM/WHERE. Instrucciones de actualización de contenido. Instrucciones de DLL. Elementos de Bases de Datos Clase 7 73 Elementos de Bases de Datos Clase 7 74 Bibliografía Bibliografía “Fundamentos de Bases de Datos” – A. Silberschatz. Capítulo 4. “Database and Knowledge Base System” – J. Ullman. Capítulo 4. Elementos de Bases de Datos Clase 7 75 13