Lengujes de consult Mrt Zorrill Universidd de Cntbri Silberschtz, A., Korth, H.F., Sudrshn, S., Fundmentos de Bses de Dtos, 5ª edición, Mdrid, 006
Lecturs recomendds Básics Cp. y 5. Silberschtz, A., Korth, H.F., Sudrshn, S., Fundmentos de Bses de Dtos, 5ª edición, Mdrid, 006. Cp. 6. Elmsri, R., Nvthe, S.B., Fundmentos de Sistems de Bses de Dtos, 3ª; edición, Person Eduction, 008. Cp. 6. Pons, O. et l. Introducción ls bses de dtos. El modelo relcionl. Prninfo. 005
Lengujes de consult Lenguje con el cul el usurio consult informción l BD. Clsificción Procedimentles el usurio indic ls operciones pr obtener el resultdo No procedimentles el usurio describe l informción desed sin estblecer ningún procedimiento concreto Lengujes puros : bse del SQL Álgebr Relcionl (procedimentl) Cálculo Relcionl de Tupls (no procedimentl) Cálculo Relcionl de Dominios (no procedimentl) 3
Cálculo relcionl Mientrs que en un lenguje lgebrico hy que especificr los operdores que se tienen que plicr ls relciones pr obtener el resultdo, en el cálculo relcionl (CR) sólo es preciso indicr cuál es el resultdo que se quiere obtener. Los lengujes de cálculo relcionl pueden ser de dos tipos: orientdos tupls, en los que un vrible se interpret como si representse ls tupls de un relción. {t t prestmo t [importe] > 00} orientdos dominios, en los que un vrible se interpret como si representse los vlores de un dominio. {<p,s,i,> <p,s,i,> prestmo i > 00} 4
Álgebr Relcionl Lenguje procedurl introducido por Codd 974 Operciones fundmentles: Selección (select) σ Proyección (project) Unión (union) Diferenci de conjuntos (set difference) Producto crtesino (Crtesin product) x Renombrmiento (renme) ρ Ls operciones tomn un o dos relciones como entrd y genern un nuev relción como resultdo. 5
Ejemplo bnco sucursl nombre_sucursl, ciudd_sucursl ctivos cuent numero_cuent, nombre_sucursl sldo impositor nombre_cliente, numero_cuent prestmo numero_prestmo nombre_sucursl importe presttrio nombre_cliente, numero_prestmo cliente nombre_cliente clle_cliente ciudd_cliente 6
Ejemplo: Select Relción r A B C D 7 5 7 3 3 0 σ A=B ^ D > 5 (r) A B C D 7 3 0 7
Operción Select Notción: σ p (r) Selección de ls tupls t de l relción r que stisfcen el predicdo p Se define : σ p (r) = {t t r nd p(t)} donde p es un fórmul en cálculo proposicionl que const de términos conectdos por: (nd), (or), (not) y cd término sigue l expresión: <ttribute> op {<ttribute> <constnt>} donde op es: =,, >,, <, Ejemplo: σ nombre_sucursl= Sntnder (cuent) 8
Ejemplo: Project A B C Relción r: 0 0 30 40 A,C (r) A C A C => 9
Operción Project Notción: A, A,, Ak (r) donde A, A son tributos y r es l relción. El resultdo se define como l relción de k columns obtenids después de quitr de l relción ls columns que no están en l list. Ls fils duplicds se eliminn del resultdo, desde que ls relciones son conjuntos (set) E.j. obtener el nº de cuent y el sldo sin indicr l sucursl l que está socid l cuent numero_cuent, sldo (cuent) 0
Ejemplo: Union Relciones r, s: A B A B 3 r s r s: A B 3
Operción Union Notción: r s Se define: r s = { t t r o t s} Pr que r s se válido (comptible).. r, s deben tener el mismo nº de tributos. El dominio de los tributos debe ser comptible E.j. encontrr todos los clientes que tienen un cuent o préstmo en el bnco nombre_cliente (impositor) nombre_cliente (presttrio)
Ejemplo: Set Difference Relciones r, s: A B A B 3 r s r s: A B 3
Operción Set Difference Notción: r s Se define: r s = { t t r y t s} Se debe estblecer entre relciones comptibles. r y s deben tener l mism ridd El dominio de los tributos debe ser comptible E.j. encontrr todos los clientes que tienen un cuent y no tienen préstmo en el bnco nombre_cliente (impositor) - nombre_cliente (presttrio) 4
5 Ejemplo: Crtesin-Product Relciones r, s: r x s: A B A B C D γ γ 0 0 0 0 0 0 0 0 E b b b b C D γ 0 0 0 0 E b b r s
Operción Crtesin-Product Notción r x s Se define: r x s = {t q t r y q s} Se sume que los tributos de r(r) y s(s) son disjuntos. (Esto es, R S = ). Si no fuern disjuntos, se debe utilizr el operdor renombrr (ρ). 6
Composición de operciones Se pueden construir expresiones utilizndo vris operciones Por ejemplo: σ A=C (r x s) r x s A B C γ γ D 0 9 0 0 0 0 0 0 E b b b b σ A=C (r x s) A B C D E 0 0 0 b 7
Operción Renme Permite renombrr y referirse resultdos de expresiones del álgebr relcionl (lis). Permite referirse un relción por más de un nombre. Ejemplo: ρ x (E) devuelve l expresión E bjo el nombre X. Si un expresión relcionl E tiene ridd n, entonces ρ x (A, A,, An) (E) devuelve el resultdo de l expresión E bjo el nombre X, y con los tributos renombrdos A, A,., An. 8
Ejemplos prestmo numero_prestmo nombre_sucursl importe Encontrr los préstmos > 00 σ importe > 00 (prestmo) Encontrr el número de préstmo de quellos cuyo importe es myor que 00 numero_prestmo (σ importe > 00 (prestmo)) 9
Ejemplos presttrio nombre_cliente, numero_prestmo impositor nombre_cliente, numero_cuent Encontrr los nombres de todos los clientes que tienen un préstmo, un cuent o mbs en el bnco nombre_cliente (presttrio) nombre_cliente (impositor) Encontrr los nombre de todos los clientes que tienen un préstmo y un cuent en el bnco. nombre_cliente (presttrio) nombre_cliente (impositor) 0
Ejemplos presttrio nombre_cliente, numero_prestmo prestmo numero_prestmo nombre_sucursl importe Encontrr los clientes que tienen un préstmo en l sucursl Sntnder. nombre_cliente (σ nombre_sucursl = Sntnder (σ presttrio.numero_prestmo = prestmo.numero_prestmo (presttrio x prestmo))) nombre_cliente (σ prestmo.numero_prestmo = presttrio.numero_prestmo ( (σ nombre_sucursl = Sntnder (prestmo)) x presttrio) )
Ejemplos Encontrr los nombres de los clientes que tengn un préstmo en l sucursl Sntnder pero no tienen cuent en ningun sucursl del bnco. nombre_cliente (σ nombre_sucursl= Sntnder (σ presttrio.numero_prestmo= prestmo.numero_prestmo (presttrio x prestmo))) nombre_cliente (impositor)
Ejemplos cuent numero_cuent, nombre_sucursl sldo Buscr el sldo máximo de ls cuents del bnco. Se requiere renombrr cuent sldo (cuent) - cuent.sldo (σ cuent.sldo < d.sldo (cuent x ρ d (cuent))) 3
Definición Forml Un expresión básic del álgebr relcionl se compone de: Un relción de l BD o Un relción constnte ( ({C, centro, ) ( B, bjo, 3)}) Si E y E son expresiones de álgebr relcionl; ls siguientes expresiones tmbién lo son: E E E - E E x E σ p (E ), donde P es un predicdo de tributos de E s (E ), donde S es un list que se compone de lgunos de los tributos de E ρ x (E ), donde x es el nuevo nombre del resultdo de E 4
Otrs operciones Son operciones que no ñden potenci l álgebr pero que simplificn ls consults hbitules. Intersección de conjuntos (Set intersection) Reunión nturl (Nturl join) División (Division) Asignción (Assignment) 5
Ejemplo: Set-Intersection Relciones r, s: A B r A B s 3 r s A B 6
Operción Set-Intersection Notción: r s Se define: r s ={ t t r y t s } Se sume que: r, s tienen l mism ridd Y los tributos son comptibles Not: r s = r - (r - s) 7
8 Ejemplo: Nturl Join Relciones r, s: A B γ δ 4 C D γ γ b b B 3 3 D b b E γ δ r A B δ C D γ γ b E γ γ δ s r s r.a, r.b, r.c, r.d, s.e (σ r.b = s.b ^ r.d = s.d (r x s))
Operción Nturl-Join Notción: r s Sen r y s dos tupls de los esquems R y S respectivmente. El resultdo de l reunión nturl es un relción que se obtiene por considerr cd prej de tupls t r de r y t s de s. Si t r y t s tienen los mismos vlores en cd uno de los tributos R S, un tupl t se ñde l resultdo, donde t tiene el mismo vlor que t r en r t tiene el mismo vlor que t s en s 9
Ejemplo: Division Relciones r, s: A B B γ δ δ δ 3 3 4 6 s r s: A r 30
3 Otro ejemplo Division A B γ γ γ C D γ γ γ γ γ γ b b b b E 3 Relciones r, s: r s: D b E A B γ C γ γ r s
Operción Division r s Adecud pr ls consults que incluyen l expresión pr todos. Sen r y s relciones de los esquems R y S respectivmente donde R = (A,, A m, B,, B n ) S = (B,, B n ) El resultdo de r s es un relción en el esquem R S = (A,, A m ) r s = { t t R-S (r) u s ( tu r ) } 3
Operción Division (Cont.) Propiedd Se q = r s Entonces q es un relción que stisfce q x s r Definido en términos del álgebr relcionl. Sen r(r) y s(s) relciones, y S R r s = R-S (r) R-S ( ( R-S (r) x s) R-S,S (r)) en donde, R-S,S (r) simplemente reorden tributos de r R-S ( R-S (r) x s) R-S,S (r)) devuelve ls tupls t en R-S (r) tles que pr lgun tupl u s, tu r. 33
Operción Asignción L signción ( ) es útil pr expresr consults complejs. Se reliz sobre un vrible de relción temporl. Ejemplo: escribir r s como temp R-S (r) temp R-S ((temp x s) R-S,S (r)) result = temp temp El resultdo l derech de se sign l vrible de l izquierd Est vrible puede utilizrse en expresiones posteriores 34
Ejemplos cuent numero_cuent, nombre_sucursl sldo impositor nombre_cliente, numero_cuent Encontrr todos los clientes que tienen un cuent en ls sucursles de Sntnder y Bezn. NC (σ NS= Sntnder (impositor cuent)) NC (σ NS= Bezn (impositor cuent)) donde NC es nombre_cliente nd NS nombre_sucursl. nombre_cliente, nombre_sucursl (impositor cuent) ρ temp(nombre_sucursl ) ({( Sntnder ), ( Bezn )}) 35
Ejemplos Loclizr los clientes que tienen un cuent en tods ls oficins de Mdrid. nombre_cliente, nombre_sucursl (impositor cuent) nombre_sucursl (σ ciudd_sucursl = Mdrid (sucursl)) sucursl nombre_sucursl, ciudd_sucursl ctivos cuent numero_cuent, nombre_sucursl sldo impositor nombre_cliente, numero_cuent 36
Álgebr relcionl extendid Proyección generlizd Generlized Projection Reunión extern Outer Join Funciones de gregción Aggregte Functions 37
Operción Generlized Projection Extiende l proyección permitiendo que se utilicen funciones ritmétics en l list de proyección. F, F,, Fn (E) E es un expresión del álgebr relcionl F, F,, F n son expresiones ritmétics que incluyen constntes y tributos del esquem P.ej. En l relción informcion_credito(nombre_cliente, limite, sldo_credito) determinr cuánto es el importe disponible por cd person nombre_cliente, limite-sldo_credito (informcion_credito) 38
Operciones y funciones gregds Función gregd tomn un cjto de vlores y devuelven como resultdo un único vlor. vg: vlor promedio min: vlor mínimo mx: vlor máximo sum: sum de vlores count: número de vlores Operción gregd en álgebr relcionl G, G,, Gn g F( A), F( A),, Fn( An) (E) E es un expresión del álgebr relcionl G, G, G n list de tributos bjo l cul se grup Cd F i es un función gregd Cd A i es un tributo 39
Ejemplo: Aggregte Opertion Relción r: A B C 7 7 3 0 g sum(c) (r) sum-c 7 40
Ejemplo: Aggregte Opertion Relción cuent grupd por nombre_sucursl: Nombre_sucursl Numero_cuent Perryridge Perryridge Brighton Brighton Redwood A-0 A-0 A-7 A-5 A- sldo 400 900 750 750 700 nombre_sucursl g sum(sldo) (cuent) Nombre_sucursl Perryridge Brighton Redwood sldo 300 500 700 4
Aggregte Functions (Cont.) El resultdo de un gregción no tiene nombre Se puede utilizr l operción renombrr En el ejemplo se renombr como prte de l operción de gregción Nombre_sucursl g sum(sldo) s sum_sldos (cuent) 4
Relción extern: Outer Join Es un mplición de l operción reunión pr trbjr con informción usente. Comput el join y luego ñde ls tupls de cd relción que no csn con ls de l otr, rellenndo el resultdo con vlores nulos. Uso del vlor nulo: null signific que el vlor es desconocido o no existe 43
Ejemplo: Outer Join Relción préstmo Numero_prestmo L-70 L-30 L-60 Nombre_sucursl Downtown Redwood Perryridge importe 3000 4000 700 Relción presttrio Nombre_cliente Numero_prestmo Jones Smith Hyes L-70 L-30 L-55 44
Ejemplo : Outer Join Inner Join prestmo presttrio Numero_prestmorNombre_sucursl L-70 L-30 Downtown Redwood imorte 3000 4000 Nombre_cliente Jones Smith Left Outer Join prestmo presttrio Numero_prestmo Nombre_sucursl importe Nombre_cliente L-70 L-30 L-60 Downtown Redwood Perryridge 3000 4000 700 Jones Smith null 45
Ejemplo: Outer Join (Cont.) Right Outer Join prestmo presttrio Numero_prestmo Nombre_sucursl importe Nombre_cliente L-70 L-30 L-55 Downtown Redwood null 3000 4000 null Jones Smith Hyes Full Outer Join Numero_prestmo L-70 L-30 L-60 L-55 Nombre_sucursl Downtown Redwood Perryridge null prestmo importe 3000 4000 700 null Nombre_cliente Jones Smith null Hyes presttrio 46
Vlores nulos Ls tupls pueden tener vlores nulos (null) en lgunos de sus tributos null signific desconocido o no existe El resultdo de un operción ritmétic con vlor null es null Ls funciones gregds ignorn los vlores nulos Pr eliminr duplicdos y grupr, el vlor nulo se trt como culquier otro vlor Dos vlores nulos se sumen igules 47
Vlores nulos (cont.) Comprciones con vlores nulos devuelven el vlor desconocido Tbl de verdd: OR: (unknown or true) = true, (unknown or flse) = unknown (unknown or unknown) = unknown AND: (true nd unknown) = unknown, (flse nd unknown) = flse, (unknown nd unknown) = unknown NOT: (not unknown) = unknown Select: si el predicdo devuelve true, se ñde l resultdo; 48 en cso contrrio, no.
Modificción de dtos Operciones: Borrdo Deletion Inserción Insertion Actulizción Updting Tods ls operciones se expresn utilizndo el operdor signción. 49
Borrdo Un petición de borrdo se expres de form similr un consult, pero en vez de mostrrls, ls elimin de l BD Borr tupls complets, no tributos Se expres: r r E donde r es un relción y E es un consult del álgebr relcionl. 50
sucursl Ejemplos nombre_sucursl, ciudd_sucursl ctivos Borrr tods ls cuents de l sucursl Sntnder. cuent cuent σ nombre_sucursl = Sntnder (cuent) Borrr todos los préstmos con importe entre 0 y 50 prestmo prestmo σ importe 0 ^importe 50 (prestmo) Borrr tods ls cuents de ls sucursles de Mdrid. r σ ciudd_sucursl = Mdrid (cuent sucursl) r nombre_sucursl, numero_cuent, sldo (r ) r 3 nombre_cliente, numero_cuent (r impositor impositor r 3 cuent numero_cuent, nombre_sucursl sldo impositor nombre_cliente, numero_cuent impositor) cuent cuent r 5
Insertr Pr insertr o: Especificmos l tupl que se v insertr O escribimos un consult cuyo resultdo se el conjunto de tupls que se vn insertr Se expres: r r E donde r es un relción y E es un expresión del álgebr relcionl L inserción de un sól tupl se expres hciendo que E se un relción constnte que contiene un tupl. 5
Ejemplos Insertr: Smith tiene 00 en l cuent A-973 de l sucursl de Sntnder. cuent cuent {( Sntnder, A-973, 00)} impositor impositor {( Smith, A-973 )} Se dese ofrecer un nuev cuent de horro con 00 como reglo todos los clientes con préstmos concedidos l sucursl de Sntnder (se us el nº de préstmo como nº de est cuent de horro). r (σ nombre_sucursl = Sntnder (presttrio prestmo)) cuent cuent nombre_sucursl, numero_prestmo,00 (r ) impositor impositor nombre_cliente, numero_prestmo (r ) 53
Actulizr Cmbi un vlor de l tupl sin fectr l resto Se expres r F, F,, Fn, (r) donde cd F i es el i-th tributo de r en el cso de que este tributo no se vy ctulizr o, en cso contrrio, un expresión solo con constntes y tributos de r que proporcion el nuevo vlor del tributo. 54
Ejemplos Aplicr un interés del 5% ls cuents cuent c, s, sl *.05 (cuent) donde C, S y SAL son nº de cuent, nombre de sucursl y sldo. Ahor pr ls cuents con sldo >0,000 es el 6% y l resto el 5%. cuent C, S, SAL *.06 (σ SAL > 0000 (cuent)) C, S, SAL *.05 (σ SAL 0000 (cuent)) 55