Ejercicio para Bases de datos

Iniciado por KaRaLLo, 1 Febrero 2012, 17:39 PM

0 Miembros y 1 Visitante están viendo este tema.

KaRaLLo

Bueno, me parece bién postear este ejercicio por si alguien esta interesado este temilla, es un boletín de ejercicios de BDD que tengo que entregar xD más abajo pondré mis soluciones, a ver que os parecen.


CONSULTAS BÁSICAS

1.- Diseña la base de datos para una librería que desea mantener la información de cada tema (cadena de caracteres de longitud fija 15 única y no nula), el estante en que se ubica (1 carácter) y el número de ejemplares de que dispone (valor numérico longitud 2).

Introduce datos de forma aleatoria, teniendo en cuenta que los temas encajan dentro de la siguiente lista: HISTORIA, FICCIÓN, MEDICINA, INFORMATICA, ARTE, RELIGION. Y que el estante es una letra del abecedario.

Realiza las siguientes consultas:

a) Obtener todos los datos cuyo tema sea "FICCION" usando "=" y posteriormente "LIKE". ¿Es el resultado el mismo? ¿Y si modificaras la tabla asignando longitud variable al campo tema?

b) Obtener el tema, estante y ejemplares de las filas con ejemplares comprendidos entre 8 y 15.

c) Obtener las columnas tema, estante y ejemplares de las filas cuyo estante no esté comprendido entre 'B' y 'D'.

d) Obtener con una única sentencia SELECT todos los temas de la librería cuyo número de ejemplares sea inferior a los que hay en 'MEDICINA'.

e) Obtener los temas de la librería cuyo número de ejemplares no esté entre 15 y 20, ambos incluidos.




2.- En un colegio se desea almacenar la información de los alumnos (DNI [10] no nulo y único, Apellidos_Nombre [30], Dirección [30], Población [15] y Teléfono [10], todos cadenas de caracteres de longitud variable), las asignaturas que cursan (Código como valor numérico de 2 cifras no nulo y único; y Nombre, cadena de caracteres de longitud variable 20) y las notas que obtienen dichos alumnos en las diferentes asignaturas que cursen (el valor de la nota será un número de 2 cifras).

Diseña el modelo E/R, a continuación transfórmalo a Grafo Relacional, para posteriormente implementar la base de datos y sus consecuentes tablas, campos y tipos de datos.

Introduce datos aleatorios para poder realizar las consultas detalladas más abajo.

Realiza a continuación las siguientes consultas:

a) Obtener el nombre y apellidos de cada alumno, asignatura que cursa y nota obtenida en dicha asignatura.

b) Obtener los nombres y apellidos de los alumnos que han cursado 'FOL'.
Los programadores escriben código aunque sepan que no debería funcionar, pero  de todas formas lo intentan, como recompilar todo, después de eso, dios sabe porqué, funciona

KaRaLLo

Tengo ya la mitad, me queda la otra mitad que la haré mas tarde

1.- Diseña la base de datos para una librería que desea mantener la información de cada tema (cadena de caracteres de longitud fija 15 única y no nula), el estante en que se ubica (1 carácter) y el número de ejemplares de que dispone (valor numérico longitud 2).

Introduce datos de forma aleatoria, teniendo en cuenta que los temas encajan dentro de la siguiente lista: HISTORIA, FICCIÓN, MEDICINA, INFORMATICA, ARTE, RELIGION. Y que el estante es una letra del abecedario






TEMACHAR15
ESTANTECHAR1
EJEMPLARESSMALLINT2

Y asi los datos :








HISTORIAB40
FICCIONA25
MEDICINAF12
INFORMATICAE56
ARTED80
RELIGIONC15


Querys :

b) Obtener el tema, estante y ejemplares de las filas con ejemplares comprendidos entre 8 y 15.

SELECT TEMA,ESTANTE,EJEMPLARES FROM LIBROS WHERE EJEMPLARES BETWEEN  8 AND 15

c) Obtener las columnas tema, estante y ejemplares de las filas cuyo estante no esté comprendido entre 'B' y 'D'.

SELECT TEMA,ESTANTE,EJEMPLARES FROM LIBROS WHERE ESTANTE NOT BETWEEN  'B' and 'D'


d) Obtener con una única sentencia SELECT todos los temas de la librería cuyo número de ejemplares sea inferior a los que hay en 'MEDICINA'.

SELECT TEMA FROM LIBROS WHERE EJEMPLARES<(SELECT EJEMPLARES FROM LIBROS WHERE TEMA='MEDICINA')

e) Obtener los temas de la librería cuyo número de ejemplares no esté entre 15 y 20, ambos incluid

SELECT TEMA FROM LIBROS WHERE EJEMPLARES NOT BETWEEN 15 and 20

Hasta aki el ejercicio 1.
Los programadores escriben código aunque sepan que no debería funcionar, pero  de todas formas lo intentan, como recompilar todo, después de eso, dios sabe porqué, funciona

KaRaLLo

#2
bueno como lo prometido es deuda, cuelgo el resultado entero del boletin, desde el principio al final :


BOLETÍN 6

CONSULTAS BÁSICAS


1.- Diseña la base de datos para una librería que desea mantener la información de cada tema (cadena de caracteres de longitud fija 15 única y no nula), el estante en que se ubica (1 carácter) y el número de ejemplares de que dispone (valor numérico longitud 2).

Introduce datos de forma aleatoria, teniendo en cuenta que los temas encajan dentro de la siguiente lista: HISTORIA, FICCIÓN, MEDICINA, INFORMATICA, ARTE, RELIGION. Y que el estante es una letra del abecedario.


SENTENCIAS DE CREACIÓN E INTRODUCCIÓN DE DATOS (LIBRERIA):

Código (sql) [Seleccionar]

# Dumping database structure for LIBRERIA
DROP DATABASE IF EXISTS `LIBRERIA`;
CREATE DATABASE IF NOT EXISTS `LIBRERIA` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `LIBRERIA`;

# Dumping structure for table LIBRERIA.LIBROS
DROP TABLE IF EXISTS `LIBROS`;
CREATE TABLE IF NOT EXISTS `LIBROS` (
 `TEMA` varchar(15) NOT NULL,
 `ESTANTE` char(1) DEFAULT NULL,
 `EJEMPLARES` smallint(2) DEFAULT NULL,
 PRIMARY KEY (`TEMA`),
 UNIQUE KEY `TEMA` (`TEMA`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

# Dumping data for table LIBRERIA.LIBROS: 6 rows
DELETE FROM `LIBROS`;
/*!40000 ALTER TABLE `LIBROS` DISABLE KEYS */;
INSERT INTO `LIBROS` (`TEMA`, `ESTANTE`, `EJEMPLARES`) VALUES
('HISTORIA', 'B', 8),
('FICCION', 'A', 20),
('MEDICINA', 'F', 12),
('INFORMATICA', 'E', 56),
('ARTE', 'D', 80),
('RELIGION', 'C', 15);
/*!40000 ALTER TABLE `LIBROS` ENABLE KEYS */;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;


Realiza las siguientes consultas:

a) Obtener todos los datos cuyo tema sea "FICCION" usando "=" y posteriormente "LIKE". ¿Es el resultado el mismo? ¿Y si modificaras la tabla asignando longitud variable al campo tema?


Código (sql) [Seleccionar]
SELECT * FROM LIBROS WHERE TEMA LIKE 'FICCION'
SELECT * FROM LIBROS WHERE TEMA='FICCION'


- El resultado es el mismo


b) Obtener el tema, estante y ejemplares de las filas con ejemplares comprendidos entre 8 y 15.
Código (sql) [Seleccionar]

SELECT TEMA,ESTANTE,EJEMPLARES FROM LIBROS WHERE EJEMPLARES BETWEEN  8 AND 15


c) Obtener las columnas tema, estante y ejemplares de las filas cuyo estante no esté comprendido entre 'B' y 'D'.

Código (sql) [Seleccionar]
SELECT TEMA,ESTANTE,EJEMPLARES FROM LIBROS WHERE ESTANTE NOT BETWEEN  'B' and 'D'


d) Obtener con una única sentencia SELECT todos los temas de la librería cuyo número de ejemplares sea inferior a los que hay en 'MEDICINA'.

Código (sql) [Seleccionar]
SELECT TEMA FROM LIBROS WHERE EJEMPLARES<(SELECT EJEMPLARES FROM LIBROS WHERE TEMA='MEDICINA')


e) Obtener los temas de la librería cuyo número de ejemplares no esté entre 15 y 20, ambos incluid

Código (sql) [Seleccionar]
SELECT TEMA FROM LIBROS WHERE EJEMPLARES NOT BETWEEN 15 and 20





2.- En un colegio se desea almacenar la información de los alumnos (DNI [10] no nulo y único, Apellidos_Nombre [30], Dirección [30], Población [15] y Teléfono [10], todos cadenas de caracteres de longitud variable), las asignaturas que cursan (Código como valor numérico de 2 cifras no nulo y único; y Nombre, cadena de caracteres de longitud variable 20) y las notas que obtienen dichos alumnos en las diferentes asignaturas que cursen (el valor de la nota será un número de 2 cifras).

SENTENCIAS DE CREACIÓN E INTRODUCCIÓN DE DATOS (COLEGIO):
Código (sql) [Seleccionar]

DROP DATABASE IF EXISTS `COLEGIO`;
CREATE DATABASE IF NOT EXISTS `COLEGIO` /*!40100 DEFAULT CHARACTER SET utf8 */;
USE `COLEGIO`;


# Dumping structure for table COLEGIO.ALUMNOS
DROP TABLE IF EXISTS `ALUMNOS`;
CREATE TABLE IF NOT EXISTS `ALUMNOS` (
 `DNI` varchar(10) NOT NULL,
 `APELLIDOS_NOMBRE` varchar(30) DEFAULT NULL,
 `DIRECCION` varchar(30) DEFAULT NULL,
 `POBLACION` varchar(15) DEFAULT NULL,
 `TELEFONO` varchar(10) DEFAULT NULL,
 PRIMARY KEY (`DNI`),
 UNIQUE KEY `DNI` (`DNI`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

# Dumping data for table COLEGIO.ALUMNOS: ~7 rows (approximately)
DELETE FROM `ALUMNOS`;
/*!40000 ALTER TABLE `ALUMNOS` DISABLE KEYS */;
INSERT INTO `ALUMNOS` (`DNI`, `APELLIDOS_NOMBRE`, `DIRECCION`, `POBLACION`, `TELEFONO`) VALUES
('25889878C', 'Martienz_Pepe_Lolo', 'Calle_Juas', 'SEVILLA', '987755465'),
('45665448K', 'Rouco_Varela_Nolo', 'Calle_Lamer', 'CORUÑA', '686987785'),
('45665884R', 'Del_Pan_Pepe', 'Calle_Roja', 'VIGO', '623154687'),
('45687998X', 'Guitierrez_Gomez_Elias', 'Calle_Nova', 'SANTIAGO', '614658779'),
('53259877Q', 'Diaz_Fernandez_Maria', 'Calle_Azul', 'MADRID', '684455664'),
('67897546S', 'Rodriguez_Alonso_Juan', 'Calle_Verde', 'BARCELONA', '651154465'),
('68798545B ', 'Fernandez_Maria_Justo', 'Calle_Madrid', 'MADRID', '987756654');
/*!40000 ALTER TABLE `ALUMNOS` ENABLE KEYS */;


# Dumping structure for table COLEGIO.ASIGNATURAS
DROP TABLE IF EXISTS `ASIGNATURAS`;
CREATE TABLE IF NOT EXISTS `ASIGNATURAS` (
 `COD_AS` tinyint(2) NOT NULL,
 `NOMBRE` varchar(20) DEFAULT NULL,
 PRIMARY KEY (`COD_AS`),
 UNIQUE KEY `COD_AS` (`COD_AS`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

# Dumping data for table COLEGIO.ASIGNATURAS: ~5 rows (approximately)
DELETE FROM `ASIGNATURAS`;
/*!40000 ALTER TABLE `ASIGNATURAS` DISABLE KEYS */;
INSERT INTO `ASIGNATURAS` (`COD_AS`, `NOMBRE`) VALUES
(1, 'FOL'),
(2, 'ORTODONCISMO'),
(3, 'LM'),
(4, 'PRG'),
(5, 'ED');
/*!40000 ALTER TABLE `ASIGNATURAS` ENABLE KEYS */;


# Dumping structure for table COLEGIO.CURSAN
DROP TABLE IF EXISTS `CURSAN`;
CREATE TABLE IF NOT EXISTS `CURSAN` (
 `DNI` varchar(10) NOT NULL,
 `COD_AS` tinyint(2) NOT NULL DEFAULT '0',
 `NOTA` int(2) DEFAULT NULL,
 PRIMARY KEY (`DNI`,`COD_AS`),
 KEY `FK_CURSAN_ASIGNATURAS` (`COD_AS`),
 CONSTRAINT `FK_CURSAN_ALUMNOS` FOREIGN KEY (`DNI`) REFERENCES `ALUMNOS` (`DNI`),
 CONSTRAINT `FK_CURSAN_ASIGNATURAS` FOREIGN KEY (`COD_AS`) REFERENCES `ASIGNATURAS` (`COD_AS`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

# Dumping data for table COLEGIO.CURSAN: ~9 rows (approximately)
DELETE FROM `CURSAN`;
/*!40000 ALTER TABLE `CURSAN` DISABLE KEYS */;
INSERT INTO `CURSAN` (`DNI`, `COD_AS`, `NOTA`) VALUES
('25889878C', 5, 6),
('45665884R', 1, 8),
('45665884R', 2, 8),
('45687998X', 1, 7),
('53259877Q', 1, 6),
('53259877Q', 2, 6),
('67897546S', 3, 10),
('68798545B ', 2, 2),
('68798545B ', 5, 4);







Diseña el modelo E/R, a continuación transfórmalo a Grafo Relacional, para posteriormente implementar la base de datos y sus consecuentes tablas, campos y tipos de datos.









Introduce datos aleatorios para poder realizar las consultas detalladas más abajo.


Realiza a continuación las siguientes consultas:

a) Obtener el nombre y apellidos de cada alumno, asignatura que cursa y nota obtenida en dicha asignatura.

Código (sql) [Seleccionar]

SELECT APELLIDOS_NOMBRE,NOMBRE,NOTA FROM ALUMNOS,ASIGNATURAS,CURSAN WHERE ALUMNOS.DNI=CURSAN.DNI and  ASIGNATURAS.COD_AS=CURSAN.COD_AS



b) Obtener los nombres y apellidos de los alumnos que han cursado 'FOL'.
Código (sql) [Seleccionar]

SELECT APELLIDOS_NOMBRE FROM ALUMNOS,CURSAN,ASIGNATURAS WHERE ALUMNOS.DNI=CURSAN.DNI AND CURSAN.COD_AS=ASIGNATURAS.COD_AS AND ASIGNATURAS.NOMBRE = "FOL"




c) Obtener los nombres y apellidos de los alumnos que tengan una nota entre 7 y 8 en 'FOL'.
Código (sql) [Seleccionar]

SELECT APELLIDOS_NOMBRE FROM ALUMNOS,CURSAN,ASIGNATURAS WHERE ALUMNOS.DNI=CURSAN.DNI AND CURSAN.COD_AS=ASIGNATURAS.COD_AS AND ASIGNATURAS.NOMBRE = "FOL" AND CURSAN.NOTA BETWEEN 7 AND 8



d) Obtener los nombres y apellidos de los alumnos que no tengan nada suspenso.

Código (sql) [Seleccionar]

SELECT APELLIDOS_NOMBRE FROM CURSAN,ALUMNOS,ASIGNATURAS WHERE CURSAN.NOTA BETWEEN 5 AND 10 AND ASIGNATURAS.COD_AS=CURSAN.COD_AS AND ALUMNOS.DNI=CURSAN.DNI

e) Obtener todas las asignaturas que contengan 2 letras 'o' en su interior y tengan alumnos matriculados de 'Madrid'.
Código (sql) [Seleccionar]

SELECT NOMBRE FROM ASIGNATURAS,CURSAN,ALUMNOS WHERE NOMBRE LIKE '%o%o%' AND ALUMNOS.DNI=CURSAN.DNI AND CURSAN.COD_AS=ASIGNATURAS.COD_AS AND POBLACION='MADRID'




f) Obtener los nombres y apellidos de los alumnos de 'Madrid' que tengan alguna asignatura suspensa.

Código (sql) [Seleccionar]

SELECT APELLIDOS_NOMBRE FROM ALUMNOS,CURSAN,ASIGNATURAS WHERE POBLACION='MADRID' AND CURSAN.NOTA<5 AND ALUMNOS.DNI=CURSAN.DNI AND CURSAN.COD_AS=ASIGNATURAS.COD_AS


g) Obtener los nombres y apellidos de alumnos que tengan la misma nota que tiene 'Díaz Fernández, María' en 'FOL' en alguna asignatura.
Código (sql) [Seleccionar]

SELECT APELLIDOS_NOMBRE FROM ALUMNOS,CURSAN,ASIGNATURAS WHERE CURSAN.NOTA=(SELECT NOTA FROM ALUMNOS,ASIGNATURAS,CURSAN WHERE ALUMNOS.APELLIDOS_NOMBRE ='DIAZ_FERNANDEZ_MARIA' AND ASIGNATURAS.NOMBRE='FOL' AND CURSAN.DNI=ALUMNOS.DNI AND ASIGNATURAS.COD_AS=CURSAN.COD_AS)
AND CURSAN.DNI=ALUMNOS.DNI AND ASIGNATURAS.COD_AS=CURSAN.COD_AS


* En esta consulta devuelve a DIAZ_FERNANNDEZ_MARIA pero como la consulta no especifica si debe aparecer o no lo dejo así, de todas formas solo habría que añadir al final AND APELLIDOS_NOMBRE !='DIAZ_FERNANDEZ_MARIA'

h) Obtener los datos de las asignaturas que no tengan alumnos.

Código (sql) [Seleccionar]
SELECT CURSAN.COD_AS FROM CURSAN,ASIGNATURAS,ALUMNOS WHERE CURSAN.COD_AS=ASIGNATURAS.COD_AS AND ALUMNOS.DNI = CURSAN.DNI  AND NOT EXISTS (SELECT CURSAN.COD_AS FROM CURSAN,ASIGNATURAS WHERE CURSAN.COD_AS=ASIGNATURAS.COD_AS)

* Hice lo que pude




i) Obtener los nombres y apellidos de los alumnos que tengan nota en la asignatura con código 1.
Código (sql) [Seleccionar]

SELECT APELLIDOS_NOMBRE FROM ASIGNATURAS,ALUMNOS,CURSAN WHERE CURSAN.DNI=ALUMNOS.DNI AND CURSAN.COD_AS = ASIGNATURAS.COD_AS AND CURSAN.COD_AS=1


j) Obtener los nombres y apellidos de los alumnos que no tengan nota en la asignatura con código 3.

Código (sql) [Seleccionar]

SELECT APELLIDOS_NOMBRE FROM ASIGNATURAS,ALUMNOS,CURSAN WHERE CURSAN.DNI=ALUMNOS.DNI AND CURSAN.COD_AS = ASIGNATURAS.COD_AS AND CURSAN.COD_AS!=3
Los programadores escriben código aunque sepan que no debería funcionar, pero  de todas formas lo intentan, como recompilar todo, después de eso, dios sabe porqué, funciona

edith-tec-programacion

aaaaa yo tambien necesitaba saber de eso muchas gracias  ;-)