Guía 3. ÁLGEBRA RELACIONAL.

Tamaño: px
Comenzar la demostración a partir de la página:

Download "Guía 3. ÁLGEBRA RELACIONAL."

Transcripción

1 5.4. ÁLGEBRA RELACIONAL. Guía 3. ÁLGEBRA RELACIONAL. El álgebra relacional es un lenguaje de consulta procedimental. Consta de un conjunto de operaciones que toman como entrada una o dos relaciones y producen como resultado una nueva relación. Las operaciones fundamentales del álgebra relacional son: OF.1. Selección. OF.2. Proyección. OF.3. Unión. OF.4. Diferencia de conjuntos. OF.5. Producto cartesiano. OF.6. Renombramiento. Además hay operaciones adicionales a las fundamentales: OA.1. Intersección de conjuntos. OA.2. Reunión natural. OA.3. División. OA.4. Asignación. También están las operaciones del Álgebra Relacional extendida: OE.1. Proyección generalizada. OE.2. Funciones de agregación (count, sum, avg, min, max). OE.3. Reunión externa (por la izquierda, por la derecha, completa) OPERACIONES FUNDAMENTALES Y OPERACIONES ADICIONALES. Las operaciones selección, proyección y renombramiento se denominan operaciones unarias porque operan sobre una sola relación. Las otras tres operaciones operan sobre pares de relaciones y se denominan, por lo tanto, operaciones binarias. OF.1. SELECCIÓN (σ). Se utiliza la letra griega sigma minúscula (σ) para denotar la selección. El predicado aparece como subíndice de σ. La relación del argumento se da entre paréntesis a continuación de σ. Permite seleccionar un subconjunto de tuplas de una relación (R), todas aquellas que cumplan la(s) condición(es) del predicado P. Notación: σp(r) Ejemplo: para seleccionar las tuplas de la relación alumno en que su apellido es Bolaños se debe escribir: σapellido = Bolaños (alumno) Ejemplo: Si se tuviera una relación prestamo como la que se muestra a continuación prestamo numero-prestamo nombre-sucursal importe P-11 Collado Mediano 900 P-14 Centro P-15 Navacerrada P-16 Navacerrada P-17 Centro P-23 Moralzarzal P-93 Becerril 500 Y se quisiera seleccionar todas las tuplas en las que el importe prestado sea mayor a euros, se debe escribir: Y el resultado es este: σimporte > 1200 (prestamo) SELECT * FROM prestamo WHERE importe>1200; numero-prestamo nombre-sucursal importe P-14 Centro P-15 Navacerrada P-16 Navacerrada P-23 Moralzarzal

2 En general, se permiten las comparaciones que utilizan =,, <,, > o en el predicado de selección. Además, se pueden combinar varios predicados en uno mayor utilizando tanto el operador y ( ) como el operador o ( ). Por tanto, para encontrar las tuplas correspondientes a préstamos de más de concedidos por la sucursal de Navacerrada, se escribe: SELECT * FROM prestamo WHERE el resultado es este: σnombre-sucursal = Navacerrada importe > 1200 (prestamo) prestamo.nombre-sucursal='navacerrada' AND prestamo.importe > 1200; numero-prestamo nombre-sucursal importe P-15 Navacerrada P-16 Navacerrada El predicado de selección puede incluir comparaciones entre dos atributos: OF.2. PROYECCIÓN. La operación proyección es una operación unaria que devuelve su relación de argumentos, excluyendo algunos argumentos (según se requiera). Dado que las relaciones son conjuntos, se eliminan todas las filas duplicadas. La proyección se denota por la letra griega mayúscula pi (Π). Se crea una lista de los atributos que se desea que aparezcan en el resultado como subíndice de Π. La relación de argumentos se escribe a continuación entre paréntesis. En otras palabras, permite extraer columnas (atributos) de una relación, dando como resultado un subconjunto vertical de atributos de la relación. Notación: Π A 1, A 2,,A n (R) 2

3 Si se desea hacer una lista de todos los números de préstamo y del importe de los mismos, pero sin que aparezcan los nombres de las sucursales, se debe escribir: Π numero-prestamo, importe (prestamo) el resultado es este: SELECT prestamo.numero-prestamo, prestamo.importe FROM prestamo; numero-prestamo importe P P P P P P P Se puede efectuar composición de operaciones relacionales, por ejemplo, si se tiene la relación cliente : cliente nombre-cliente calle-cliente ciudad-cliente Abril Preciados Valsaín Amo Embajadores Arganzuela Badorrey Delicias Valsaín Fernández Jazmín León Gómez Carretas Cerceda González Arenal La Granja López Mayor Peguerinos Pérez Carretas Cerceda Rodríguez Yeserías Cádiz Rupérez Ramblas León Santos Mayor Peguerinos Valdivieso Goya Vigo Y si requiere "encontrar el nombre de los clientes que viven en la ciudad de Peguerinos", es necesario actuar en este orden: Primero, seleccionar las tuplas de cliente cuyo atributo ciudad-cliente sea igual al valor Peguerinos : σciudad-cliente = Peguerinos (cliente) el resultado parcial es este: nombre-cliente calle-cliente ciudad-cliente López Mayor Peguerinos Santos Mayor Peguerinos Y segundo, sobre la anterior operación aplicar Proyección indicando que se mostrará el atributo nombre-cliente: Π nombre-cliente (resultado operación anterior) Es decir, Π nombre-cliente (σciudad-cliente = Peguerinos (cliente)) Dando como resultado: SELECT cliente.nombre-cliente FROM cliente WHERE cliente.ciudad-cliente = 'Peguerinos'; nombre-cliente López Santos 3

4 OF.3. UNIÓN. La operación unión retorna el conjunto de tuplas que están en R, o en S, o en ambas. Se eliminan duplicados. R y S deben ser relaciones compatibles. Notación: R S Se insiste en que las relaciones deben ser compatibles. En la gráfica inmediatamente anterior la segunda columna de r contiene el mismo tipo de valores que la segunda columna de s. Por tanto, para que una operación unión r s sea válida hay que exigir que se cumplan dos condiciones: 1. Las relaciones r y s deben ser del mismo grado. Es decir, deben tener el mismo número de atributos. 2. Los dominios de los atributos i-ésimos de r y de s deben ser iguales para todo i. Ejemplo. Dadas las relaciones: impositor nombre-cliente numero-cuenta Abril C-102 Gómez C-101 González C-201 González C-217 López C-222 Rupérez C-215 Santos C-305 prestatario nombre-cliente numero-prestamo Fernández P-16 Gómez P-23 Gómez P-11 López P-15 Pérez P-93 Santos P-17 Sotoca P-14 Valdivieso P-17 Y se requiere averiguar el nombre de todos los clientes del banco que tienen una cuenta, un préstamo o ambas cosas. La circunstancias son las siguientes: La relación cliente NO contiene esa información, dado que los clientes no necesitan tener ni cuenta ni préstamo vigente en el banco. Para contestar a esta consulta hace falta la información de la relación impositor (los que tienen cuentas) y de la relación prestatario (los que tienen préstamos vigentes). 4

5 Podemos averiguar los nombres de todos los clientes con préstamos vigentes en el banco: Π nombre-cliente (prestatario) También podemos averiguar el nombre de los clientes con cuenta en el banco: Π nombre-cliente (impositor) Para contestar a la consulta hace falta la unión de estos dos conjuntos; es decir, hacen falta todos los nombres de clientes que aparecen en alguna de las dos relaciones o en ambas. Estos datos se pueden averiguar mediante la operación binaria unión, denotada, como en la teoría de conjuntos, por. Por tanto, la expresión necesaria es: Π nombre-cliente (prestatario) Π nombre-cliente (impositor) SELECT prestatario.nombre-cliente FROM prestatario UNION SELECT impositor.nombre-cliente FROM impositor; Dando como resultado: prestatario.nombre-cliente Abril Fernández Gómez González López Pérez Rupérez Santos Sotoca Valdivieso Téngase en cuenta que en el resultado hay diez tuplas, aunque hay siete prestatarios y seis impositores distintos. Esta discrepancia aparente se debe a que Gómez, Santos y López son a la vez prestatarios e impositores. Dado que las relaciones son conjuntos, se eliminan los valores duplicados. Y como la pregunta es los clientes del banco que tienen una cuenta, un préstamo o ambas cosas aunque González tenga 2 cuentas solo aparece una vez, igual sucede con Gómez quien aunque tenga 2 préstamos solo aparecerá una vez. Obsérvese que en este ejemplo se toma la unión de dos conjuntos, ambos consistentes en valores de nombrecliente. En general, se debe asegurar que las uniones se realicen entre relaciones compatibles. Por ejemplo, no tendría sentido realizar la unión de las relaciones préstamo y prestatario, la primera es una relación con tres atributos, la segunda sólo tiene dos, como se ve a continuación: prestamo numero-prestamo nombre-sucursal importe P-11 Collado Mediano 900 P-14 Centro P-15 Navacerrada P-16 Navacerrada P-17 Centro P-23 Moralzarzal P-93 Becerril 500 prestatario nombre-cliente numero-prestamo Fernández P-16 Gómez P-23 Gómez P-11 López P-15 Pérez P-93 Santos P-17 Sotoca P-14 Valdivieso P-17 Más aún, considérese la unión de un conjunto de nombres de clientes y de un conjunto de ciudades. Una unión así no tendría sentido en la mayor parte de los casos. 5

6 OF.4. DIFERENCIA DE CONJUNTOS. La operación diferencia de conjuntos, denotada por, permite buscar las tuplas que estén en una relación pero no en la otra. La expresión r s da como resultado una relación que contiene las tuplas que están en r pero no en s. Como en el caso de la operación unión, hay que asegurarse de que las diferencias de conjuntos se realicen entre relaciones compatibles. Ejemplo. Si se requiere averiguar el nombre de todos los clientes del banco que tengan abierta una cuenta pero no tengan préstamo vigente, se escribe: Π nombre-cliente (impositor) Π nombre-cliente (prestatario) SELECT DISTINCT impositor.nombre-cliente FROM impositor WHERE impositor.nombre-cliente NOT IN (SELECT DISTINCT prestatario.nombre-cliente FROM prestatario); Dando como resultado: impositor.nombre-cliente Abril González Rupérez NOTA: Esta operación no es conmutativa. La expresión No es lo mismo que (Π nombre-cliente (impositor) Π nombre-cliente (prestatario)) (Π nombre-cliente (prestatario) Π nombre-cliente (impositor)) Porque el significado de el nombre de todos los clientes del banco que tengan abierta una cuenta pero no tengan préstamo vigente es diferente de el nombre de todos los clientes del banco que tengan préstamo vigente pero no tengan abierta una cuenta. OF.5. PRODUCTO CARTESIANO. Esta operación entrega una relación, cuyo esquema corresponde a una combinación de todas las tuplas de R con cada una de las tuplas de S, y sus atributos corresponden a los de R seguidos por los de S: Notación: R S 6

7 Ejemplo. Si se efectuara el producto cartesiano entre las relaciones prestatario (r1) y prestamo (r2), puede suceder que el mismo nombre de atributo puede aparecer tanto en r1 como en r2, de modo que debe crearse un esquema de denominaciones para distinguir entre ambos atributos. En este caso se logra adjuntando al atributo el nombre de la relación de la que proviene originalmente. prestatario nombre-cliente numero-prestamo Fernández P-16 Gómez P-23 Gómez P-11 López P-15 Pérez P-93 Santos P-17 Sotoca P-14 Valdivieso P-17 prestamo numero-prestamo nombre-sucursal importe P-11 Collado Mediano 900 P-14 Centro P-15 Navacerrada P-16 Navacerrada P-17 Centro P-23 Moralzarzal P-93 Becerril 500 Entonces, el esquema de relación de r = prestatario prestamo es: ( prestatario.nombre-cliente, prestatario.numeroprestamo, prestamo.nombre-sucursal, prestamo.numero-prestamo, prestamo.importe) Con este esquema puede distinguirse entre prestatario.numero-prestamo y prestamo.numero-prestamo. Para los atributos que sólo aparecen en uno de los dos esquemas se suele omitir el prefijo con el nombre de la relación. Esta simplificación no genera ambigüedad alguna. Por tanto, se puede escribir el esquema de relación de r como: (nombre-cliente,prestatario.numero-prestamo, prestamo.numero-prestamo, nombre-sucursal, importe) Al efectuar un producto cartesiano, se tienen n1 tuplas en r1 y n2 tuplas en r2. Por tanto, hay (n1 * n2) tuplas en r. Ahora, supóngase que se requiere averiguar los nombres de todos los clientes que tienen concedido un préstamo en la sucursal Centro. Nótese que la información de a quiénes se les ha concedido préstamos está en la relación prestatario, pero la información de cuál sucursal concedió el préstamo corresponde a la relación préstamo. Entonces, podemos proceder de la siguiente manera: Paso 1. Se calcula el producto cartesiano completo. Como se podía imaginar, se crea una tupla de r a partir de cada par de tuplas posible: una de la relación prestatario y otra de la relación préstamo. Por tanto, r es una relación de gran tamaño, como se puede ver en la página siguiente. SELECT * FROM prestatario, prestamo; 7

8 nombre-cliente prestatario. numero-prestamo prestamo. numero-prestamo nombre-sucursal importe Fernández P-16 P-11 Collado Mediano 900 Fernández P-16 P-14 Centro Fernández P-16 P-15 Navacerrada Fernández P-16 P-16 Navacerrada Fernández P-16 P-17 Centro Fernández P-16 P-23 Moralzarzal Fernández P-16 P-93 Becerril 500 Gómez P-23 P-11 Collado Mediano 900 Gómez P-23 P-14 Centro Gómez P-23 P-15 Navacerrada Gómez P-23 P-16 Navacerrada Gómez P-23 P-17 Centro Gómez P-23 P-23 Moralzarzal Gómez P-23 P-93 Becerril 500 Gómez P-11 P-11 Collado Mediano 900 Gómez P-11 P-14 Centro Gómez P-11 P-15 Navacerrada Gómez P-11 P-16 Navacerrada Gómez P-11 P-17 Centro Gómez P-11 P-23 Moralzarzal Gómez P-11 P-93 Becerril 500 López P-15 P-11 Collado Mediano 900 López P-15 P-14 Centro López P-15 P-15 Navacerrada López P-15 P-16 Navacerrada López P-15 P-17 Centro López P-15 P-23 Moralzarzal López P-15 P-93 Becerril 500 Pérez P-93 P-11 Collado Mediano 900 Pérez P-93 P-14 Centro Pérez P-93 P-15 Navacerrada Pérez P-93 P-16 Navacerrada Pérez P-93 P-17 Centro Pérez P-93 P-23 Moralzarzal Pérez P-93 P-93 Becerril 500 Santos P-17 P-11 Collado Mediano 900 Santos P-17 P-14 Centro Santos P-17 P-15 Navacerrada Santos P-17 P-16 Navacerrada Santos P-17 P-17 Centro Santos P-17 P-23 Moralzarzal Santos P-17 P-93 Becerril 500 Sotoca P-14 P-11 Collado Mediano 900 Sotoca P-14 P-14 Centro Sotoca P-14 P-15 Navacerrada Sotoca P-14 P-16 Navacerrada Sotoca P-14 P-17 Centro Sotoca P-14 P-23 Moralzarzal Sotoca P-14 P-93 Becerril 500 Valdivieso P-17 P-11 Collado Mediano 900 Valdivieso P-17 P-14 Centro Valdivieso P-17 P-15 Navacerrada Valdivieso P-17 P-16 Navacerrada Valdivieso P-17 P-17 Centro Valdivieso P-17 P-23 Moralzarzal Valdivieso P-17 P-93 Becerril 500 8

9 Paso 2. Ahora aplicamos los 2 filtros al tiempo, es decir, el que coincidan los valores de los atributos numero-prestamo junto con la condición que nombre-sucursal sea Centro. σ(prestatario.numero-prestamo = prestamo.numero-prestamo) (nombre-sucursal = Centro ) (prestatario prestamo) SELECT * FROM prestatario, prestamo WHERE prestatario.numero-prestamo = prestamo.numero-prestamo AND prestamo.nombre-sucursal = 'Centro'; Cuyo resultado es este: nombre-cliente prestatario. numero-prestamo prestamo. numero-prestamo nombre-sucursal importe Santos P-17 P-17 Centro Sotoca P-14 P-14 Centro Valdivieso P-17 P-17 Centro Y finalmente se efectúa la proyección: Π nombre-cliente (σ (prestatario.numero-prestamo = prestamo.numero-prestamo) (nombre-sucursal = Centro ) (prestatario prestamo)) SELECT nombre-cliente FROM prestatario, prestamo WHERE prestatario.numero-prestamo = prestamo.numero-prestamo AND prestamo.nombre-sucursal = 'Centro'; Cuyo resultado es este: nombre-cliente Santos Sotoca Valdivieso 9

10 OF.6. RENOMBRAMIENTO. Los resultados de las expresiones de álgebra relacional no tienen un nombre que se pueda utilizar para referirse a ellas. Resulta útil poder ponerles nombre; el operador renombramiento, denotado por la letra griega rho minúscula (ρ), permite realizar esta tarea. Dada una expresión E del álgebra relacional, la expresión con el nombre x. ρx (E) devuelve el resultado de la expresión E Otra forma de la operación renombramiento es la siguiente. Supóngase que una expresión del álgebra relacional E tiene grado n. Por tanto, la expresión ρx (A1, A2,, An) (E) devuelve el resultado de la expresión E con el nombre x y con los atributos con el nombre cambiado a A1, A2,, An. Ejemplo sencillo. Si se tuviera una relación empleado de la cual quisiera obtener todas sus tuplas pero solamente los atributos cedula-empleado, nombre-empleado y telefono-empleado, puedo aplicar la operación proyección: Π cedula-empleado, nombre-empleado, telefono-empleado (empleado) Pero como los nombres pudieran parecerme un poco extensos, puedo renombrar tanto a la relación como a los atributos: ρ emp (c, n, t) (Π cedula-empleado, nombre-empleado, telefono-empleado (empleado)) y como resultado entrega una relación con nombre emp y atributos (c, n, t). En SQL se hace uso de alias para implementar el renombramiento, por ejemplo: SELECT cedula-empleado c, nombre-empleado n, telefono-empleado t FROM empleado emp; 10

11 Retomando el ejemplo del producto cartesiano presentado en las páginas 7 a 9, tenemos lo siguiente: Se efectúa el producto cartesiano pero entre prestatario y una relación que contenga únicamente a las tuplas de la relación prestamo cuyo atributo nombre-sucursal sea Centro. Esa relación intermedia se obtiene de la siguiente manera: σnombre-sucursal = Centro (prestamo) Y se procede a renombrarla para facilitar su manejo posterior: ρ RPF (σnombre-sucursal = Centro (prestamo)) SELECT * FROM prestamo WHERE prestamo.nombre-sucursal = 'Centro' RPF Al aplicar la anterior instrucción, se obtiene: RPF numero-prestamo nombre-sucursal importe P-14 Centro P-17 Centro Y se efectúa el producto cartesiano entre prestatario y RPF (que solo tendría 16 tuplas). σprestatario.numero-prestamo = RPF.numero-prestamo (prestatario RPF) pero como debe escribirse completo, entonces: σ prestatario.numero-prestamo=rpf.numero-prestamo(prestatario (ρrpf (σ nombre-sucursal= Centro (prestamo)))) Y finalmente se hace la proyección: Π nombre-cliente ( σ prestatario.numero-prestamo = RPF.numero-prestamo (prestatario (ρrpf (σ nombre-sucursal= Centro (prestamo)))) ) SELECT nombre-cliente FROM (SELECT * FROM prestatario, (SELECT * FROM prestamo WHERE prestamo.nombre-sucursal = 'Centro') RPF) WHERE prestatario.numero-prestamo = RPF.numero-prestamo; 11

12 OPERACIONES ADICIONALES Guía 3. ÁLGEBRA RELACIONAL. OA.1. INTERSECCIÓN DE CONJUNTOS. La intersección, como en Teoría de conjuntos, corresponde al conjunto de todas las tuplas que están en R y en S, siendo R y S relaciones compatibles: Notación: R S Ejemplo. Si se requiere averiguar todos los clientes que tienen un préstamo concedido y una cuenta abierta. prestatario nombre-cliente numero-prestamo Fernández P-16 Gómez P-23 Gómez P-11 López P-15 Pérez P-93 Santos P-17 Sotoca P-14 Valdivieso P-17 impositor nombre-cliente numero-cuenta Abril C-102 Gómez C-101 González C-201 González C-217 López C-222 Rupérez C-215 Santos C-305 Utilizando la intersección de conjuntos se puede escribir: Π nombre-cliente (prestatario) Π nombre-cliente (impositor) SELECT DISTINCT prestatario.nombre-cliente FROM prestatario WHERE prestatario.nombre-cliente IN (SELECT DISTINCT impositor.nombre-cliente FROM impositor); prestatario. nombre-cliente Fernández Gómez López Pérez Santos Sotoca Valdivieso impositor. nombre-cliente Abril Gómez González López Rupérez Santos = nombre-cliente Gómez López Santos 12

13 Obsérvese que se puede volver a escribir cualquier expresión del álgebra relacional utilizando la intersección de conjuntos sustituyendo la operación intersección por un par de operaciones de diferencia de conjuntos, de la manera siguiente: r s = r (r s) Por tanto, la intersección de conjuntos no es una operación fundamental y no añade potencia al álgebra relacional. Sencillamente, es más conveniente escribir r s que r (r s). Verificación: Siendo: r = relación prestatario s = relación impositor Aplicamos la operación correspondiente a: (r s) Π nombre-cliente (prestatario) Π nombre-cliente (impositor) SELECT DISTINCT prestatario.nombre-cliente FROM prestatario WHERE prestatario.nombre-cliente NOT IN (SELECT DISTINCT impositor.nombre-cliente FROM impositor); prestatario. nombre-cliente Fernández Gómez López Pérez Santos Sotoca Valdivieso - impositor. nombre-cliente Abril Gómez González López Rupérez Santos = r - s nombre-cliente Fernández Pérez Sotoca Valdivieso Y ahora hacemos: r (resultado operación anterior) es decir r (r s) SELECT DISTINCT prestatario.nombre-cliente FROM prestatario WHERE prestatario.nombre-cliente NOT IN ( SELECT DISTINCT prestatario.nombre-cliente FROM prestatario WHERE prestatario.nombre-cliente NOT IN (SELECT DISTINCT impositor.nombre-cliente FROM impositor) ); prestatario. nombre-cliente Fernández Gómez López Pérez Santos Sotoca Valdivieso - r - s nombre-cliente Fernández Pérez Sotoca Valdivieso = r - (r s) nombre-cliente Gómez López Santos 13

14 OA.2. REUNIÓN NATURAL. Suele resultar deseable simplificar ciertas consultas que exigen un producto cartesiano. Generalmente, las consultas que implican un producto cartesiano incluyen un operador selección sobre el resultado del producto cartesiano. El operador Reunión Natural hace un producto cartesiano de sus dos argumentos y realiza una selección forzando la igualdad de atributos que aparecen en ambas relaciones, eliminando repetidos: Notación: R S La reunión natural de r y s, es una relación del esquema R S definida formalmente de la manera siguiente: Primera r con primera s Primera r con tercera s Cuarta r con primera s Cuarta r con tercera s Quinta r con cuarta s Ejemplo. Si se requiere averiguar los nombres de todos los clientes que tienen concedido un préstamo en el banco y averiguar su importe. Esta consulta puede expresarse utilizando la reunión natural de la manera siguiente: Π nombre-cliente, numero-prestamo, importe (prestatario prestamo) Dado que los esquemas de prestatario y de préstamo (es decir, Esquema-prestatario y Esquema-prestamo) tienen en común el atributo numero-prestamo, la operación reunión natural sólo considera los pares de tuplas que tienen el mismo valor de numero-prestamo. Esta operación combina cada uno de estos pares en una sola tupla en la unión de los dos esquemas (es decir, nombre-cliente, numero-prestamo, importe). prestatario prestamo nombre-cliente numero-prestamo numero-prestamo nombre-sucursal importe Fernández P-16 P-11 Collado Mediano 900 Gómez P-23 P-14 Centro Gómez P-11 P-15 Navacerrada López P-15 P-16 Navacerrada Pérez P-93 P-17 Centro Santos P-17 P-23 Moralzarzal Sotoca P-14 P-93 Becerril 500 Valdivieso P-17 SELECT prestatario.nombre-cliente, prestatario.numero-prestamo, prestamo.importe FROM prestatario INNER JOIN prestamo ON (prestatario.numero-prestamo = prestamo.numero-prestamo); 14

15 Cuyo resultado es: Guía 3. ÁLGEBRA RELACIONAL. nombre-cliente prestatario. numero-prestamo importe Fernández P Gómez P Gómez P López P Pérez P Santos P Sotoca P Valdivieso P Ejemplo. Si se requiere averiguar los nombres de todas las sucursales con clientes que tienen una cuenta abierta en el banco y que viven en Peguerinos. A partir de las relaciones existentes: cliente nombre-cliente calle-cliente ciudad-cliente Abril Preciados Valsaín Amo Embajadores Arganzuela Badorrey Delicias Valsaín Fernández Jazmín León Gómez Carretas Cerceda González Arenal La Granja López Mayor Peguerinos Pérez Carretas Cerceda Rodríguez Yeserías Cádiz Rupérez Ramblas León Santos Mayor Peguerinos Valdivieso Goya Vigo cuenta impositor numero-cuenta nombre-sucursal saldo nombre-cliente numero-cuenta C-101 Centro 500 Abril C-102 C-102 Navacerrada 400 Gómez C-101 C-201 Galapagar 900 González C-201 C-215 Becerril 700 González C-217 C-217 Galapagar 750 López C-222 C-222 Moralzarzal 700 Rupérez C-215 C-305 Collado Mediano 350 Santos C-305 Se requieren esas tres relaciones porque: En la relación cliente sirven los atributos: nombre-cliente y ciudad-cliente. En la relación impositor sirven los atributos: nombre-cliente y numero-cuenta. En la relación cuenta sirven los atributos: número-cuenta y nombre-sucursal. Entonces, el esquema resultante de la reunión natural de las tres relaciones mencionadas es: r = cliente cuenta impositor ( cliente.nombre-cliente, calle-cliente, ciudad-cliente, cuenta.numero-cuenta, nombre-sucursal, saldo, impositor.nombre-cliente, impositor. numero-cuenta ) Dado que la operación es binaria podemos empezar por cuenta impositor SELECT * FROM cuenta INNER JOIN impositor ON (cuenta.numero-cuenta = impositor.numero-cuenta); 15

16 Cuyo resultado es este: cuenta. numero-cuenta nombre-sucursal saldo nombre-cliente C-101 Centro 500 Gómez C-101 C-102 Navacerrada 400 Abril C-102 C-201 Galapagar 900 González C-201 C-215 Becerril 700 Rupérez C-215 C-217 Galapagar 750 González C-217 C-222 Moralzarzal 700 López C-222 C-305 Collado Mediano 350 Santos C-305 Y ahora se procede con cliente (resultado de la operación anterior) impositor. numero-cuenta SELECT * FROM ( cuenta INNER JOIN impositor ON (cuenta.numero-cuenta = impositor.numero-cuenta)) INNER JOIN cliente ON (impositor.nombre-cliente = cliente.nombre-cliente); Cuyo resultado es este: Cliente. nombrecliente callecliente ciudadcliente numerocuenta nombresucursal saldo RNCI. nombrecliente numerocuenta Abril Preciados Valsaín C-102 Navacerrada 400 Abril C-102 Gómez Carretas Cerceda C-101 Centro 500 Gómez C-101 González Arenal La Granja C-201 Galapagar 900 González C-201 González Arenal La Granja C-217 Galapagar 750 González C-217 López Mayor Peguerinos C-222 Moralzarzal 700 López C-222 Rupérez Ramblas León C-215 Becerril 700 Rupérez C-215 Santos Mayor Peguerinos C-305 Collado Mediano 350 Santos C-305 Sobre ese resultado se aplica selección usando el predicado ciudad-cliente = Peguerinos y finalmente aplicamos proyección sobre el atributo nombre-sucursal. La expresión es: Π nombre-sucursal (σciudad-cliente = Peguerinos (cliente cuenta impositor)) SELECT cuenta.nombre-sucursal FROM ( cuenta INNER JOIN impositor ON (cuenta.numero-cuenta = impositor.numero-cuenta)) INNER JOIN cliente ON (impositor.nombre-cliente = cliente.nombre-cliente) WHERE cliente.ciudad-cliente = 'Peguerinos'; Cuyo resultado es: nombre-sucursal Moralzarzal Collado Mediano La operación reunión natural es asociativa. Se puede llegar al mismo resultado empezando por: impositor cliente Y luego haciendo: cuenta (resultado de la operación anterior) SELECT cuenta.nombre-sucursal FROM ( impositor INNER JOIN cliente ON (impositor.nombre-cliente = cliente.nombre-cliente)) INNER JOIN cuenta ON (cuenta.numero-cuenta = impositor.numero-cuenta) WHERE (cliente.ciudad-cliente) = 'Peguerinos'; 16

17 OA.3. DIVISIÓN. La operación división denotada por, resulta adecuada para las consultas que incluyen la expresión "para todos". Notación: R S Formalmente: Sean R y S dos relaciones con esquemas (x1,...,xn,y1,...,ym) y (y1,...,yk) respectivamente. La operación R S da como resultado otra relación con esquema (x1,...,xn) y su contenido son las tuplas tomadas a partir de las de r(r) tales que su valor (x1,...,xn) está asociado en r(r) con TODOS los valores (y1,...,yk) que están en s(s). Ejemplo: Como se podrá apreciar, el atributo x con valor a2, es el único que está asociado en R con TODOS los valores (y1,...,yk) que están en S. Para obtener ese resultado, las operaciones del álgebra relacional son las siguientes: R S = x(r) - x(( x(r) S) R) x(r) ( x(r) S) (( x(r) S) R) x(( x(r) S) R) x(r) - x(( x(r) S) R) R.x a1 a2 a3 R.x a1 a1 a1 a2 a2 a2 a3 a3 a3 x S.y b1 b2 b3 b1 b2 b3 b1 b2 b3 R.x a1 a3 S.y b3 b2 R.x a1 a3 SELECT DISTINCT R.x FROM R WHERE R.y NOT IN ( SELECT R.y FROM S WHERE S.y NOT IN ( SELECT C.y FROM R AS C WHERE (C.x=R.x) ) ); R.x a2 17

18 Ejemplo: Sean R y S. Sea Q = R S Guía 3. ÁLGEBRA RELACIONAL. Como se podrá apreciar, el atributo y con valores b1 y b4, son los que están asociados en R con TODOS los valores (x1,...,xk) que están en S. Para obtener ese resultado, las operaciones del álgebra relacional son las siguientes: R S = y(r) - y(( y(r) S) R) y(r) ( y(r) S) (( y(r) S) R) y(( y(r) S) R) y(r) - y(( y(r) S) R) R.y b1 b2 b3 b4 x R.y b1 b1 b1 b2 b2 b2 b3 b3 b3 b4 b4 b4 S.x a1 a2 a3 a1 a2 a3 a1 a2 a3 a1 a2 a3 x R.y b2 b3 X S.x a2 a1 R.y b2 b3 X R.y b1 b4 X SELECT DISTINCT R.y FROM R WHERE R.x NOT IN ( SELECT R.x FROM S WHERE S.x NOT IN ( SELECT C.x FROM R AS C WHERE (C.y=R.y) ) ); 18

19 Ejemplo: Obtener el identificador (NSSE) de los empleados que trabajan en todos y cada uno de los proyectos de la empresa. R empleados_a_proyecto NSSE NUMP P P P P P P P P P P P P P P P P P-2 S proyecto NUMP P-1 P-2 P-3 P-4 = R S NSSE Para obtener ese resultado, las operaciones del álgebra relacional son las siguientes: R S = x(r) - x(( x(r) S) R) x(r) R.x NSSE x 19

20 ( x(r) S) x R.x S.y NSSE NUMP P P P P P P P P P P P P-4 x R.x S.y NSSE NUMP P P P P P P P P-4 x R.x S.y NSSE NUMP P P P P P P P P P P P P-4 (( x(r) S) R) x(( x(r) S) R) x(r) - x(( x(r) S) R) R.x S.y NSSE NUMP P P P P P P P P P P P P P P P P-4 x x R.x NSSE x R.x NSSE SELECT DISTINCT R.NSSE FROM empleados_a_proyecto AS R WHERE R.NUMP NOT IN ( SELECT R.NUMP FROM proyecto as S WHERE S.NUMP NOT IN ( SELECT C.NUMP FROM empleados_a_proyecto AS C WHERE (C.NSSE=R.NSSE) ) ); 20

21 OA.4. ASIGNACIÓN. En ocasiones resulta conveniente escribir una expresión del álgebra relacional por partes utilizando la asignación a una variable de relación temporal. La operación asignación, denotada por actúa de manera parecida a la asignación de los lenguajes de programación. Para ilustrar esta operación, considérese la definición de la división: R S = x(r) - x(( x(r) S) R) Se puede escribir R S como T1 x (R) T2 (T1 S) T3 x (T2 R) resultado T1 T3 La evaluación de una asignación no hace que se muestre ninguna relación al usuario. Por el contrario, el resultado de la expresión a la derecha de se asigna a la variable relación a la izquierda de. Esta variable relación puede utilizarse en expresiones posteriores. Otro ejemplo: r1 codigo, nombre(profesores) r2 nombre, pro_codigo(cursos) r3 r1 r1.codigo = r2.pro_codigo r2 r4 r1.nombre, r2.nombre(r3) 21

22 OPERACIONES DEL ÁLGEBRA RELACIONAL EXTENDIDA. OE.1. PROYECCIÓN GENERALIZADA. Esta operación amplía la operación proyección permitiendo que se utilicen funciones aritméticas en la lista de proyección. La operación proyección generalizada tiene la siguiente Notación: Π F1, F2,, Fn (E) donde E es cualquier expresión del álgebra relacional y F1, F2,, Fn son expresiones aritméticas que incluyen constantes y atributos en el esquema de E. Como caso especial la expresión aritmética puede ser simplemente un atributo o una constante. Por ejemplo, supóngase que se dispone de una relación informacion_credito, como se muestra a continuación, en la cual se indica el límite de crédito y el importe dispuesto hasta el momento presente (el saldo_credito de la cuenta). informacion_credito nombre-cliente limite saldo_credito Gomez Lopez Perez Santos Si se desea averiguar el importe disponible por cada persona, se puede escribir la expresión siguiente: Π nombre-cliente, (limite saldo_credito) (informacion_credito) El atributo resultante de la expresión limite saldo_credito no tiene un nombre. Se puede aplicar la operación renombramiento al resultado de la proyección generalizada para darle un nombre. Como conveniencia notacional, el renombramiento de atributos se puede combinar con la proyección generalizada como se ilustra a continuación: ρ (nom-cliente, credito_disponible) (Π nombre-cliente, (limite saldo_credito) (informacion_credito)) Al segundo atributo de esta proyección generalizada se le ha dado el nombre credito_disponible. SELECT nombre-cliente AS nom-cliente, (limite - saldo_credito) AS credito_disponible FROM informacion_credito; El resultado de aplicarla sobre la relacion informacion_credito es el siguiente: nom-cliente credito_disponible Gomez 1600 Lopez 0 Perez 250 Santos

23 OE.2. FUNCIONES DE AGREGACIÓN. Las funciones de agregación son funciones que toman una colección de valores y devuelven como resultado un único valor. Son las siguientes: COUNT: devuelve la cantidad de tuplas de una relación que cumplan una determinada condición. SUM: devuelve el valor correspondiente a la suma de valores de un atributo en un conjunto de tuplas. AVG: devuelve el valor promedio (average) de un atributo en un conjunto de tuplas. MIN: devuelve el valor mínimo de un atributo en un conjunto de tuplas. MAX: devuelve el valor máximo de un atributo en un conjunto de tuplas. La forma general de la operación de agregación G es la siguiente: Donde: E es cualquier expresión del álgebra relacional; G1, G2,, Gn G F1(A1), F2(A2),, Fm (Am) (E) G1, G2,, Gn constituye una lista de atributos que indican cómo se realiza la agrupación, cada Fi es una función de agregación, cada Ai es el nombre de un atributo. Ejemplos: Dada la relacion trabajo_por_horas que muestra los empleados a tiempo parcial, aplicaremos las diferentes funciones. trabajo_por_horas COUNT: nombre-empleado nombre-sucursal sueldo Cana Leganes 1500 Cascallar Navacerrada 5300 Catalan Leganes 1600 Diaz Centro 1300 Fernandez Navacerrada 1500 Gonzalez Centro 1500 Jimenez Centro 2500 Ribera Navacerrada 1300 Si se requiere saber cuántas tuplas en total tiene esa relación, debemos escribir G count() (trabajo_por_horas) SELECT count (*) FROM trabajo_por_horas; Hay casos en los que se deben borrar los valores repetidos antes de calcular una función de agregación. Si se desean borrar los valores repetidos hay que utilizar los mismos nombres de funciones que antes, con la cadena de texto «distinct» precedida de un guión añadida al final del nombre de la función (por ejemplo, countdistinct). Un ejemplo se da en la consulta "Averiguar el número de sucursales que aparecen en la relación trabajo_por_horas". En este caso, el nombre de cada sucursal sólo se cuenta una vez, independientemente del número de empleados que trabajen en la misma. Esta consulta se escribe de la manera siguiente: G count-distinct(nombre-sucursal) (trabajo_por_horas) SELECT count (trabajo_por_horas.nombre-sucursal) FROM ( SELECT DISTINCT nombre-sucursal FROM trabajo_por_horas ); 23

24 SUM: Si se requiere saber cuánto suman los sueldos de los empleados a tiempo parcial (suma de todos los valores del atributo sueldo en la relación trabajo_por_horas ), debemos escribir: SELECT sum(sueldo) FROM trabajo_por_horas; G sum(sueldo) (trabajo_por_horas) Ahora bien, si se desea hallar la suma total de sueldos de todos los empleados a tiempo parcial en cada sucursal del banco por separado, en lugar de hallar la suma de sueldos de todo el banco. Para ello hay que dividir la relación trabajo-por-horas en grupos basados en la sucursal y aplicar la función de agregación a cada grupo. nombre-sucursal G sum(sueldo) (trabajo_por_horas) SELECT nombre-sucursal, sum(sueldo) FROM trabajo_por_horas GROUP BY nombre-sucursal; El resultado es este: nombre-sucursal suma sueldos Centro 5300 Leganes 3100 Navacerrada 8100 AVG: Si se requiere saber el promedio de los sueldos de los empleados a tiempo parcial (promedio de todos los valores del atributo sueldo en la relación trabajo_por_horas ), debemos escribir: SELECT avg(sueldo) FROM trabajo_por_horas; G avg(sueldo) (trabajo_por_horas) Ahora bien, si se desea hallar el promedio de sueldos de los empleados a tiempo parcial en cada sucursal del banco por separado, en lugar de hallar el promedio de sueldos de todo el banco. Para ello hay que dividir la relación trabajo-por-horas en grupos basados en la sucursal y aplicar la función de agregación a cada grupo. nombre-sucursal G avg(sueldo) (trabajo_por_horas) SELECT nombre-sucursal, avg(sueldo) FROM trabajo_por_horas GROUP BY nombre-sucursal; El resultado es este: nombre-sucursal promedio sueldos Centro Leganes 1550 Navacerrada

25 MIN: Si se requiere el sueldo más bajo de los empleados a tiempo parcial (el menor de todos los valores del atributo sueldo en la relación trabajo_por_horas ), debemos escribir: SELECT min(sueldo) FROM trabajo_por_horas; G min(sueldo) (trabajo_por_horas) Ahora bien, si se desea hallar el sueldo más bajo de los empleados a tiempo parcial en cada sucursal del banco por separado, en lugar de hallar el sueldo más bajo de todo el banco. Para ello hay que dividir la relación trabajo-por-horas en grupos basados en la sucursal y aplicar la función de agregación a cada grupo. nombre-sucursal G min(sueldo) (trabajo_por_horas) SELECT nombre-sucursal, min(sueldo) FROM trabajo_por_horas GROUP BY nombre-sucursal; El resultado es este: nombre-sucursal min sueldo Centro 1300 Leganes 1500 Navacerrada 1300 MAX: Si se requiere el sueldo más alto de los empleados a tiempo parcial (el mayor de todos los valores del atributo sueldo en la relación trabajo_por_horas ), debemos escribir: SELECT max(sueldo) FROM trabajo_por_horas; G max(sueldo) (trabajo_por_horas) Ahora bien, si se desea hallar el sueldo más alto de los empleados a tiempo parcial en cada sucursal del banco por separado, en lugar de hallar el sueldo más alto de todo el banco. Para ello hay que dividir la relación trabajo-por-horas en grupos basados en la sucursal y aplicar la función de agregación a cada grupo. nombre-sucursal G max(sueldo) (trabajo_por_horas) SELECT nombre-sucursal, max(sueldo) FROM trabajo_por_horas GROUP BY nombre-sucursal; El resultado es este: nombre-sucursal max sueldo Centro 2500 Leganes 1600 Navacerrada

26 Ejemplo adicional: Dada la siguiente tabla pedidos : Guía 3. ÁLGEBRA RELACIONAL. pedidos id pedido cliente precio 1 p1 RUIZ p2 PEREZ p3 GOMEZ p4 RUIZ p5 GOMEZ 60 Y se requiere saber cuál cliente tiene pedidos cuya suma de precio sea mayor a 500. La expresión de álgebra relacional pertinente es: cliente G sum(precio)>500 (pedidos) Y el resultado será: cliente sum(precio) RUIZ 590 Se puede ver que solamente el cliente RUIZ suma en sus valores para precio = 590, un valor superior a 500. El cliente GOMEZ suma en sus valores para la columna precio = 310, que también es menor de 500, y por tanto, no aparece en la tabla resultante. El cliente PEREZ tiene un valor de 300, y tampoco aparece en la tabla resultante, porque es menor de 500. PLUS: La función SQL HAVING. La función HAVING se utiliza para incluir condiciones con alguna función SQL del tipo SUM, MAX, etc. Como la cláusula WHERE no se puede utilizar con funciones SQL del tipo SUM, MAX, entonces utilizamos en su lugar, HAVING. Su sintaxis es la siguiente: SELECT columna1, SUM(columna2) FROM tabla GROUP BY columna1 HAVING SUM(columna2) < valor Y para el ejemplo: SELECT cliente, SUM(precio) FROM pedidos GROUP BY cliente HAVING SUM(precio) > PLUS: Mejora de la implementación en SQL para la operación división. (Tomado de: ) Retomaremos los tres ejemplos y se mostrarán las nuevas implementaciones: Este era el primer ejemplo: SELECT x FROM R WHERE y IN ( SELECT y FROM S ) GROUP BY x HAVING COUNT(*) = (SELECT COUNT (*) FROM S); 26

27 Este era el segundo ejemplo: Guía 3. ÁLGEBRA RELACIONAL. SELECT y FROM R WHERE x IN (SELECT x FROM S) GROUP BY y HAVING COUNT(*) = (SELECT COUNT (*) FROM S); Y este era el último ejemplo: obtener el identificador (NSSE) de los empleados que trabajan en todos y cada uno de los proyectos de la empresa. R empleados_a_proyecto NSSE NUMP P P P P P P P P P P P P P P P P P-2 S proyecto NUMP nombreproyecto P-1 Proyecto_1 P-2 Proyecto_2 P-3 Proyecto_3 P-4 Proyecto_4 = R S NSSE SELECT R.NSSE FROM empleados_a_proyecto AS R WHERE R.NUMP IN ( SELECT NUMP FROM proyecto ) GROUP BY R.NSSE HAVING COUNT(*) = ( SELECT COUNT (*) FROM proyecto ); 27

28 OE.3. REUNIÓN EXTERNA. Esta operación (también llamada outer join) permite preservar como resultado del Join todas las tuplas en R, o en S, o aquellas en ambas relaciones independientemente de si tienen tuplas conectadas en la otra relación, es decir, realiza el join pero en caso de no existir correspondencia para un valor determinado genera un valor nulo. Se revisarán los diferentes casos, usando como ejemplo las siguientes relaciones (con datos seleccionados): estudiantes tutores estudiante_id estudiante_nombre tutor_id tutor_id tutor_nombre 1 Estudiante_ Tutor_01 2 Estudiante_ Tutor_03 4 Estudiante_ Tutor_05 5 Estudiante_ Estudiante_ Estudiante_ Estudiante_ OE.3.1. REUNIÓN EXTERNA POR LA IZQUIERDA. Esta operación (también llamada left outer join) reproduce todos los registros de la Tabla estudiantes (tabla izquierda [1]), con los registros completos (donde se pueda) de la Tabla tutores (tabla derecha [2]). Si no hay coincidencias en el registro, el lado derecho contendrá null. Notación general: R <condicion> S Para nuestro ejemplo: tuplas de Tabla 1 que NO están en Tabla 2 5 tuplas de Tabla 1 que SÍ están en Tabla 2 1 tupla de Tabla 2 que NO está en Tabla 1 R X <estudiantes.tutor_id= tutores.tutor_id> S Cuyo resultado es: estudiante_nombre tutor_nombre Estudiante_02 NULL Estudiante_04 NULL Estudiante_01 Tutor_01 Estudiante_09 Tutor_01 Estudiante_05 Tutor_03 Estudiante_07 Tutor_03 Estudiante_10 Tutor_03 SELECT E.estudiante_nombre, T.tutor_nombre FROM estudiantes AS E LEFT JOIN tutores AS T ON E.tutor_id = T.tutor_id ORDER BY T.tutor_nombre, E.estudiante_nombre; 28

29 Ahora bien, si se plantea un caso como el que se muestra a continuación: 1 2 Solo tendría en cuenta las 2 tuplas de Tabla 1 que NO están en Tabla 2, y eso es una DIFERENCIA. Expr1 R <estudiantes.tutor_id= tutores.tutor_id>s 2 tuplas de Tabla 1 que NO están en Tabla 2 5 tuplas de Tabla 1 que SÍ están en Tabla 2 1 tupla de Tabla 2 que NO está en Tabla 1 σexpr1.tutor_nombre = NULL (Expr1) x Cuyo resultado es: estudiante_nombre tutor_nombre Estudiante_02 Estudiante_04 NULL NULL Que sin embargo, se puede implementar de la siguiente manera (fiel al álgebra relacional): SELECT * FROM (SELECT E.estudiante_nombre, T.tutor_nombre FROM estudiantes AS E LEFT JOIN tutores AS T ON E.tutor_id = T.tutor_id) AS Expr1 WHERE Expr1.tutor_nombre is NULL; O de esta otra: SELECT E.estudiante_nombre, T.tutor_nombre FROM estudiantes AS E LEFT JOIN tutores AS T ON E.tutor_id = T.tutor_id WHERE T.tutor_nombre is NULL; OE.3.2. REUNIÓN EXTERNA POR LA DERECHA. Esta operación (también llamada right outer join) reproduce todos los registros de la Tabla tutores (tabla derecha [2]), con los registros completos (donde se pueda) de la Tabla estudiantes (tabla izquierda [1]). Si no hay coincidencias en el registro, el lado izquierdo contendrá null. Notación general: R <condicion> S Para nuestro ejemplo: tuplas de Tabla 1 que NO están en Tabla 2 5 tuplas de Tabla 1 que SÍ están en Tabla 2 1 tupla de Tabla 2 que NO está en Tabla 1 R X <estudiantes.tutor_id= tutores.tutor_id> S Cuyo resultado es: estudiante_nombre tutor_nombre NULL Estudiante_01 Estudiante_05 Estudiante_07 Estudiante_09 Estudiante_10 Tutor_05 Tutor_01 Tutor_03 Tutor_03 Tutor_01 Tutor_03 SELECT E.estudiante_nombre, T.tutor_nombre FROM estudiantes AS E RIGHT JOIN tutores AS T ON E.tutor_id = T.tutor_id ORDER BY E.estudiante_nombre; 29

30 Ahora bien, si se plantea un caso como el que se muestra a continuación: tuplas de Tabla 1 que NO están en Tabla 2 5 tuplas de Tabla 1 que SÍ están en Tabla 2 1 tupla de Tabla 2 que NO está en Tabla 1 Solo tendría en cuenta la tupla de Tabla 2 que NO está en Tabla 1, y eso es una DIFERENCIA. Expr1 R <estudiantes.tutor_id= tutores.tutor_id>s σexpr1.estudiante_nombre = NULL (Expr1) x Cuyo resultado es: estudiante_nombre tutor_nombre NULL Tutor_05 Que sin embargo, se puede implementar de la siguiente manera (fiel al álgebra relacional): SELECT * FROM (SELECT E.estudiante_nombre, T.tutor_nombre FROM estudiantes AS E RIGHT JOIN tutores AS T ON E.tutor_id = T.tutor_id) AS Expr1 WHERE Expr1.estudiante_nombre is NULL; O de esta otra: SELECT E.estudiante_nombre, T.tutor_nombre FROM estudiantes AS E RIGHT JOIN tutores AS T ON E.tutor_id = T.tutor_id WHERE E.estudiante_nombre is NULL; OE.3.3. REUNIÓN EXTERNA COMPLETA. Esta operación (también llamada full outer join) produce el conjunto de todos los recursos de la Tabla estudiantes (tabla izquierda [1]) y de la Tabla tutores (tabla derecha [2]), haciendo coincidir los registros de ambos lados si están disponibles. Si no hay coincidencias, el lado que falte contendrá null. Notación general: R <condicion> S Para nuestro ejemplo: tuplas de Tabla 1 que NO están en Tabla 2 5 tuplas de Tabla 1 que SÍ están en Tabla 2 1 tupla de Tabla 2 que NO está en Tabla 1 R x <estudiantes.tutor_id= tutores.tutor_id> S Cuyo resultado es: estudiante_nombre tutor_nombre NULL Estudiante_01 Estudiante_02 Estudiante_04 Estudiante_05 Estudiante_07 Estudiante_09 Estudiante_10 Tutor_05 Tutor_01 NULL NULL Tutor_03 Tutor_03 Tutor_01 Tutor_03 La operación full outer join es equivalente a la unión de left outer join con right outer join: SELECT E.estudiante_nombre, T.tutor_nombre FROM estudiantes AS E LEFT JOIN tutores AS T ON E.tutor_id = T.tutor_id UNION SELECT E.estudiante_nombre, T.tutor_nombre FROM estudiantes AS E RIGHT JOIN tutores AS T ON E.tutor_id = T.tutor_id; 30

31 Ahora bien, si se plantea un caso como el que se muestra a continuación: Tendría en cuenta las 2 tuplas de Tabla 1 que NO están en Tabla 2, y la tupla de Tabla 2 que NO está en Tabla 1 y eso se denomina DIFERENCIA SIMÉTRICA. Expr1 R <estudiantes.tutor_id= tutores.tutor_id> S 2 tuplas de Tabla 1 que NO están en Tabla 2 5 tuplas de Tabla 1 que SÍ están en Tabla 2 1 tupla de Tabla 2 que NO está en Tabla 1 σ (Expr1.estudiante_nombre = NULL) OR (Expr1.tutor_nombre = NULL) (Expr1) x Cuyo resultado es: estudiante_nombre tutor_nombre NULL Estudiante_02 Estudiante_04 Tutor_05 NULL NULL Que se puede implementar de la siguiente manera (fiel al álgebra relacional): SELECT * FROM ( SELECT E.estudiante_nombre, T.tutor_nombre FROM estudiantes AS E LEFT JOIN tutores AS T ON E.tutor_id = T.tutor_id UNION ) AS Expr1 SELECT E.estudiante_nombre, T.tutor_nombre FROM estudiantes AS E RIGHT JOIN tutores AS T ON E.tutor_id = T.tutor_id WHERE Expr1.estudiante_nombre is NULL OR Expr1.tutor_nombre is NULL; FIN DEL DOCUMENTO 31

Algebra Relacional Algebra Relacional

Algebra Relacional Algebra Relacional Álgebra relacional Conjunto de operaciones usadas para manipular relaciones. Estas operaciones toman relaciones como operandos y regresan relaciones que a su vez pueden ser manipuladas. MR es cerrado.

Más detalles

Operador Restricción

Operador Restricción Algebra Relacional Conjunto de operadores que opera sobre relaciones Cada uno de estos operadores toma una o dos relaciones como entrada y produce una nueva relación como salida. Las relaciones originales

Más detalles

EL MODELO DE DATOS RELACIONAL

EL MODELO DE DATOS RELACIONAL EL MODELO DE DATOS RELACIONAL El modelo de datos relacional se ha establecido actualmente como el principal modelo de datos para las aplicaciones de procesamiento de datos, esto debido a su simplicidad,

Más detalles

SQL. Amparo López Gaona. México, D.F. Noviembre 2003

SQL. Amparo López Gaona. México, D.F. Noviembre 2003 Amparo López Gaona México, D.F. Noviembre 2003 Introducción El lenguaje SQL (Structured Query Language) es el lenguaje estándar para trabajo con bases de datos relacionales. Permite la definición, acceso

Más detalles

Operadores. Además se pueden emplear en sentencias SET.

Operadores. Además se pueden emplear en sentencias SET. Operadores MySQL dispone de multitud de operadores diferentes para cada uno de los tipos de columna. Esos operadores se utilizan para construir expresiones que se usan en cláusulas ORDER BY y HAVING de

Más detalles

Algebra Relacional. Bases de Datos 2 - Tecnologo de Informatica. BD2 - Algebra Relacoinal

Algebra Relacional. Bases de Datos 2 - Tecnologo de Informatica. BD2 - Algebra Relacoinal Algebra Relacional Bases de Datos 2 - Tecnologo de Informatica Outline 1 Introducción Vision general 2 Operadores Operaciones relacionales unarias Operaciones de la teoría de conjuntos Operadores derivados

Más detalles

Bases de datos 1. Teórico: Algebra Relacional

Bases de datos 1. Teórico: Algebra Relacional Bases de datos 1 Teórico: Algebra Relacional ALGEBRA RELACIONAL Conjunto de operadores para consultar BDs Relacionales. Operaciones relacionales unarias: Selección y Proyección Operaciones de álgebra relacional

Más detalles

Unidad 3. Álgebra Relacional y Cálculo Relacional

Unidad 3. Álgebra Relacional y Cálculo Relacional Unidad 3 Álgebra Relacional y Cálculo Relacional Álgebra Relacional Definición de Álgebra Álgebra es un sistema matemático que está formado por: Operandos. Valores o variables con los cuáles se pueden

Más detalles

OPERACIONES FUNDAMENTALES DEL ÁLGEBRA RELACIONAL. Bases de Datos Ingeniería de Sistemas y Computación Universidad Nacional de Colombia 2007

OPERACIONES FUNDAMENTALES DEL ÁLGEBRA RELACIONAL. Bases de Datos Ingeniería de Sistemas y Computación Universidad Nacional de Colombia 2007 OPERACIONES FUNDAMENTALES DEL ÁLGEBRA RELACIONAL Bases de Datos Ingeniería de Sistemas y Computación Universidad Nacional de Colombia 2007 Álgebra Relacional Álgebra Relacional El álgebra relacional es

Más detalles

Algebra Relacional. Gestión y Modelación de Datos

Algebra Relacional. Gestión y Modelación de Datos Algebra Relacional Gestión y Modelación de Datos Algebra Relacional Lenguaje de consulta Procedimental (énfasis en el como ) Consta de: Operandos: relaciones Operadores: aplicados sobre relaciones Cerrada:

Más detalles

Modelo Relacional. Lenguajes de manejo de datos (DMLs) Bibliografía: Fundamentos de bases de datos Korth, Silberschatz

Modelo Relacional. Lenguajes de manejo de datos (DMLs) Bibliografía: Fundamentos de bases de datos Korth, Silberschatz Modelo Relacional Lenguajes de manejo de datos (DMLs) Bibliografía: Fundamentos de bases de datos Korth, Silberschatz Lenguajes de manejo de datos DML es una notación para expresar consultas, actualización,

Más detalles

Bases de Datos. Álgebra Relacional

Bases de Datos. Álgebra Relacional Álgebra Relacional Álgebra Relacional Lenguajes de acceso a BD Álgebra Relacional Lenguaje procedimental (se indica qué obtener y cómo obtenerlo) Lenguajes de Usuario SQL (Structured Query Language), basado

Más detalles

Uso de SQL. "WHERE id = " + cuentas[i].getid() o bien ResulSet r =s.executequery("select nombre FROM alumno" + "WHERE id = " + cuentas[i].

Uso de SQL. WHERE id =  + cuentas[i].getid() o bien ResulSet r =s.executequery(select nombre FROM alumno + WHERE id =  + cuentas[i]. Introducción El lenguaje (Structured Query Language) es el lenguaje estándar para trabajo con bases de datos relacionales. Permite la definición, acceso y control de datos en una base de datos relacional.

Más detalles

Tema 5. Otros lenguajes de consulta relacionales

Tema 5. Otros lenguajes de consulta relacionales Tema 5. Otros lenguajes de consulta relacionales Juan Ignacio Rodríguez de León Resumen Estudio de otros lenguajes relacionales de consulta orientados a usuarios. QED (Query by example). QUEL. (Lenguaje

Más detalles

Álgebra Relacional. Carlos A. Olarte BDI

Álgebra Relacional. Carlos A. Olarte BDI Carlos A. Olarte (carlosolarte@puj.edu.co) BDI Contenido 1 Operaciones Fundamentales 2 Operaciones Adicionales Operaciones Fundamentales Conjunto de operaciones que toman como argumentos relaciones y retornan

Más detalles

SELECT listadecampos FROM nombredetablas WHERE condicionesdebúsqueda;

SELECT listadecampos FROM nombredetablas WHERE condicionesdebúsqueda; SQL El Lenguaje de Consulta Estructurado (SQL) se usa para consultar, actualizar y administrar bases de datos relacionales, tales como las de Microsoft Access. Al crear una consulta en la ventana Consulta,

Más detalles

BASES DE DATOS (IG18 Semipresencial) El Modelo Relacional Algebra Relacional y SQL

BASES DE DATOS (IG18 Semipresencial) El Modelo Relacional Algebra Relacional y SQL BASES DE DATOS (IG18 Semipresencial) El Modelo Relacional Algebra Relacional y SQL Lledó Museros / Ismael Sanz museros@icc.uji.es / isanz@icc.uji.es 1de 60 Índice 1. Introducción 2. Operadores del Álgebra

Más detalles

Bases de Datos Distribuidas -Antecedentes

Bases de Datos Distribuidas -Antecedentes Bases de Datos Distribuidas -Antecedentes M.C. Fernando Pech May Instituto Tecnológico Superior de los Ríos auxtecomp@gmail.com Materia: Distributed Database Systems Enero, 2012 Fernando Pech May Bases

Más detalles

SQL. Dra. Amparo López Gaona () Posgrado en Ciencia e Ingeniería de la Compu. Abril 2012 / 14

SQL. Dra. Amparo López Gaona () Posgrado en Ciencia e Ingeniería de la Compu. Abril 2012 / 14 Dra. Amparo López Gaona tación, UNAM Abril 2012 Introducción El lenguaje (Structured Query Language) es el lenguaje estándar para trabajo con bases de datos relacionales. Permite la definición, acceso

Más detalles

SQL. Carlos A. Olarte BDI

SQL. Carlos A. Olarte BDI Carlos A. Olarte (carlosolarte@puj.edu.co) BDI Outline 1 Introducción 2 Select... from... where 3 Renombramiento 4 Ordenamiento 5 Reuniones 6 Operaciones sobre conjuntos 7 Funciones de Agregación 8 Subconsultas

Más detalles

Agrupamiento de registros. Elaboración de claúsulas avanzadas de selección. 31/12/2011. Unidad 9

Agrupamiento de registros. Elaboración de claúsulas avanzadas de selección. 31/12/2011. Unidad 9 Agrupamiento de registros Unidad 9 Elaboración de claúsulas avanzadas de selección. Un agrupamiento es el tratamiento único de varios registros que poseen un mismo valor de campo. Al realizar un agrupamiento,

Más detalles

1. DML. Las consultas de resumen

1. DML. Las consultas de resumen 1.1 Introducción 1. DML. Las consultas de resumen Una de las funcionalidades de la sentencia SELECT es el permitir obtener resúmenes de los datos contenidos en las columnas de las tablas. Para poder llevarlo

Más detalles

Consulta y manipulación de datos. El lenguaje SQL

Consulta y manipulación de datos. El lenguaje SQL Bloque 2 Consulta y manipulación de datos. El lenguaje SQL Como ya hemos visto en el bloque anterior, una base de datos relacional consiste en un conjunto de tablas, a cada una de las cuales se le asigna

Más detalles

Cátedra de Base de Datos

Cátedra de Base de Datos Cátedra de Base de Datos Facultad de Ciencias Exactas y Tecnología Universidad Nacional de Tucumán Ciclo Lectivo 2018 Programa Analítico de la Materia Unidad 4: Álgebra relacional Álgebra relacional. Sintaxis

Más detalles

Tema 5 Algebra Relacional

Tema 5 Algebra Relacional Asignatura de Bases de Datos Tema 5 Algebra Relacional Pedro Pablo Alarcón Cavero Departamento de O.E.I. Escuela Universitaria de Informática Universidad Politécnica de Madrid 1 Introducción Álgebra Relacional

Más detalles

Diseño de Bases de Datos Álgebra Relacional

Diseño de Bases de Datos Álgebra Relacional Diseño de Bases de Datos Álgebra Relacional Alonso Inostrosa Psijas USACH Alonso Inostrosa Psijas 1 / 46 Contenidos 1 Operaciones Básicas de Álgebra Relacional La Operación Select La Operación Proyección

Más detalles

Tutorial de MySQL Lección IV Funciones de Agregación

Tutorial de MySQL Lección IV Funciones de Agregación 1 Universidad del Quindío - Ingeniería de Sistemas - Leonardo Hernández R. leonardohernandez@telesat.com.co www.geocities.com/leoher314 Mar.3/2002, Sep.14/2002, Mar.17/2003 Tutorial de MySQL -----------------------

Más detalles

1. DML. Las consultas multitabla

1. DML. Las consultas multitabla 1.1 Introducción 1. DML. Las consultas multitabla Hasta ahora hemos visto consultas que obtienen los datos de una sola tabla, en este tema veremos cómo obtener datos de diferentes tablas en una sola instrucción

Más detalles

Conceptos básicos de álgebra relacional

Conceptos básicos de álgebra relacional PROGRAMA DE FORMACIÓN UNIDAD DE APRENDIZAJE ACTIVIDAD OBJETIVOS IDENTIFICACIÓN DE LA ACTIVIDAD PEDAGÓGICA OFIMATICA, WEB Y DESARROLLO DE SISTEMAS II-A GESTORES DE BASES DE DATOS ALGEBRA RELACIONAL APLICAR

Más detalles

Capítulo 4. Realización de consultas

Capítulo 4. Realización de consultas Capítulo 4 Realización de consultas ÍNDICE CAPÍTULO 4 Introducción sentencia SELECT Base de datos de ejemplo Consultas básicas Cláusula ORDER BY Cláusula DISTINCT Cláusula LIMIT Expresiones Funciones propias

Más detalles

PARTE I Desarrollen las siguientes cuestiones (concepto, ejemplos, etc):

PARTE I Desarrollen las siguientes cuestiones (concepto, ejemplos, etc): PARTE I Desarrollen las siguientes cuestiones (concepto, ejemplos, etc): 1. Como realizar la consulta entre múltiples tablas Generalmente el poder de la sentencia SELECT se basa en su capacidad de poder

Más detalles

álgebra relacional 2

álgebra relacional 2 16/04/2012 1 La división es un operador "extraño" dentro del álgebra relacional por su especificidad. Suponemos que su inclusión en AR tiene que ver con el "para todos" ( x F) del cálculo relacional puesto

Más detalles

Modelamiento y Diseño de Base de Datos

Modelamiento y Diseño de Base de Datos Modelamiento y Diseño de Base de Datos Combinación de tablas Objetivos: Utiliza sentencias para unir los datos de diferentes tablas. Introducción Una vez se tienen creada la base de datos y hemos creado

Más detalles

AR - Marco General. Álgebra Relacional AR - SELECT. AR - SELECT - Propiedades. 19/Agosto/2016

AR - Marco General. Álgebra Relacional AR - SELECT. AR - SELECT - Propiedades. 19/Agosto/2016 AR - Marco General Marco General 19/Agosto/2016. Lenguaje formal utilizado en el modelo relacional Permite a usuarios especificar consultas sobre instancias de relaciones El resultado de una consulta es

Más detalles

Concepto de modelo de datos Un modelo de datos es un conjunto de:

Concepto de modelo de datos Un modelo de datos es un conjunto de: oncepto de modelo de datos Un modelo de datos es un conjunto de: onceptos. Reglas. onvenciones. Que nos permiten: Describir. Manipular. Los datos de un cierto mundo real que deseamos almacenar. Adquisición

Más detalles

El Modelo Relacional - Dinámica-

El Modelo Relacional - Dinámica- El Modelo Relacional - Dinámica- Diseño de Bases de Datos y Seguridad de la Información www.kybele.es Índice 1. Introducción 2. Álgebra Relacional 2.1. Operación de Asignación y Renombrado de Atributos

Más detalles

TEMA 5: MODIFICACIÓN DE LA BASE DE DATOS EN SQL

TEMA 5: MODIFICACIÓN DE LA BASE DE DATOS EN SQL TEMA 5: MODIFICACIÓN DE LA BASE DE DATOS EN SQL 5.6 SUBCONSULTAS ANIDADAS SQl proporciona un mecanismo para las sub consultas anidadas. Una sub consulta es una expresión SQL de la forma select-from-where

Más detalles

Algebra Relacional Curso Bases de Datos

Algebra Relacional Curso Bases de Datos Algebra Relacional Curso Bases de Datos Por Elizabeth León Guzmán, Ph.D. Profesora Ingeniería de Sistemas Grupo de Investigación MIDAS Introducción Un modelo de datos incluye conceptos para definir la

Más detalles

El Modelo Relacional: Dinámica y Álgebra Relacional. El Modelo Relacional Tema 8

El Modelo Relacional: Dinámica y Álgebra Relacional. El Modelo Relacional Tema 8 El Modelo Relacional: Dinámica y Álgebra Relacional El Modelo Relacional Tema 8 Índice 1. Introducción 2. Álgebra Relacional 1. Operadores de Asignación y Renombrado de Atributos 2. Operadores Primitivos

Más detalles

Conjunto de operadores para consultar BD-Rs. Define conjunto de ops estándar en BD-Rs. Operadores que reciben relaciones y devuelven relaciones:

Conjunto de operadores para consultar BD-Rs. Define conjunto de ops estándar en BD-Rs. Operadores que reciben relaciones y devuelven relaciones: Algebra Relacional Visión General: Conjunto de operadores para consultar BD-Rs. Define conjunto de ops estándar en BD-Rs. Operadores que reciben relaciones y devuelven relaciones: Sobre conjuntos de tuplas:

Más detalles

Operaciones en el Modelo Relacional. Relacional. Relacional. Índice. Lenguajes de Consulta

Operaciones en el Modelo Relacional. Relacional. Relacional. Índice. Lenguajes de Consulta Operaciones en el Modelo Relacional Bases de Datos Ingeniería a Técnica T en Informática de Sistemas El interés de los usuarios de las bases de datos se suele centrar en realizar consultas (contestar a

Más detalles

Catedra de Base de Datos

Catedra de Base de Datos Catedra de Base de Datos Facultad de Ciencias Exactas y Tecnología Universidad Nacional de Tucumán Ciclo Lec)vo 2017 Programa Analítico de la Materia Unidad 4: Álgebra relacional Álgebra relacional. Sintaxis

Más detalles

Tema 3. El modelo Relacional

Tema 3. El modelo Relacional Tema 3. El modelo Relacional Juan Ignacio Rodríguez de León Resumen Presenta el modelo entidad-relación. Visión de alto nivel de las cuestiones referentes a diseño de bases de datos y los problemas encontrados

Más detalles

Consultas SQL INNER JOIN

Consultas SQL INNER JOIN Consultas SQL INNER JOIN Inner join sólo produce los registros que coinciden en las dos tablas A y B. 2. INNER JOIN TablaB Full outer join produce el conjunto de todos los registros en las tablas A y B,

Más detalles

TEMA: CONSULTAS (ALGEBRA RELACIONAL Y SQL)

TEMA: CONSULTAS (ALGEBRA RELACIONAL Y SQL) TEMA: CONSULTAS (ALGEBRA RELACIONAL Y SQL) 1.- OBJETIVOS Al finalizar la práctica el estudiante estará en condiciones de: - Identificar las equivalencias del algebra relacional en SQL - Utilizar funciones

Más detalles

Introducción 1 Recuperación de Datos mediante la Sentencia SQL SELECT

Introducción 1 Recuperación de Datos mediante la Sentencia SQL SELECT Introducción Objetivos I-2 Objetivos del Curso I-3 Oracle11g - 12cI-5 Oracle Database 11g - 12cI-6 Oracle Application Server 11g - 12cI-7 Oracle Enterprise Manager 11g - 12cGrid Control I-8 Sistema de

Más detalles

SQL, Consultas. Son Importantes las Consultas? Cuál es el Resultado de SELECT? Andrés Moreno S.

SQL, Consultas. Son Importantes las Consultas? Cuál es el Resultado de SELECT? Andrés Moreno S. SQL, Consultas Andrés Moreno S. 1 Son Importantes las Consultas? Una cosa es guardar la información en forma estructurada y ordenada. Pero el utilizar la información y entender su relevancia son la clave

Más detalles

SQL: Lenguaje de Interrogación Estructurado

SQL: Lenguaje de Interrogación Estructurado SQL: Lenguaje de Interrogación Estructurado SQL Es el lenguaje para Bases de Datos Relacionales más usado Es un lenguaje declarativo: QUÉ no CÓMO El núcleo fundamental se basa en el Algebra Relacional,

Más detalles

SQL DML Select. Ges$ón y Modelación de Datos. María Constanza Pabón

SQL DML Select. Ges$ón y Modelación de Datos. María Constanza Pabón SQL DML Select Ges$ón y Modelación de Datos María Constanza Pabón mcpabon@javerianacali.edu.co SQL - DML Sentencias: INSERT UPDATE DELETE SELECT SQL - DML Query (consulta): proceso de recuperar datos de

Más detalles

Unidad 5 Algebra Relacional

Unidad 5 Algebra Relacional QL Unidad 5 Algebra Relacional Lenguaje de Consultas (Query Language). Parte de DML. Lenguajes de Consulta Formales Base de los QL Comerciales (SQL el más popular, SQL está orientado al usuario). Sirven

Más detalles

SQL Avanzado. José Muñoz Jimeno Febrero 2015

SQL Avanzado. José Muñoz Jimeno Febrero 2015 SQL Avanzado José Muñoz Jimeno Febrero 2015 Control de cambios Versión Fecha Comentarios 1.0 13/02/2015 Primera versión para el curso Introducción a las bases de datos con MySQL en el COITCV La última

Más detalles

4. Algebra relacional

4. Algebra relacional Tema 7: Modelo Relacional. Dinámica 4. Algebra relacional Operaciones unarias Operaciones de conjuntos Operaciones de combinación Operación de división Operación de agregación y agrupamiento Tema 7: Dinámica

Más detalles

Álgebra Relacional (1 de 2)

Álgebra Relacional (1 de 2) Álgebra Relacional (1 de 2) T4.2006-07 Dpto. Lenguajes y Sistemas Informáticos Universidad de Alicante Qué es el AR? Para qué sirve? Los que utiliza AR. Cómo se adaptan otros ya conocidos Cómo se usan

Más detalles

Usuarios de la base de datos

Usuarios de la base de datos Usuarios de la base de datos Un objetivo principal de un sistema de bases de datos es recuperar información y almacenar nueva información en la base de datos. Las personas que trabajan con una base de

Más detalles

Tema 4. TEMA 4. El lenguaje de consulta SQL

Tema 4. TEMA 4. El lenguaje de consulta SQL Tema 4 TEMA 4. El lenguaje de consulta SQL Juan M Camarillo. Dpto. de Geografía Física y AGR Juan A. Ortega. Dpto. de Lenguajes y Sistemas Informáticos Jesús Torres. Dpto. de Lenguajes y Sistemas Informáticos

Más detalles

TEMA 6.- LENGUAJES DE CONSULTA FORMALES.

TEMA 6.- LENGUAJES DE CONSULTA FORMALES. TEMA 6.- LENGUAJES DE CONSULTA FORMALES. Introducción. El Algebra Relacional. 1. Introducción. - Un lenguaje de consulta es un lenguaje con el que el usuario solicita información de la base de datos: se

Más detalles

Bases de Datos Relacionales III

Bases de Datos Relacionales III Introducción a la Computación Bases de Datos Relacionales III Esteban E. Mocskos (emocskos@dc.uba.ar) Facultad de Ciencias Exactas y Naturales, UBA CONICET 11/06/2013 E. Mocskos (UBA CONICET) Clase 15:

Más detalles

Maestría en Bioinformática. Bases de Datos y Sistemas de Información SQL: SELECT. Ing. Alfonso Vicente, PMP

Maestría en Bioinformática. Bases de Datos y Sistemas de Información SQL: SELECT. Ing. Alfonso Vicente, PMP Maestría en Bioinformática Bases de Datos y Sistemas de Información SQL: SELECT Ing. Alfonso Vicente, PMP alfonso.vicente@logos.com.uy Agenda SELECT en una tabla Joins Proyección y selección DISTINCT Funciones

Más detalles

TEMA 4.. CONSULTA DE DATOS I.

TEMA 4.. CONSULTA DE DATOS I. TEMA 4.. CONSULTA DE DATOS I. 4.1 El lenguaje DML (Lenguaje de manipulación de datos) Las sentencias DML(Data Manipulation Language) del lenguaje SQL (Structured Query Language o Lenguaje de peticiones

Más detalles

Manual de Sentencias Básicas en SQL

Manual de Sentencias Básicas en SQL Manual de Sentencias Básicas en SQL Pues hoy que he estado enredando un rato con MySQl, y me he acordado de aquellos comienzos en los que tenía que volver a mis antiguos apuntes para lograr entender las

Más detalles

NORMAS DE DESARROLLO DE APLICACIONES PARA LA

NORMAS DE DESARROLLO DE APLICACIONES PARA LA DIRECCIÓN GENERAL MINISTERIO DE HACIENDA Y ADMINISTRACIONES PUBLICAS DE ORDENACIÓN DEL JUEGO S U B D NORMAS DE DESARROLLO DE APLICACIONES PARA LA DIRECCIÓN GENERAL DE ORDENACIÓN DEL JUEGO: BASES DE DATOS

Más detalles

SQL. Fundamentos de Bases de Datos. Concepción de Sistemas de Información Instituto de Computación Facultad de Ingeniería Universidad de la República

SQL. Fundamentos de Bases de Datos. Concepción de Sistemas de Información Instituto de Computación Facultad de Ingeniería Universidad de la República SQL Fundamentos de Bases de Datos Concepción de Sistemas de Información Instituto de Computación Facultad de Ingeniería Universidad de la República SQL- FBD CSI - InCo - Fing - UDELAR 1 Introducción SQL

Más detalles

SQL Básico. José Muñoz Jimeno Febrero 2015

SQL Básico. José Muñoz Jimeno Febrero 2015 SQL Básico José Muñoz Jimeno Febrero 2015 Control de cambios Version Fecha Comentarios 1.0 13/02/2015 Primera versión para el curso Introducción a las bases de datos con MySQL en el COITCV La última versión

Más detalles

Universidad Nacional de Luján Departamento de Ciencias Básicas Base de Datos

Universidad Nacional de Luján Departamento de Ciencias Básicas Base de Datos ALGEBRA RELACIONAL Lic. Guillermo Cherencio INTRODUCCION: En el año 1970, en el artículo original presentado por E. F. Codd se introdujo al Modelo Relacional y el Algebra Relacional. El Algebra Relacional

Más detalles

Taller de Herramientas de Software : ST 213 Secc: V y W

Taller de Herramientas de Software : ST 213 Secc: V y W Universidad Nacional De Ingeniería Facultad Ingeniería Industrial y de Sistemas Taller de Herramientas de Software : ST 213 Secc: V y W SESION Nro. 9 CONSULTAS MULTITABLAS FUNCIONES RESUMEN Docente: Ing.

Más detalles

Ejercicio 1 Funciones de SQL

Ejercicio 1 Funciones de SQL Ejercicio 1 Funciones de SQL 1. Mostrar el nombre, identificador del departamento y comisión de todos los empleados. Ordenarlos primero por el nombre de manera alfabéticamente descendente, seguido por

Más detalles

o SUM: suma los valores del campo que especifiquemos. Sólo se puede utilizar en columnas numéricas.

o SUM: suma los valores del campo que especifiquemos. Sólo se puede utilizar en columnas numéricas. FUNCIONES DE AGREGADO Las funciones de agregado realizan un cálculo sobre un conjunto de valores y devuelven un solo valor. Si exceptuamos la función COUNT, todas las funciones de agregado ignoran los

Más detalles

MATERIAL INTRODUCTORIO ORACLE 11G

MATERIAL INTRODUCTORIO ORACLE 11G MATERIAL INTRODUCTORIO ORACLE 11G Esp. JONATHAN GUERRERO ASTAIZA Capacidades de una sentencia SELECT La sentencia SELECT recibe información a partir de una base de datos. Con la sentencia SELECT usted

Más detalles

Los DLL que permiten crear y definir nuevas bases de datos, campos e índices.

Los DLL que permiten crear y definir nuevas bases de datos, campos e índices. Componentes del SQL El lenguaje SQL está compuesto por comandos, cláusulas, operadores y funciones agregadas. Estos elementos se combinan en las instrucciones para crear, actualizar y manipular las bases

Más detalles

Ser capaces de realizar una consulta dentro de otra

Ser capaces de realizar una consulta dentro de otra TEMA 25: SUBCONSULTAS OBJETIVOS Ser capaces de realizar una consulta dentro de otra 1.- SUBCONSULTAS A veces interesa obtener dentro de una selección de datos, otra, esto se conoce como subconsulta. La

Más detalles

RESUMEN SQL. Tipo de coincidencia Modelo Planteado Coincide No coincide. Varios caracteres 'ab*' 'abcdefg', 'abc' 'cab', 'aab'

RESUMEN SQL. Tipo de coincidencia Modelo Planteado Coincide No coincide. Varios caracteres 'ab*' 'abcdefg', 'abc' 'cab', 'aab' RESUMEN SQL Agustina Botas May COMO SE ESCRIBE UNA CONSULTA SELECT : campos WHERE : criterios que se aplican directamente a los datos (aplica a TODOS los registros) GROUP BY: agrupación de los datos seleccionados

Más detalles

Bases de Datos 1. Teórico: Structured Query Language

Bases de Datos 1. Teórico: Structured Query Language Bases de Datos 1 Teórico: Structured Query Language Historia Los orígenes del SQL están ligados a los orígenes de las bases de datos relacionales Estandarizado por ANSI en 1986 (SQL-86) Hubieron varias

Más detalles

Manipulación de datos en SQL

Manipulación de datos en SQL Manipulación de datos en SQL Consultas a una sola tabla Consultas a varias tablas Funciones agregadas Agrupación Consultas anidadas Ejemplo: esquema relacional EMPLEADO (num_emp, nombre, tarifa_hora, cualificacion,

Más detalles

SQL (DML) Carlos A. Olarte (carlosolarte@puj.edu.co) Gestión y Modelación de SQL Datos (DML)

SQL (DML) Carlos A. Olarte (carlosolarte@puj.edu.co) Gestión y Modelación de SQL Datos (DML) SQL (DML) Carlos A. Olarte (carlosolarte@puj.edu.co) Gestión y Modelación de Datos Outline 1 Actualización, Inserción y Modificación 2 Consultas (Queries) 3 Renombramiento 4 Ordenamiento 5 Reuniones 6

Más detalles

Consultas SQL II. Diego Egüez. Universidad San Francisco de Quito (USFQ)

Consultas SQL II. Diego Egüez. Universidad San Francisco de Quito (USFQ) Consultas SQL II Diego Egüez Universidad San Francisco de Quito (USFQ) Abstract En este trabajo se exploran las consultas o queries en SQL. Se hace enfoque en consultas complejas y subconsultas. Los comandos

Más detalles

SQL SERVER Curso Teórico-Práctico

SQL SERVER Curso Teórico-Práctico SQL SERVER 2008-2012 Curso Teórico-Práctico IMPLEMENTACION DE LA BASE DE DATOS Nomenclatura Todas las tablas tendrán: - Un identificador de tipo entero auto numérico. Ésta será la clave primaria. La denominamos

Más detalles

CC BASES DE DATOS OTOÑO 2018

CC BASES DE DATOS OTOÑO 2018 CC3201-1 BASES DE DATOS OTOÑO 2018 Clase 6: SQL (II) Aidan Hogan aidhog@gmail.com Forma básica de una consulta de SQL Los planetas EL TEMA DE HOY MÁS SQL! Capítulo 5.4-5.6 Ramakrishnan / Gehrke El Álgebra

Más detalles

Tema 8 Álgebra Relacional

Tema 8 Álgebra Relacional Tema 8 Álgebra Relacional Parte 1 Lic. Claudia Román F. 1 Es un lenguaje formal que permite consultar bases de datos relacionales. Conjunto de operadores que toman relaciones como operandos y retornan

Más detalles

Oracle Database 12c SQL and PLSQL Fundamentals

Oracle Database 12c SQL and PLSQL Fundamentals Oracle Database 12c SQL and PLSQL Fundamentals DESCRIPCION MODULOS DE CAPACITACION Introducción Información general sobre 12c de base de datos Oracle y productos afines Descripción de los conceptos y la

Más detalles

SQL: Consultas Avanzadas. Bases de Datos

SQL: Consultas Avanzadas. Bases de Datos SQL: Consultas Avanzadas Bases de Datos Resumen: Consultas Básicas SELECT [DISTINCT] FROM [WHERE ] [GROUP BY ] [HAVING

Más detalles

Lenguaje de consulta de datos SELECT PARTE 2

Lenguaje de consulta de datos SELECT PARTE 2 Lenguaje de consulta de datos SELECT PARTE 2 Objetivos Conocer más usos de la sentencia SELECT de SQL para realizar consultas que afecten a varias tablas de la BD. Además veremos el uso de las clausulas

Más detalles

CC BASES DE DATOS OTOÑO Clase 5: SQL (II) Aidan Hogan

CC BASES DE DATOS OTOÑO Clase 5: SQL (II) Aidan Hogan CC3201-1 BASES DE DATOS OTOÑO 2017 Clase 5: SQL (II) Aidan Hogan aidhog@gmail.com El Cálculo Relacional (de tuplas) Fórmulas atómicas: Una fórmula puede ser Una fórmula atómica o Sean (recursivamente)

Más detalles

Insertar Datos en Tablas

Insertar Datos en Tablas Insertar Datos en Tablas La instrucción básica para insertar valores a los atributos (columnas) de una tabla es la instrucción INSERT INTO Insertar una sola tupla Para insertar una tupla en la tabla, se

Más detalles

SQLModificaciones a la BD

SQLModificaciones a la BD SQL Modificaciones a la BD Amparo López Gaona tación Mayo 2012 Modificación de Datos Las instrucciones de SQL para modificación de los datos en una BD se clasifican en tres tipos: Insertar tuplas en una

Más detalles

Uso de sentencias avanzadas

Uso de sentencias avanzadas Base de datos I Uso de sentencias avanzadas Objetivos: Elaborar sentencias de manejo de datos. Introducción: Después de trabajar con las sentencias de agregar, modificar, editar y visualizar datos, debemos

Más detalles

Consultas Complejas:

Consultas Complejas: Consultas Complejas: SELECCIÓN-AGRUPAMIENTO Un grupo se puede entender como un conjunto de filas con el mismo valor para el conjunto de columnas por las que se agrupa (las incluidas en la cláusula GROUP

Más detalles

Procesamiento de consultas (capítulo 13 y 14 del libro)

Procesamiento de consultas (capítulo 13 y 14 del libro) Procesamiento de consultas (capítulo 13 y 14 del libro) El procesamiento de consulta corresponde a todos los procesos relacionados con la extracción de datos en una base de datos, incluyendo la traducción

Más detalles

Sistemas de Datos Curso: Ernesto Chinkes. SQL Básico Algebra Relacional

Sistemas de Datos Curso: Ernesto Chinkes. SQL Básico Algebra Relacional SQL Básico Algebra Relacional Modelo Relacional Conceptos Relación Esquema Operaciones del Algebra Relacional Selección Proyección Unión Diferencia Producto Cartesiano Algebra Relacional Selección (σ)

Más detalles

Unidad 2. Notación matemática

Unidad 2. Notación matemática Unidad 2 Notación matemática Notación matemática Introducción En el transcurso del texto se hará evidente que el análisis estadístico de un conjunto de datos requiere, en general, de un buen número de

Más detalles

Vistas en InformiX Sistemas de Bases de Datos II EMT CETP A/S Leonardo Carámbula

Vistas en InformiX Sistemas de Bases de Datos II EMT CETP A/S Leonardo Carámbula Vistas en InformiX Características Una vista es una tabla virtual cuyo contenido está definido por una consulta SELECT. Al igual que una tabla real, una vista tiene: un nombre un conjunto de columnas con

Más detalles

El SQL es un lenguaje estándar de programación para el acceso a bases de datos.

El SQL es un lenguaje estándar de programación para el acceso a bases de datos. El SQL es un lenguaje estándar de programación para el acceso a bases de datos. El lenguaje SQL se utiliza para acceder y manipular datos en cualquier base de datos del mercado, como por ejemplo, para

Más detalles

Sub consultas Objetivos Utilizando una sub consulta para resolver un problema

Sub consultas Objetivos Utilizando una sub consulta para resolver un problema Juanjo Dai Sub consultas Objetivos En este texto se aprenderá más acerca de las características avanzadas de las sentencias SELECT Describirán los tipos de problemas que una sub consulta puede resolver

Más detalles

Pero es que además, en ocasiones no hay otra forma de conseguir el resultado deseado que crear la consulta directamente en SQL.

Pero es que además, en ocasiones no hay otra forma de conseguir el resultado deseado que crear la consulta directamente en SQL. 1. INTRODUCCIÓN A unque ya hemos visto cómo realizar consultas para obtener resultados de una base de datos Access a través de la vista Diseño, debes conocer el lenguaje en el que realmente se realizan

Más detalles