Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
4.1 Introduccin. 4.2 Estructura bsica (SELECT, WHERE). 4.3 Funciones de agrupacin (GROUP BY, HAVING). 4.4 Consultas sobre mltiples tablas. 4.4.1 Subconsultas. 4.4.2 Operadores JOIN. 4.5 Vistas. 4.6 Manipulacin de la base de datos (INSERT, UPDATE, DELETE).
Fund. Bases de Datos Ing. Felipe Alans Gonzlez -ITD1
4.1 Introduccin
SQL es ms amigable para el usuario, a diferencia de Algebra Relacional, Aunque est basado principalmente en l. Es el lenguaje comercial ms popular. Es el lenguaje estndar de las Bases de Datos Relacionales. Significa Structured Query Language Su nombre original era SEQUEL desarrollado como parte del proyecto del sistema R de IBM. Sequential English QUEry Language
Fund. Bases de Datos Ing. Felipe Alans Gonzlez -ITD2
4.1 Introduccin SQL ha sido tan popular, que aunque es uno ms de los lenguajes de las B.D. Relacionales, se ha aceptado como El Lenguaje. Los dos Lenguajes que componen a SQL: DDL. Data Definition Language DML Data Manipulation Languaje En realidad SQL es una parte de DML.
Fund. Bases de Datos Ing. Felipe Alans Gonzlez -ITD3
Select
X From Where
No confundamos select con la operacin seleccionar del lgebra relacional, de hecho la discrepancia es un error desde la creacin de SQL.
A , A , .... A
1 2
Fund. Bases de Datos
P ( r1 X r2 X .... X rm ) )
4
1 1 1 1 3 3 3 4
hora='16:00'
(InasistAlum)
Pruebe estas consultas en cualquier un DBMS (por ejemplo Visual Fox, Access, MySQL, etc)
nombre,curp(Alumnos)
select nombre,curp from Alumnos
1 1 1 1 3 3 3 4
1 1 1 1 3 3 3 4
hora'12:00'
(InasistAlum)
1 1 1 1 3 3 3 4
relacin InasistAlum
IdAlumno Fecha Hora Motivo
1 1 1 1 3 3 3 4
1 1 1 1 3 3 3 4
hora='16:00'(InasistAlum)))
http://developer.mimer.se/validator/parser200x/index.tml O puede ver una lista de las caractersticas del Ncleo de SQL Estndar en: http://developer.mimer.se/validator/parser200x/core-sql-200x.tml
Fund. Bases de Datos Ing. Felipe Alans Gonzlez -ITD12
relacin ALUMNOS
IdAlumno 1 2 3 4 Control 98042151 97041587 97043014 96042121
Relacin Materias
IdMateria 1 2 3 4 5 Clave 8807 8821 8011 8927 8806 Nombre Estructuras de Datos I Bases de Datos I Matemticas IV Bases de Datos I Programacin II
relacin InasistAlum
Fecha
nombre,fecha( hora='16:00'Alumnos.IdAlumno=InasistAlum.IdAlumno
1 1 1 1 3 3 3 4
Materias.nombre (Materias.nombre=Mat2.nombreMaterias.IdMateriaMat2.IdMateria (
Materias X
Mat2(Materias)
) )
select distinct Materias.nombre from Materias, Materias Mat2 where Materias.nombre=Mat2.nombre and Materias.IdMateria<>Mat2.IdMateria
Fund. Bases de Datos Ing. Felipe Alans Gonzlez -ITD-
Renombrar
14
Alumnos.nombre,Alumnos.domicilio
(Alumnos.colonia=Alum2.coloniaAlumnos.IdAlumnoAlum2.IdAlumnoAlum2.control='96042121' (AlumnosXAlum2(Alumnos)))
select Alumnos.nombre,Alumnos.domicilio from Alumnos,(select * from Alumnos Alum2 where control='96042121') where Alumnos.colonia=Alum2.colonia and Alumnos.IdAlumno<>Alum2.IdAlumno
(
A lu m 2 .co n tr ol= '9 60 4 01 21 ' A lu m n os .c olo n ia =A lu m 2 .c olo nia A lu m n os .Id A lu m n o A lum 2.IdA lu m n o
( A lu m n o s
A lu m 2 ( A lu m n o s ) ) )
select Alumnos.nombre,Alumnos.calle,Alumnos.numero from Alumnos,Alumnos Alum2 where Alum2.control='96042121' and Alumnos.colonia=Alum2.colonia and Alumnos.IdAlumno<>Alum2.IdAlumno
Esta expresin cumple con el Ncleo de SQL estndar
Alumnos
IdAlumno 1 2 3 4 5 6 7 Control 98042151 97041587 97043014 96042121 96044350 97111432 98042012 Nombre Pato Lucas Atomic Ant Mickey Mouse Johnny Bravo Robin Hood Oso Yogui Hrcules
Maestros
IdMaestro 1 2 3 4 5 6 CURP X11 A22 T44 RH99 B33 F77 Nombre Xavier Lopez Chabelo Aristteles Tchaikovski Robin Houd Botticelli Sandro Fernndez Jos Ramn Calle Templo Atenea 111 Coliseo 122 Insurgentes 1000 Aquiles Serdn 1102 Catalua 343 Coapa 3221 FechaNac 17/12/1961 20/11/1965 03/05/1964 20/03/1979 29/03/1963 31/07/1953
Pruebe la expresin de consulta de la pgina anterior aadiendo lo que est en color rojo:
select nombre,day(FechaNac) as dia from Alumnos where month(FechaNac)=3 union select nombre,day(FechaNac) as dia from Maestros where month(FechaNac)=3
nombre,dianac(mesnac=3(Alumnos)) nombre,dianac(mesnac=3(Maestros))
Los DBMSs cuentan con atributos tipo fecha, por lo que hay funciones que usar una , day, month year pueden variar en funcin para obtener por separado cada una de las partes de la fecha:
cada DBMS Los nombres de las
select nombre,day(FechaNac) from Alumnos where month(FechaNac)=3 union select nombre,day(FechaNac) from Maestros where month(FechaNac)=3
18
1 1 1 1 3 3 3 4
En vez de:
select distinct IdAlumno from InasistAlum where fecha between '2001/03/06' and '2001/03/08' select distinct IdAlumno from InasistAlum where
MySQL
VisualFox
Alumnos
IdAlumno 1 2 3 4 5 6 7 Control 98042151 97041587 97043014 96042121 96044350 97111432 98042012 Nombre Pato Lucas Atomic Ant Mickey Mouse Johnny Bravo Robin Hood Oso Yogui Hrcules Calle Zarco 123 Negrete 1002 Fresno 1410 Patoni 100 Aquiles Serdn 1102 Victoria 345 Jurez 543 Colonia Centro Del Lago Real del Prado Centro Nueva Vizcaya Centro Centro FechaNac 07/02/1981 24/03/1982 23/06/1981 31/03/1982 20/03/1979 11/04/1980 24/09/1981 CURP LP11 AA22 MM33 JB44 RH99 OY88 HH66
Es til cuando no es posible resolver consultas aunque los atributos tengan dominio atmicos. Se aplica a atributos char empleando los smbolos % y _ para representar secciones del valor del atributo.
Caracter % (representa una subcadena de cualquier tamao dentro del valor del atributo) Caracter _ (representa a cualquier carcter dentro del valor del atributo)
Fund. Bases de Datos Ing. Felipe Alans Gonzlez -ITD21
Encontrar a los alumnos que tienen un nmero de control que no corresponde al I.T.D. (valor distinto de '04' en las posiciones 3 y 4).
select * from Alumnos where control not like '_ _04%'
Esta consulta no sera resuelta tan fcilmente si el atributo control fuera de tipo numrico.
Maestros
IdMaestro 1 2 3 4 5 6 CURP X11 A22 T44 RH99 B33 F77 Nombre Xavier Lopez Chabelo Aristteles Tchaikovski Robin Hood Botticelli Sandro Fernndez Jos Ramn Calle Templo Atenea 111 Coliseo 122 Insurgentes 1000 Aquiles Serdn 1102 Catalua 343 Coapa 3221 FechaNac 17/12/1961 20/11/1965 03/05/1964 20/03/1979 29/03/1963 31/07/1953
MySQL
select * from Maestros where Calle like 'C%' select Nombre from Maestros where Nombre like '_o%'
select * from Materias where nombre like '%datos%' select * from Materias where nombre like '%DATOS%'
VisualFox
select * from Materias where lower(nombre) like '%datos%' select * from Materias where upper(nombre) like '%DATOS%'
Fund. Bases de Datos Ing. Felipe Alans Gonzlez -ITD24
Alumnos
IdAlumno 1 2 3 4 5 6 7 Control 98042151 97041587 97043014 96042121 96044350 97111432 98042012 Nombre Pato Lucas Atomic Ant Mickey Mouse Johnny Bravo Robin Hood Oso Yogui Hrcules Domicilio Zarco 123, Centro Negrete 1002, Fracc. Del Lago Fresno 1410, Col. Real del Prado Patoni 100, Centro Aquiles Serdn 1102, Col. Nueva Vizcaya Victoria 345, Centro Calle Real # 300 Int. 1 Col. Loma Dorada FechaNac 07/02/1981 24/03/1982 23/06/1981 31/03/1982 20/03/1979 11/04/1980 24/09/1981 CURP LP11 AA22 MM33 JB44 RH99 OY88 HH66
Alumnos
IdAlumno 1 2 3 4 5 6 7 Control 98042151 97041587 97043014 96042121 96044350 97111432 98042012 Nombre Pato Lucas Atom ic Ant Mickey Mouse Johnny Bravo Robin Hood Oso Yogui Hrcules Calle Zarco Negrete Fresno Patoni Aquiles Serdn Victoria Real NumExt 123 1002 1410 100 1102 345 300 NumInt Colonia Centro Fracc. del Lago Real del Prado Centro Nueva Vizcaya Centro Loma Dorada FechaNac 07/02/1981 24/03/1982 23/06/1981 31/03/1982 20/03/1979 11/04/1980 24/09/1981 CURP LP11 AA22 MM33 JB44 RH99 OY88 HH66
Clusula Order by
Alumnos
IdAlumno 1 2 3 4 5 6 7 Control 98042151 97041587 97043014 96042121 96044350 97111432 98042012 Nombre Pato Lucas Atom ic Ant Mickey Mouse Johnny Bravo Robin Hood Oso Yogui Hrcules Calle Zarco Negrete Fresno Patoni Aquiles Serdn Victoria Real NumExt 123 1002 1410 100 1102 345 300 NumInt Colonia Centro Fracc. del Lago Real del Prado Centro Nueva Vizcaya Centro Loma Dorada FechaNac 07/02/1981 24/03/1982 23/06/1981 31/03/1982 20/03/1979 11/04/1980 24/09/1981 CURP LP11 AA22 MM33 JB44 RH99 OY88 HH66
Alumnos
IdAlumno 1 2 3 4 5 6 7 Control 98042151 97041587 97043014 96042121 96044350 97111432 98042012 Nombre Pato Lucas Atom ic Ant Mickey Mouse Johnny Bravo Robin Hood Oso Yogui Hrcules
Obtener una relacin con el domicilio y nombre de los alumnos ordenada en primer lugar por la colonia, en 2 lugar por la calle y por ltimo nmeros exterior e interior.
select Colonia,Calle,NumeroExt,NumeroInt,Nombre from Alumnos order by Colonia,Calle,NumeroExt,NumeroInt
Aada tuplas con colonia y calle iguales para observar el efecto de la expresin.
select count(*) from Materias select count(nombre) from Materias select count(creditos) from Materias
Nmero de tuplas de cada grupo (en este caso con la misma colonia).
Relacin de los motivos de inasistencia y el total de inasistencias por cada motivo ordenada en forma descendente por el total.
select motivo,count(*) from InasistAlum group by motivo order by 2 desc
Fund. Bases de Datos Ing. Felipe Alans Gonzlez -ITD32
No llevan group by, por lo que solo formar un grupo (con todas las tuplas).
Fund. Bases de Datos Ing. Felipe Alans Gonzlez -ITD31
select motivo,count(*) from InasistAlum group by motivo order by 2 desc select motivo,count(*) from InasistAlum group by motivo order by 2 desc having count(*)>1 select motivo,count(*) as faltas from InasistAlum group by motivo order by faltas desc having faltas>1
Fund. Bases de Datos Ing. Felipe Alans Gonzlez -ITD33
select IdAlumno,count(*) as faltas from InasistAlum group by IdAlumno order by faltas desc
Nmero de inasistencias de cada alumno por mes, ordenadas de ms a menos considerando solo las inasistencias por motivos deportivos.
select IdAlumno,month(fecha) as mes,count(*) as faltas from InasistAlum where motivo="Deportes" group by IdAlumno,mes order by faltas desc
Fund. Bases de Datos Ing. Felipe Alans Gonzlez -ITD34
1 1 1 1 3 3 3 4
Encontrar el nmero mximo de crditos. select max(creditos) from Materias Nmero mnimo de crditos. select min(creditos) from Materias Nmero de crditos promedio de todas las materias. select avg(creditos) from Materias o select sum(creditos)/count(*) from Materias
Fund. Bases de Datos Ing. Felipe Alans Gonzlez -ITD36
select IdAlumno, count(distinct fecha) as TotDias, count(*) as TotFaltas from InasistAlum group by IdAlumno order by TotDias desc,TotFaltas desc
Como en el Ncleo de SQL Estndar no se permiten subconsultas en from, para apegamos a la expresin en Algebra Relacional del problema anterior, se puede enviar la primera relacin resultante a una tabla temporal. La consulta siguiente est expresada en Visual Fox:
Subconsulta
select curp from Alumnos ; where curp not in (select curp from Maestros) ; into dbf Temp select Alumnos.control from Alumnos,Temp ; where Alumnos.curp=Temp.curp drop table Temp
Alumnos.control
(Alumnos.curp=Temporal.curp(Alumnos X
Temporal(curp(Alumnos) -
curp(Maestros))))
Fund. Bases de Datos Ing. Felipe Alans Gonzlez -ITD37
4.4.1 Subconsultas
Sin embargo no es necesaria la complejidad de la expresin anterior ya que el operador in (usado en este caso con not) nos permite expresar consultas como esa de manera ms simple: select control from Alumnos where curp not in (select curp from Maestros)
A continuacin unos ejemplos ms: select paterno,materno,nombre from Alumnos where curp not in (select curp from Maestros) select paterno,materno,nombre from Personas where IdPersona not in (select IdPersona from Maestros)
Esta expresin resultar en todas las personas que no son maestros (no solo los alumnos)
39
4.4.1 Subconsultas
4.4.1 Subconsultas
Encontrar el nmero de crditos mayor de la relacin materias. Si no tuvieramos: select max(creditos) from Materias Probablemente trataramos de apegarnos a la expresin:
Desde luego lo mejor es usar funciones de agrupacin (que acabamos de estudiar pginas atrs): select max(creditos) from Materias Y para obtener los nombres y claves de las materias con mayor nmero de creditos, la expresin en SQL sera simple: select nombre,clave from Materias where creditos in (select max(creditos) from Materias)
creditos(Materias)
- Materias.creditos(Materias.creditos<Materias2.creditos(Materias
Materias2(Materias)))
select distinct creditos from Materias where creditos not in (select Materias.creditos from Materias,Materias Mat2 where Materias.creditos<Mat2.creditos)
Fund. Bases de Datos Ing. Felipe Alans Gonzlez -ITD41
4.4.1 Subconsultas
4.4.1 Subconsultas
Interseccin
La misma funcin de la operacin intersect se logra mediante el operador de conjuntos in (Aunque algunos DBMSs incluyen intersect por mercadotecnia, no pertenece al Ncleo de SQL Estndar) Encontrar las IdPersona de aquellos maestros que son tambin alumnos. IdPersona(Maestros) IdPersona(Alumnos)
Operador in
Alumnos con el primer apellido de la lista select nombre,paterno,materno from Alumnos where paterno in (select min(paterno) from Alumnos) Lista de los alumnos ms jovenes de toda la escuela select paterno,materno,nombre from Alumnos where fechanac in (select max(fechanac) from Alumnos)
Fund. Bases de Datos Ing. Felipe Alans Gonzlez -ITD44
select IdPersona from Maestros where IdPersona in (select IdPersona from Alumnos)
Fund. Bases de Datos Ing. Felipe Alans Gonzlez -ITD43
4.4.1 Subconsultas
4.4.1 Subconsultas
Operadores para comparacin de Conjuntos Consulta: Obtener las claves y nombres de las materias con menor nmero de crditos:
select clave,nombre from Materias where creditos<=all (select creditos from Materias)
select distinct creditos from Materias where creditos>=all (select creditos from Materias)
x >=all y significa: el atributo x sea mayor o igual a todos los elementos del conjunto y >all no producira ningn resultado (en esta consulta particular) ya que no hay un valor mayor a s mismo.
45
46
4.4.1 Subconsultas
Consulta: Encontrar a todos los Profesores que sean de menor edad que al menos un Alumno.
select * from Maestros where fechanac>some(select fechanac from Alumnos)
4.4.1 Subconsultas
Divisin
No existe en el Ncleo de SQL estndar (al menos al momento de escribir estas notas) un operador equivalente a la divisin del Algebra Relacional
x > some y significa: el valor del atributo x sea mayor al menos a uno de los elementos del conjunto y
Fund. Bases de Datos Ing. Felipe Alans Gonzlez -ITD47
4.4.1 Subconsultas
Divisin
SQL (Visual Fox):
4.4.1 Subconsultas
Divisin
Puede escribirse un programa, utilizando cdigo SQL, en el lenguaje del DBMS (Este ejemplo es de Visual Fox):
select IdMaesAsist,NombreCurs from CursosActualizacion into dbf r1 select distinct NombreCurs from CursosActualizacion into dbf r2 select distinct IdMaesAsist from r1 into dbf temp1 select * from temp1,r2 into dbf temp2 select distinct IdMaesAsist from temp2 where IdMaesAsist+NombreCurs ; not in (select IdMaesAsist+NombreCurs from r1) into dbf temp3 select * from temp1 where IdMaesAsist not in (select * from temp3) drop table r1 drop table r2 drop table temp1 drop table temp2 drop table temp3
Fund. Bases de Datos Ing. Felipe Alans Gonzlez -ITD49
local m_fecha1 local m_fecha2 set date french set century on clear m_fecha1 = ctod('') m_fecha2 = ctod('') @0,0 say 'Este Programa obtiene los datos de los profesores que han asistido' @1,0 say a todos los cursos de actualizacin impartidos durante cierto perodo @3,0 say 'Fecha Inicial:' get m_fecha1 @4,0 say 'Fecha Final:' get m_fecha2 read if lastkey()=27 return endif
Fund. Bases de Datos Ing. Felipe Alans Gonzlez -ITD50
4.4.1 Subconsultas
Divisin
select IdMaesAsist,NombreCurs from CursosActualizacion ; where (Fechaini>=m_fecha1) and (Fechaini<=m_fecha2); into dbf r1 select distinct NombreCurs from CursosActualizacion ; where (Fechaini>=m_fecha1) and (Fechaini<=m_fecha2); into dbf r2 select distinct IdMaesAsist from r1 into dbf temp1 select * from temp1,r2 into dbf temp2 select distinct IdMaesAsist from temp2 ; where IdMaesAsist+NombreCurs not in ; (select IdMaesAsist+NombreCurs from r1) into dbf temp3 select * from temp1 where IdMaesAsist not in (select * from temp3) ; into dbf temp4 select IdMaesAsist,Nombre from temp4,Maestros ; where temp4.IdMaesAsist=Maestros.IdMaestro
Fund. Bases de Datos Ing. Felipe Alans Gonzlez -ITD51
4.4.1 Subconsultas
Divisin
close all drop table r1 drop table r2 drop table temp1 drop table temp2 drop table temp3 drop table temp4
Se crea el programa con MODIFY COMMAND <nombre> ..... ........ y se ejecuta con DO <nombre>
52
Relacin Horarios
IdHorario IdGrupo Dia Hora1 Hora2 Salon 1 1 L 16:00 17:00 T1 2 1 Ma 16:00 17:00 T1 3 1 Mi 16:00 17:00 T1 4 1 J 16:00 17:00 T1 5 2 L 17:00 18:00 T1 6 2 Ma 17:00 18:00 T1 7 2 Mi 17:00 19:00 LC2 8 2 J 17:00 18:00 T1 9 2 V 17:00 18:00 T1 10 3 L 10:00 11:00 S4 11 3 Ma 10:00 11:00 S4 12 3 Mi 10:00 11:00 S4 13 3 J 10:00 11:00 S4 14 3 V 10:00 11:00 S4 15 4 J 07:00 10:00 T7 16 4 V 07:00 10:00 T7 17 5 V 07:00 11:00 T9
Relacin DiasLaborables
Dia L Ma Mi J V
inner (interno) es una palabra opcional, join por si solo implica una junta. La expresin de arriba (con inner join o join unicamente) equivale exactamente a:
select * from Alumnos,InasistAlum where Alumnos.IdAlumno=InasistAlum.IdAlumno
outer (externo) es una palabra opcional, ya que left o right implican una junta (join) externa. left signfica que deben aparecer todas las tuplas de la relacin de la izquierda aunque no tengan tuplas correspondientes de la relacin de la derecha. right significa que deben aparecer todas las tuplas de la relacin de la derecha aunque no tengan tuplas correspondientes a la relacion de la izquierda.
select IdMaestro,IdMateria,IdPeriodo,Paquete,Horario from Grupos,GposMaes where Grupos.IdGrupo=GposMaes.IdGrupo select IdMaestro,IdMateria,IdPeriodo,Paquete,Horario from Grupos left join GposMaes on Grupos.IdGrupo=GposMaes.IdGrupo
Con la consulta con from se obiene una relacin que incluye solo los grupos que tienen profesor asignado, con left join se obtiene una lista de todos los grupos, tengan profesor o no.
GposMaes
IdGpoMae IdGrupo IdMaestro
Maestros
2 2 1 5 6 2
IdMaestro 1 2 3 4 5 6 Nombre Xavier Lopez Chabelo Aristteles Tchaikovski Robin Hood Botticelli Sandro Fernndez Jos Ramn Domicilio Templo Coliseo Insurgentes . Aquiles .. Catalua Coapa FechaNac 17/12/1961 20/11/1965 03/05/1964 20/03/1979 29/03/1963 31/07/1953 CURP X11 A22 T44 RH99 B33 F77
1 2 3 4 5 6
1 2 3 4 7 6
4.5 Vistas
La creacin de vistas permite al DBA, mostrar al usuario los datos que requiere en la forma ms conveniente de acuerdo al nivel de cada persona. Se crean a partir de expresiones de consulta, por lo tanto, son consultas. Las tablas deben estar agrupadas en una base de datos, por lo que hay que usar create/open database, create/add table.
Aunque algunos DBMSs lo incluyen como un equivalente al Producto Natural Por lo tanto, hay que usar, como siempre, un producto cartesiano, una seleccin y una proyeccin. Con las Vistas (que veremos posteriormente) se pueden simplificar las consultas sin necesidad de natural join.
Fund. Bases de Datos Ing. Felipe Alans Gonzlez -ITD59
Ejemplos:
Una vista como esta hace innecesario el producto natual, ya que cuando deseemos ver combinados los Como una vista es una consulta y las consultas son datos de las tablas relaciones, pueden usarse como tales dentro de Alumnos e otra expresin SQL. InasistAlum, solo debemos usar la Vista FaltasAlumnos como si select * from FaltasAlumnos fuera una tabla
4.5 Vistas
4.5 Vistas
Se pueden crear vistas sobre vistas para resumir datos: create view ResumenFaltasAlumnos as select control,paterno,materno,nombre,count(*) as total from FaltasAlumnos group by control order by total desc Cuando se abre una vista, en ese momento se realiza la consulta correspondiente. La ventaja ms grande de las vistas es que simplifican el esquema a los usuarios.
select nombre,paterno,fecha from FaltasAlumno where hora='16:00' select * from FaltasAlumnos order by control where motivo=Injustificada
Fund. Bases de Datos Ing. Felipe Alans Gonzlez -ITD61
62
4.5 Vistas
Un buen esquema para datos de maestros y alumnos podra ser el siguiente, pero para manipular ms fcilmente los dayos, conviene crear vistas adecuadas para reunir los atributos de personas con alumnos y personas con maestros.
Tabla PERSONAS
IdPersona 1 2 3 4 5 6 7 8 9 10 Nombre Parejita Johannes Benito Luis Padre Jos Lorena Aristteles Pyotr Ilich Sandro Apellidos Lpez Gutenberg Jurez Pasteur Abraham Revueltas Ochoa De Tesalnica Tchaikovski Botticelli Calle Zarco Negrete Patoni Patoni Oriente Negrete Fresno Pino Surez Zaragoza Jurez Numero 123 650 100 234 347 1002 1410 542 471 870 FechaNac 07-02-1981 12-01-1901 31-03-1982 20-03-1850 11-04-1890 24-03-1982 23-06-1981 23-07-1905 13-08-1920 07-09-1919 Telfono 819-27-37 823-15-00 800-25-25 818-04-11 818-98-75 803-17-13 800-06-06 801-00-00 874-65-02 830-77-55 CURP L1 G2 J4 P1 A0 R7 O1 A1 T4 B9
4.5 Vistas A los usuarios de la BD sera mas sencillo ver los datos y manipularlos de la siguiente forma:
Tabla ALUMNOS
IdAlumno 1 2 3 4 5 Control 98040151 97040587 97040014 96040121 98040150 EscuelaProcede Prepa PUMAS Palacio Nacional Colegio Vizcaya LPGA Colegio Alemn
Tabla MAESTROS GradoEstudios IdPersona IdMaestro RFC 1 PP11 Doctorado 1 2 AA00 Licenciatura 3 3 AA11 Licenciatura 6 4 GG22 Maestra 7 5 TT44 Maestra 2 6 BB99 Maestra
Ing. Felipe Alans Gonzlez -ITD-
IdPersona 4 5 8 2 9 10
63
La redundancia aparente no afecta de ninguna manera ya que internamente el nombre, domicilio, etc etc solo se encuentran una vez en la base de datos, por cada persona (aunque fuera alumno de maestra y profesor de licenciatura). Algunos DBMSs incluso permiten a los usuarios hacer modificaciones a travs de las vistas Ms sencillo para el usuario ya que los atributos los tiene en sola tabla. Ideal para el DBA ya que puede disear correctamente.
Comandos de DDL: CREATE DATABASE, OPEN DATABASE, CREATE TABLE, ADD TABLE, ALTER TABLE, etc.
Nombre de la Base de Datos create table Alumnos ( IdAlumno int auto_increment primary key, control char(8) unique, curp char(18) unique) El DBMS paterno char(20), impedir que se materno char(20), aadan tuplas nombre char(20), con valores calle char(15), iguales en las numeroExt numeric(8), llaves unique numeroInt char(6), y primary colonia char(15), fechaNac date )
Fund. Bases de Datos Ing. Felipe Alans Gonzlez -ITD66
alter table Alumnos add tutor char (30) select * from Alumnos
alter table Alumnos modify column tutor char(45) select * from Alumnos
68
1 1 1 1 3 3 3 4
delete from InasistAlum where IdAlumno in (select IdAlumno from InasistAlum group by IdAlumno having count(*)=1)
Fund. Bases de Datos Ing. Felipe Alans Gonzlez -ITD-
Si su DBMS no soporta esta sintxis, hay que guardar la subconsulta en una tabla temporal para poder completarla
70
69
Califics
1 1 1 1 3 3 3 4
Update <relacin> set <expresin asignacin> where <condicin> update Materias set creditos=HorasTeo*3+HorasPra*2 where clave like '18%'
Fund. Bases de Datos Ing. Felipe Alans Gonzlez -ITD71
update Califics set resultado = resultado - 1 where IdAlumno in (select IdAlumno from InasistAlum group by IdAlumno having count(*)>2)
Fund. Bases de Datos Ing. Felipe Alans Gonzlez -ITD-
IdAlumno IdMateria 1 1 1 2 1 5 2 1 2 3 2 4 3 1 3 2 3 3 4 2 4 5 4 6 5 1 6 2 6 4 7 2
72