Bases de Datos I Unidad III BASES DE DATOS I UNIDAD III MODELO RELACIONAL. Este modelo opera en los niveles conceptual y de vision, tiene la característica de que los resultados de un diseño muestran caracteristicas bien definidas que seran utiles para la implementación del nivel conceptual. 3.1 ESTRUCTURA DE LAS BASES DE DATOS RELACIONALES. 3.2 LENGUAJES DE CONSULTAS FORMALES O PUROS. Existe un sistema de DML conocido como algebra relacional que permite especificar operaciones de consulta a traves de pasos intermedios de generación de tablas utilizando formatos especiales. En el algebra relacional no son validos los operadores logicos. Existen dos clasificaciones de procesos en algebra relacional; en cada uno de ellos se toma una o dos tablas como entrada y se obtiene una tabla de salida. Estas clasificaciones son: Operaciones tradicionales o o o o Union(union) Intersección(intersect) Diferencia(minus) Producto cartesiano (times) Instituto Tecnológico de Ciudad.Juárez 25 Bases de Datos I Unidad III Operadores especiales o o o o Select Project Join Divide Operadores tradicionales: Estas requieren que las tablas a operar tengan la misma cantidad de atributos y que sus dominios correspondientes sean semejantes o congruentes. a. UNION.- Constituye una tabla que contiene a todas las tuplas que aparecen en una o ambas tablas <tabla1>union<tabla2> b. INTERSECCION.- Produce un atabla que contiene a aquellas tuplas que aparecen en ambas tablas <tabla1>intersec<tabla2> c. DIFERENCIA.-Produce un atabla que contiene todas las tuplas de la primera tabla operando que no aparecen en la segunda <tabla1>minus<tabla2> d. PRODUCTO CARTESIANO.- Produce una tabla que contiene todas las posibles concatenaciones entre los elementos de las tablas involucradas <tabla1>times<tabla2> Operaciones especiales: a. SELECT.- Es un formato qu epermite extraer tuplas que satisfacen una condición <tabla>where<condición> b. PROJECT.- Es un formato que nos permite filtrar atributos en la tabla resultante, especificando aquellos que se desea obtener. <tabla>[<lista de atributos>] c. JOIN.- Construye una tabla a partir de dos tablas especificas, obteniendo todas las posibles combinaciones entre los elementos de estas y mostrando aquellas que satisfagan una condición determinada <tabla1>join<tabla2>where<condicion> Nota: Esta operación es semejante a una consulta sobre tabla global cuando se involucran dos tablas y una condicion de filtro. d. DIVIDE.-Toma dos tablas una de grado (M+N) y la otra de grado(N). construye una tabla de grado M que contiene todos los valores m de la relacion (M+N) cuyo complemento es igual a todos los valores de la relación de orden N. <tabla1>DIVIDE<tabla2> Ejercicios: a. Mostrar una lista que contenga los nombres y costos de las peliculas en existencia: videos[nombre,costo] b. Se desea conocer el nombre y domicilio de todos los clientes infantiles (clientes where estado = 'infantil')[nombre,domicilio] c. Se desea conocer el nombre de las peliculas que no son para niños (videos where clasificacion ¬ = 'a')[titulo] d. Se desea la lista de los titulos que cuestan mas de 10.00 de peliculas para adultos ((videos where costo>10.00)where clasif='c')[titulo] Instituto Tecnológico de Ciudad.Juárez 26 Bases de Datos I Unidad III 3.2.1 Á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 selección, proyección, unión, diferencia de conjuntos, producto cartesiano, y renombramiento. Además de las operaciones fundamentales hay otras operaciones, por ejemplo, intersección de conjuntos, reunión natural, división y asignación. Estas operaciones se definirán en términos de las operaciones fundamentales. Operaciones Proyectar (π) Seleccionar () Producto cartesiano (×) Join ó Reunir ( ) Operaciones de conjuntos Unir () Intersectar (∩) Restar (–) Proyección (π) Selecciona el valor de ciertos atributos de todas las tuplas de una relación πA1,A2,...,An(R) = { t[A1,A2,...,An] : t R } Selecciona columnas completas Proyección (π) ejemplos Película ID_Película 1 2 3 4 Nombre La guerra de las galaxias El señor de los anillos Mar Adentro El viaje de Chihiro Actor Año 1977 2001 2004 2001 ID_Actor 1 2 3 4 Nombre Mark Cristopher Javier Hugo Apellido Hamill Lee Bardem Weaving π Año(Película) ={<1977>,<2001>,<2004>,<2001>} πID_Película,Año(Película) ={<1,1977>,<2,2001>,<3,2004>,<4,2001>} πNombre(Actor) ={<Mark>,<Cristopher>,<Javier>,<Hugo>} Instituto Tecnológico de Ciudad.Juárez 27 Bases de Datos I Unidad III Proyección (π) en SQL πA1,A2,...,An(R) SELECT A1,A2,...,An FROM R Selección () Selecciona el valor de ciertas tuplas condición(R) = { tR : condición(t) es cierto} Selecciona filas completas Selección () ejemplos Película ID_Película 1 2 3 4 Actor Nombre La guerra de las galaxias El señor de los anillos Mar Adentro El viaje de Chihiro Año 1977 2001 2004 2001 ID_Actor 1 2 3 4 Nombre Mark Cristopher Javier Hugo Apellido Hamill Lee Bardem Weaving Apellido=Lee(Actor) = {<2,Cristopher,Lee>} Año>2000(Película) = {<2,La comunidad del anillo,2001>, <4,El viaje de Chihiro,2001>} Proyección () en SQL condición(R) SELECT * FROM R WHERE condición Composición de selección y proyección ,π Película ID_Película 1 2 3 4 Actor Nombre La guerra de las galaxias El señor de los anillos Mar Adentro El viaje de Chihiro Año 1977 2001 2004 2001 ID_Actor 1 2 3 4 Instituto Tecnológico de Ciudad.Juárez Nombre Mark Cristopher Javier Hugo Apellido Hamill Lee Bardem Weaving 28 Bases de Datos I Unidad III πNombre(Apellido=Lee(Actor)) = {<Cristopher>} πNombre(Año>2000(Película)) = {<La comunidad del anillo>,<El viaje de Chihiro>} Composición ( y π) en SQL πA1,A2,...,An (condición(R)) SELECT A1,A2,...,An FROM R WHERE condición Eliminar duplicados (δ) Elimina tuplas duplicadas en una relación δ(R) Película ID_Película 1 2 3 4 Nombre La guerra de las galaxias El señor de los anillos Mar Adentro El viaje de Chihiro Año 1977 2001 2004 2001 ID_Estudio 3 2 4 1 δ(π Año(Película) = { 1977, 2001, 2004 } Operación δ en SQL δ(R) SELECT DISTINCT * FROM R Producto cartesiano (×) A × B = {(a,b): a A Λ b B} Ejemplo: A = {s,t} B = {u,v,w} A × B = {s,t} × {u,v,w} { (s,u),(s,v),(s,w),(t,u),(t,v),(t,w) } La cardinalidad es |A × B| = |A||B| Instituto Tecnológico de Ciudad.Juárez 29 Bases de Datos I Unidad III Producto cartesiano (×) ejemplos Película ID_Película 1 2 3 4 Estudio Nombre La guerra de las galaxias El señor de los anillos Mar Adentro El viaje de Chihiro Año 1977 2001 2004 2001 ID_Estudio 3 2 4 1 ID_Estudio 1 2 3 4 Nombre Ghibli New Line Cinema Luscasfilm Sogecine Película×Estudio ={<1, La guerra de las galaxias, 1977, 3, 1, Ghibli>, <1, La guerra de las galaxias, 1977, 3, 2, New Line Cinema>, <1, La guerra de las galaxias, 1977, 3, 3, Lucasfilms>, <1, La guerra de las galaxias, 1977, 3 , 4, Sogecine>, <2, La comunidad del anillo, 2001, 2, 1, Ghibli>, <2, La comunidad del anillo, 2001, 2, 2, New Line Cinema>, <2, La comunidad del anillo, 2001, 2, 3, Lucasfilms>, <2, La comunidad del anillo, 2001, 2, 4, Sogecine>, <3, Mar adentro, 2004, 4, 1, Ghibli>, <3, Mar adentro, 2004, 4, 2, New Line Cinema>,...} Producto cartesiano (×) en SQL R1× R2 SELECT * FROM R1, R2 Seleccionar combinaciones correctas Película ID_Película 1 2 3 4 Estudio Nombre La guerra de las galaxias El señor de los anillos Mar Adentro El viaje de Chihiro Año 1977 2001 2004 2001 ID_Estudio 3 2 4 1 ID_Estudio 1 2 3 4 Nombre Ghibli New Line Cinema Luscasfilm Sogecine Película.ID_estudio=Estudio.ID_Estudio(Película×Estudio) ={ <1, La guerra de las galaxias, 1977, 3, 3, Lucasfilms>, <2, La comunidad del anillo, 2001, 2 , 2, New Line Cinema>, <3, Mar adentro, 2004, 4, 4, Sogecine>, <4, El viaje de Chihiro, 2001, 1, 1, Ghibli>} Instituto Tecnológico de Ciudad.Juárez 30 Bases de Datos I Unidad III Seleccionar combinaciones correctas en SQL R1.k=R2.k(R1×R2) SELECT * FROM R1,R2 WHERE R1.k=R2.k Notación, operación Reunir (JOIN) R1.k=R2.k(R1×R2) R1 k R2 R1 k R2 Operación JOIN en SQL SELECT * FROM R1,R2 WHERE R1.k=R2.k Operación JOIN en MySQL R1 k R2 SELECT * FROM R1 JOIN R2 USING(k) Instituto Tecnológico de Ciudad.Juárez 31 Bases de Datos I Unidad III JOIN natural R1 R2 Omitir el subíndice significa: o Unir según todos los atributos que tengan el mismo nombre en las dos tablas Operación NATURAL JOIN en MySQL R1 R2 SELECT * FROM R1 NATURAL JOIN R2 Nota: esto usa todos los atributos que se llamen de la misma manera, a veces no es lo que nosotros queremos Comunitat( id_comunitat, nom ) Municipi( id_municipi, id_comunitat, nom ) Queremos unir id_comunitat pero no nom Ejemplo de NATURAL JOIN mysql> select comunitat.nom, municipi.nom, municipi.superficie from comunitat natural join municipi; +---------+---------+------------+ | nom | nom | superficie | +---------+---------+------------+ | Ceuta | Ceuta | 19.52 | | Melilla | Melilla | 13.96 | +---------+---------+------------+ 2 rows in set (0.14 sec) mysql> select comunitat.nom, municipi.nom, municipi.superficie from comunitat join municipi using (ca_id); +-----------+----------+------------+ | nom | nom | superficie | +-----------+----------+------------+ | Andalucía | Abla | 45.28 | | Andalucía | Abrucena | 83.18 | | Andalucía | Adra | 89.98 | …. Instituto Tecnológico de Ciudad.Juárez 32 Bases de Datos I Unidad III LEFT JOIN JOIN elimina algunos datos Los que no están en las dos tablas LEFT JOIN reemplaza los eliminados por valores nulos en la tabla de la izquierda Operación LEFT JOIN en MySQL R1 k R2 SELECT * FROM R1 LEFT JOIN R2 USING(k) Ejemplo LEFT JOIN Película ID_Película 1 2 3 4 Estudio Nombre La guerra de las galaxias El señor de los anillos Mar Adentro El viaje de Chihiro Año 1977 2001 2004 2001 ID_Estudio 3 2 4 1 SELECT count(id_pelicula) AS CNT FROM estudio JOIN pelicula USING (id_estudio) SELECT count(id_pelicula) AS CNT FROM estudio LEFT JOIN pelicula USING (id_estudio) Instituto Tecnológico de Ciudad.Juárez ID_Estudio 1 2 3 4 5 Nombre Ghibli New Line Cinema Luscasfilm Sogecine Nuevo Estudio CNT 1 1 1 1 Nombre Ghibli New Line Cinema Lucasfilm Sogecine CNT 1 1 1 1 0 Nombre Ghibli New Line Cinema Lucasfilm Sogecine Nuevo Estudio 33 Bases de Datos I Unidad III Otro ejemplo LEFT JOIN Ciudad Id_ciudad 1 2 3 4 5 Viaje Id_salida 1 1 5 5 5 5 2 Nombre Barcelona Berlin Roma Paris Budapest Id_llegada 2 4 3 4 2 1 4 Nombre Barcelona Berlin Budapest Paris Roma SELECT ciudad.nombre, COUNT(viaje.id_salida) FROM ciudad LEFT JOIN viaje ON (ciudad.id_ciudad=viaje.id_salida) GROUP BY ciudad.nombre; CNT 2 1 4 0 0 Ejemplo múltiples JOIN Ciudad Id_ciudad 1 2 3 4 5 Viaje Id_salida 1 1 5 5 5 5 2 Nombre Barcelona Berlin Roma Paris Budapest SELECT cs.nombre, cl.nombre FROM viaje JOIN ciudad AS cs ON (viaje.id_salida=cs.id_ciudad) JOIN ciudad AS cl ON (viaje.id_llegada=cl.id_ciudad); Id_llegada 2 4 3 4 2 1 4 Nombre Barcelona Barcelona Budapest Budapest Budapest Budapest Berlin Nombre Berlin Paris Roma Paris Berlin Barcelona Paris Resumen Proyectar (π): elegir columnas Seleccionar (): criterio para las filas Producto cartesiano (×): producto tablas Join ó Reunir ( ): combinar tablas Instituto Tecnológico de Ciudad.Juárez 34 Bases de Datos I Unidad III 3.2.2 Cálculo Relacional. Conceptos El álgebra relacional dice cómo obtener unos resultados, mientras el cálculo dice qué resultado se desea. El álgebra es procedimental mientras que el cálculo es no procedimental. El cálculo relacional es un lenguaje declarativo, es decir no funciona con procedimientos. Es un lenguaje formal, basado en la rama de la lógica matemática llamado cálculo de predicados. El cual tiene dos adaptaciones: cálculo relacional de tuplas y cálculo relacional de dominios. 4.3.2. Cálculo Relacional de Tuplas Se basa en la especificación de un cierto número de variables tupla. Su forma general es: { t / P ( t )} Donde t es la variable tupla. Y P( t ) es cualquier expresión o formula donde interviene t , que representa una condición. o en forma ampliada: {t 1 A 1 , t 2 A 2 ,... t n A n / condición(t 1, t 2... t n )} Lenguajes como Quel (1976) y SQL (1984) se apoyan en este. 4.3.2.1. Cuantificadores Se pueden usar los cuantificadores Universal ( ? ) y Existencial ( ? ). Si una variable tupla esta cuantificada se dice que es una variable restringida o ligada. 4.3.2.2. Ejemplos. Obtener los alumnos con promedio superior a 4.0 {t /t ? alumno ? t[promedio] >4.0} también: {t /t ? alumno ? t.promedio >4.0} El caso anterior pero solo obteniendo los codigos y nombres de los estudiantes: {t.codigoal, t.nombreal /t ? alumno ? t.promedio >4.0} Encontrar el nombre de los profesores que tienen asignadas materias. {t.nombre /t ? profesor ? ? s ? prof_mat ( t.codigoprof = s.codigoprof )} Encontrar los nombres de los alumnos que tienen notas en todas las materias. {t.nombreal /t ? alumno ? ? s ? nota ( t.codigoal = s.codigoal) ? v ? materia (s.codigomat = v.codigomat) } 4.3.3. Cálculo relacional de Dominios Variables de dominio toman valores en los dominios de los atributos. Forma General: {<x 1 ,x 2 ... x n > /P(x 1 ,x 2 ... x n )} Instituto Tecnológico de Ciudad.Juárez 35 Bases de Datos I Unidad III Donde: <x 1 ,x 2 ... x n >, representa las variables tuplas. P(x 1 ,x 2 ... x n ), es el predicado o condiciones sobre las variables. 4.3.3.1. Ejemplos. Obtener los alumnos con promedio superior a 4.0 {<a,b,c,d> /<a,b,c,d> ? alumno ? d >4.0} El caso anterior pero solo obteniendo los códigos y nombres de los estudiantes: {<a,b> /<a,b,c,d> ? alumno ? d >4.0} 4.3.3.4. Ejercicios propuestos. Conseguir los siguientes resultados tanto con cálculo relacional de tuplas, como de dominios: • Encontrar los nombres de los monitores y los códigos de las materias que monitorean. • Encontrar los códigos de los estudiantes que no sean monitores • Encontrar los alumnos que pertenezcan a ASI o a IE • Encontrar los nombres de los monitores y sus promedios de carrera para aquellos monitores matriculados en ASI TRABAJANDO SOBRE LAS RELACIONES CON LOS SIGUIENTES ESQUEMAS cliente (nclie, nombre, ciudad, dire, telef) proveedor (nprove,nombre,ciudad) producto (nprod, descr, color, peso, nprove, precio) pedido (nped, nclie, fecha, total) prodped (nped, nprod, cant, subt) alumno (codigoal, nombreal,promedio, carrera) monitor (codigoal, codmat) profesor (codprof, nombre, escalafon,carrera) materia (codmat,nombremat,carrera) nota (codmat, codigoal, calif) USANDO ALGEBRA O CALCULO RELACIONAL DE TUPLAS O DOMINIOS, A MENOS QUE SE ESPECIFIQUE UNO EN PARTICULAR: • Encontrar la carrera que tenga el máximo de los promedios de los estudiantes. • Mostrar los clientes que hayan comprado todos los productos del proveedor con nombre “soluciones en Sistemas”. • Borrar de la relación producto los productos que sean de valor inferior a $500. • Incremente en 20% el precio de todos los productos. • Encuentre la cantidad de pedidos realizados por cada cliente. • Conseguir la pareja profesor, monitor para cada materia que tenga monitor. • Nombre de cliente que sus pedidos sumen más de $150000. Muestre ese valor total para cada uno. • Valor total y promedio de los productos pedidos fabricados por proveedor CINDU ANDINA. • Mostrar los clientes que hayan comprado todos los productos del proveedor con nombre “soluciones en Sistemas”. Hacerlo por Calculo relacional. Instituto Tecnológico de Ciudad.Juárez 36 Bases de Datos I Unidad III • Sacar un catalogo de los productos con su descripción, código, nombre del proveedor y precio de los mismos. 4.4. Lenguajes de Consultas. 4.4.1. Query By Example QBE Lenguaje de manipulación de datos basado en cálculo relacional de dominios. Apareció en 1977. El lenguaje se basa en una sintaxis bidimensional: Consultas en formas de tabla. Además la consulta se expresa mediante ejemplos. Ejemplo: Encontrar los alumnos matriculados en ASI alumnos P. codigoal nombreal promedio carrera ASI En Paradox esto se vería así: Se seleccionan las tablas, se marcan los campos a visualizar y se define las condiciones de join entre las tablas. 4.4.2. QUEL Basado en el cálculo relacional de tuplas. Data de 1976. Se basa en tres cláusulas para obtener los resultados: Range of Retrieve Where Ejemplo: Encontrar los alumnos matriculados en ASI range of t is alumno retrieve (t.codigoal) where t.carrera=”ASI” 4.4.3. SQL Es un potente y estándar lenguaje de consultas, basado en cálculo relacional de tuplas. Por su importancia se ha destinado un capitulo completo a este tema. Para consultas usa tres cláusulas principales: Instituto Tecnológico de Ciudad.Juárez 37 Bases de Datos I Unidad III Select From Where Ejemplo: Encontrar los alumnos matriculados en ASI select codigoal from alumno where carrera=”ASI” 3.3 MODIFICACIONES DE LAS BASES DE DATOS (Vistas). La modificación de la base de datos se expresa usando el operador asignación. Las asignaciones se hacen a relaciones ya existentes en la base de datos. 1. Eliminación. Una solicitud de eliminación se expresa de forma muy parecida a una consulta. Sin embargo, en vez de presentar tuplas al usuario, quitamos las tuplas seleccionadas de la base de datos. Sólo podemos eliminar tuplas completas; no podemos eliminar únicamente valores de determinados atributos. 2. Inserción. Para insertar datos en una relación, bien especificamos la tupla que sa va a insertar o escribimos una consulta cuyo resultado sea un conjunto de tuplas que se va a insertar. 3. Actualización. En ciertas ocasiones podemos querer cambiar un valor en una tupla sin cambiar todos los valores de la tupla. Si hacemos estos cambios usando eliminación e inserción, es posible que no podamos conservar los valores que no queremos cambiar. En lugar de ello, usamos el operador actualización. 3.3.1 Vistas. Son una especie de tablas virtuales; es decir no existen fisicamente sino que forman mediante la selección y/o filtrado de los componentes de otras tablas, una vista puede ser definida en base a una lista previa. Esto significa que pueden crearse dependencia entre las vistas. Instituto Tecnológico de Ciudad.Juárez 38 Bases de Datos I Unidad III Formato de definicion de vistas DEFINE VIEW<nombre vista> [(identif_campo1, identif_campo2,...)] AS<operación de consulta> Ejemplo: se desea crear una vista para obtener los nombres y domicilios de los clientes adultos es deseable el establecimiento de las cabeceras nombre del cliente, domicilio del cliente. DEFINE VIEW cliente_adulto (nombre del cliente, domicilio del cliente) As(select nombre,domicilio From clientes Where estado = 'adulto') Como puede verse, la especificación de los identificadores es opcional; si estos se omiten se asumiran los nombres de los campos extraidos en la consulta. La operación de consulta permite todos los formatos validos de consulta en SQL con execepción del groop by. Cuando una vista es definida en base a otra, se se dice que es dependiente de esta por lo tanto, se suprimira automaticamente la vista dependiente si se suprime la vista original. Eliminación de vistas Drop view <nombre tabla> Ejemplo: suponga que se desea crear una vista dependiente de la vista cliente adulto que contenga solamente a los clientes que viven sobre forjadores. Se desean los mismos campos y la vista sera llamada cliente_adulto_forjadores. Define view cliente_adulto_forjadores AS (select * From cliente_adulto Where domicilio_del_cliente like 'forjadores%') ~ ~ drop view cliente_adulto (se eliminara tambien la vista cliente_adulto_forjadores, puesto que es dependiente de cliente_adulto.) La eliminación de una tabla provoca tambien la eliminación automatica de todas las listas que se hayan definido haciendo referencia a ella. Instituto Tecnológico de Ciudad.Juárez 39 Bases de Datos I Unidad III 3.4 LENGUAJES DE CONSULTA COMERCIAL (SQL). En forma comercila existen diversos paquetes y/o lenguajes mediante los cuales se puede construir un modelo relacional. El lenguaje que se considera estandar para este tipo de aplicaciones es el SQL(structured query languaje), este lenguaje de consulta estructurado proporciona formatos y sintaxis para la manipulación y definición de los datos. FORMATOS SQL DDL Crear Tablas CREATE TABLE<nombre de la tabla> ( <campo1> (<tipo>[,NO NULL]), <campo2> (<tipo>[,NO NULL]),... ) Tipos Validos CHAR (<LONG>)[VAR] FLOAT INTEGER SMALLINT Crear Indices Instituto Tecnológico de Ciudad.Juárez 40 Bases de Datos I Unidad III CREATE [UNIQUE] INDEX <nom.indice> ON < nom>tabla> ( <nomcampo1> [ASC/DES], <nomcampo2> [ASC/DES],... ) Modificar Tablas (expandirlas) EXPAND TABLE <nom.tabla> ADD FIELD <nom.campo> (<TIPO>[NO NULL]) Eliminar Tablas DROP TABLE <nom.tabla> Borrar Indices DROP <nom>indice> Tablas CREATE TABLE persona ( nombre(CHAR(40) VAR, NO NULL), edad(SMALLINT, NONULL), estatura(FLOAT, NO NULL), telefono(CHAR(7)) ) Indices Por nombre CREATE INDEX ind_nom ON persona ( nombre ) Por estatura sin llaves repetidas, descendente CREATE UNIQUE INDEX ind_est ON persona ( Instituto Tecnológico de Ciudad.Juárez 41 Bases de Datos I Unidad III estatura desc ) Por edad(primero mas jovenes); edades repetidas, poe estatura(primero la mas alta) CREATE INDEX ind_ed_est ON persona ( edad,estatura desc ) Modificaciones EXPAND TABLE persona ADD FIELD direccion(CHAR(30), VAR, NO NULL) DML Insertar datos INSERT INTO <nom.tabla> [(<campo1>,<campo2>...):] < <valor1>,<valor2>...> Modificar datos UPDATE <nom.tabla> SET <campo1> = <campo1>, <campo2> = <campo2>,... [WHERE <condicion>] Eliminar datos DELETE<nom.tabla> [WHERE <condicion>] CONSULTAS En una tabla SELECT [UNIQUE] <lista de campos/*> FROM <nom>tabla> [WHERE <condicion>] [ORDER BY <campo> [asc/des]] Funciones integradas en select/where COUNT(*) conteo SUM(<campo>) total(acumulador) AVG(<campo>) promedio MAX(<campo>) maximo MIN(<campo>) minimo Instituto Tecnológico de Ciudad.Juárez 42 Bases de Datos I Unidad III Ejemplo: Insert into persona < 'juan',15,1,75,'2-15-15','forjadores'> Íncrementar edad de todas las tuplas Update persona Set edad=edad+1 Personas menores a 20 años crecieron 10 centimetros Update persona Set estatura = estatura+0.10 Where edad<20 Consulta por coincidencia parcial en cadenas Select <nombre_tabla> where<campo char>LIKE <cadena de coincidencia> Instituto Tecnológico de Ciudad.Juárez 43 Bases de Datos I Unidad III caracteres validos en <cadena de coincidencia> "-" un carácter cualquiera. "%" una secuencia de caracteres cualquiera. Create table clientes ( nc(integer,NO NULL), nombre(char(20)VAR,NO NULL) domicilio(char(40)VAR,NO NULL) estado(char(15)VAR,NO NULL) ) insert into clientes <320,'juan','forjadores','infantil'> <145,'pedro','catolica','adulto'> create tabla videos ( clave(char(4),NO NULL), titulo(char(20)VAR,NO NULL), clasificacion(char(1)VAR,NO NULL), costo(float,NO NULL) ) insert into videos <'A320','la roca','b',12.00> <'b415','tornado','b',12.00> Create table renta ( nc(integer,NO NULL), Instituto Tecnológico de Ciudad.Juárez 44 Bases de Datos I Unidad III clave(char(4),NO NULL), fecha(char(8),NO NULL), dias(smallint,NO NULL) ) Insert into renta <320,'A716','7/10/97',3> <320','b716','7/10/97'.3> Ejemplos: 1. Muestre el nombre y estado de los clientes cuyo numero de credencial es mayor a 100 select nombre estado form clientes where nc>100 2. Se desea conocer la cantidad de clientes de cada estado select estado, count(*) from clientes group by estado 3. Se desea consultar los nombres de las peliculas que cuestan menos de 15.00 que no son infantiles. Select titulo From videos Where (costo < 15.00 and clasificacion ù = "a'') Consultas en varias tablas En tabla global select [unique] <lista campos /*> from <lista de tablas> where <condicion> Este tipo de consultas se realiza sobre un atabla global que resulta de todas las combinaciones posibles entre las tuplas de las tablas involucradas. La condición en el formato debe aprovecharse para colocar un filtro que permita que solo tas tuplas o combinaciones de estas que sean requeridas, se muestren; esto se logra por medio de las columnas con valor semejante o de las relaciones establecidas. Instituto Tecnológico de Ciudad.Juárez 45 Bases de Datos I Unidad III Si un campo se encuentra en mas de una tabla, su referencia puede formarse con el formato tabla campo. Ejemplo: Se desea conocer la lista de los distintos titulos rentados el 8 oct 97 Select unique video.tiulo From renta,videos Where (renta.fecha = '8/oct/97' and renta.clave = video.clave) Los discriminadores any/all son opcionales y se pueden combinar con un operador relacional o con in/not in en este tipo de consultas se procesa primeramente la tabla mas interna(tabla2) de la cual obtiene una salida determinada; los datos que se obtienen en esta salida se relacionan mediante el descriminador con los datos de la tabla externa, produciendo asi la salida final. Ejemplo: Se desea mostrar los titulos de las peliculas que han sido rentadas por lo mas de dos dias Select videos.titulo From videos,renta Where (videos.clave=renta.clave) and (renta.dias>2) En subconsultas select videos.titulo form videos where clave in ( select clave from rentas where renta.dias >2) El formato puede extenderse creando subconsultas en multinivel. Se asume el mismo criterio de resolver a partir de la tabla mas interna e ir relacionando los resultados con la tabla externa inmediata sucesivamente. Instituto Tecnológico de Ciudad.Juárez 46 Bases de Datos I Unidad III Ejemplo: se desea conocer el domicilio de los clientes que han rentado peliculas para adolescentes. Select clientes.domicilio Form clientes Where nc in (select nc From renta Where clave in (select clave From videos Where clasificacion='b' )) En uniones Una union permite consultar los resultados de dos o mas tablas en una sola salida; cuando los resultados de las tablas son semejantes (muestran la misma informacion) se suprimen las salidas redundantes, operando asi como una union de conjuntos. Select <lista de campos/*> From <tabla1> Where<condicin1> Select <lista campos2/*> Union From<tabla2> Where<condicion2> Ejemplo: se desea obtener una lista de clientes y de peliculas se desea incorporar solo alos clientes infantiles y a las peliculas que pueden ser rentadas por estos. Select nombre From clientes Where estado='infantil' Union Select titulo From videos Where clasificacion = 'a' Instituto Tecnológico de Ciudad.Juárez 47