Base De Datos
Enviado por jsiguencia • 21 de Noviembre de 2013 • 2.122 Palabras (9 Páginas) • 249 Visitas
En el ejemplo anterior podemos hacer una restriccion de check que nos asegure que el campo sea positivo y no muy alto. Check (sueldo>0 and sueldo<5000) Ejemplo Create table empleado (Id integer not null, Codigo char(8) not null, Nombre char(40)not null, Sueldo decimal (16,2) not null Constrain ch_sueldo check (sueldo >0 and Sueldo<5000) ) Otras restricciones que se pueden usar, es la integridad referencial. El principio fundamental en la integridad referencial en base de datos es que no debe haber registros huérfanos. Esto se refiere a las relaciones entre tablas. Por ejemplo si se tiene una tabla producto, la cual tiene un atributo tipo producto y este demana a otra tabla que es tipo de productos, se espera que cada registro de la tabla producto se relacione con uno de la tabla tipo de producto. Tipo de productos: TABLA Nota. En el campo tipo no puede ir ningún valor que no este en la tabla tipo producto. Estas restricciones se implican en la clave foranea de una tabla, la cual permite que un registro de la tabla hijo (producto) se relacione con un registro de la tabla (tipo de producto) EJERCICIOS RESUELTOS 1.- El listado de los alumnos que estan en el paralelo =`002` de la materia de algevra lineal (Materia.codigo=`003`) en el segundo termino del año 2002 SELECT Alumno. * From alumno, registro, curso, materia, termino. Where Alumno.Id=Registro.Alumno_id And registro. Curso-id= curso.id And Where Alumno.id=Materia.id AndMateria.codigo=`003` and curso.termino_id=termino.id And termini.termino=`2` Qnd termino.anio='2002' 2.- Cuales son las notas que tiene el alumno con codigo ='0233' en primer termino del año 2002. Select Alumno.nombre,materia,descripcion,registro,nota2,registro.nota3 From alumno,registro,curso,materia,termino Where Aluimno.codigo=`0233` And alumno.id=registro.alumno_id and registro.curso_id=curso.id and curso.materia_id=materia.id and curso.termino_id=termino.id and termino.termino =`1` and termino.Anio=`2002` 3.- Cuales son las notas que tiene el alumno con codigo=`0233` en toda su vida estudiantil y ordenado por año y termino que cogio las materias. SELECT Anio, termino, alumno.nombre,materia,descripción,registro.nota1,registro.nota2,registro.nota3 From alumno.codigo=`0233` And Alumno.id=registro.Alumno-id And registro.curso_id = curso.id And Curso.materia_id = materia.id curso.termino_id = termino.id Order anio, termino 4.- Cuales son los alumnos que estan tomando la materia de base de datos avanzadas (codigo =`023`) en el 2 termino del año 2002 y no han tomado la materia series de tiempo (codigo=`059`). Primero se selecciona los alumnos que estas tomando la materia base de datos avanzadas y después se realiza un sub query de NOT EXISTS para filtrar que estos alumnos no hayan tomado en ningún momento series de tiempo. SELECT Alumno. * FROM alumno, registro, curso, materia, termino. WHERE Alumno.id = registro.Alumno_id and Registro.Curso_id = curso.id and curso.materia_id = materia.id and materia.codigo =`023` and curso.termino_id = termino.id and termino.termino =`2` and termino.anio=`2002` AND NOT EXISTS(SELECT *FROM registro, curso, materia WHERE Alumno.id=registro.alumno_id and registro.curso_id = curso.id and curso.materia_id = Materia.id and Materia.codigo=`059`) 5.-Cuales son 5 primeros profesores que tienen mas alumnos registrados en todos sus paralelos en segundo termino del año 2002. SELECT Top 5 profesor. Nombre, Count(registro.*) As Cantidad From profesor, curso, Termino, registro Where profesor.id= curso.profesor.id And Termini.termino=`2` and Termino.Anio=`2002` Group by profesor.nombre Order by cantidad Desc 6.- Cuales son los cursos que tienen mas de 40 alumnos en el segundo termino del año 2002. SELECT curso.materia_id,curso.paralelo,count(registro.*) AS cantidad from curso,termino_id=registro.curso_id and Curso.termino_id=termino.id and termino.termino=`2` and termino.anio=`2002` Having count (registro.*)>40 Group by curso.materia_id, curso.paralelo 7.- Cuales son profesores que tiene en promedio en todos sus paralelo mas de 35 alumnos en segundo termino del año 2002. Aqui en este query se utiliza la propiedad de la funcion count() la cual es: Count(*): cuenta la cantidad de registros que arroja al query Count(Distinct columna): Cuenta la cantidad de valores diferentes en la columna. El promedio que tiene un profesor en sus paralelos es: Cantidad total de estudiante \ numero de paralelos = count (registro.*)/count(curso.id) SELECT profesor.nombre, count(registro.*)\count(distinct curso.id) as cantidad from profesor, curso, termino, registro WHERE profesor.id= curso.profesor.id And Curso.id = registro.curso_id and curso.termino_id = Termino.id And Termino.termino = `2` And termino.anio=`2002` HAVING cout (registro.*)/count (curso.id)>35 GROUP BY profesor.nombre 8.- Cuales son los alumnos que asisten a por lo menos un paralelo del profesor John Ramirez (codigo=`004`) en el termino 2 del año 2002 Este query se lo puede hacer o con subquery EXISTS o con un inner join (join normal) Con EXISTS SELECT alumno.* FROm alumno WHERE EXISTS (SELECT * FROM Registro, curso, profesor, termino WHERE Alumno.id = registro.alumno_id And Registro.curso_id =curso.id and curso.profesor_id = profesor.id AND profesor.codigo=`004` and curso.termino_id = termino.id and termino.termino = `2`And termino.anio =`2002`) Con join normal SELECT alumno.* From alumno,registro,curso,profesor,termino WHERE alumno.id = registro. Alumno_id AND registro.curso_id = curso.id and curso.profesor_id = profesor.id And profesor.codigo =`004` and curso.termino_id = termino.id And termino.termino =`2` AND termino.anio=`2002` 9.-Los alumnos que no han tomado la materia del moneda y banca (codigo=`014`) En este query se debe usar un subquery con la clausula NOT EXISTS la cual no es equivalente a un join interno. SELECT alumno.* From Alumno Where not exists (select * from , materia,registro,curso Where alumno.id = registro.alumno _id and Registro.curso_id= curso.id and curso.materia_id.codigo=`014`) 10.- cuales de la materias que necesitan aprobar o tomar para coger la materia de Estadistica computacional (codigo=`052`) Select materia.* from materia,requisito where materia.codigo=`052` and materia.id =requisito.MateriaAnterior_id 11.- El listado de la materias aprobadas por el alumno de codigo =`6230` Select materia.nombre,notafinal from materia,curso,alumno,registro Where materia.id = curso.materia-id and curso.id=registro.curso_id and registro.alumno_id = Alumno.id and Alumno.codigo = '6230` and registro.notafinal>=60 12.- Cuales son las materias que puede coger el alumno de codigo =`6230` de acuerdo a su lista de materias aprobadas y al prerequisito de las materias Este query se lo puede hacer usando joins pero se prefiere Exists porque es mas claro Se escoge las materias cuyo requisito.MateriaAnterior_id el alumno ya lo aprobo Select materia.is From Materia, requisito Where materia.id = Requisito.materia_id and TipoRequisito
...