Laboratorio 3 File

Anuncio
Facultad de Ingeniería
Escuela de Ingeniería de Sistemas y Computación
Bases de Datos I - Laboratorio #3: SQL 1: Consultas, Manejo de Datos, Subconsultas
Entrega: Octubre 18/2014
NORMAS PARA LA ENTREGA DE LOS LABORATORIOS
a) Coloque su nombre y dirección de correo electrónico preferida en la carátula de su informe, así como el nombre del
profesor a quien le entrega el informe. Los informes deben estar firmados por todos los integrantes del grupo, debajo
del siguiente código de ética:
<< Al firmar el presente informe, aseguramos que nuestro grupo NO ha copiado de nadie, ni dado copia a
nadie, la solución que a continuación presentamos>>
b) En su informe, coloque el nombre de los integrantes del grupo, nombre del profesor, número del grupo de Bases de
Datos y número de laboratorio presentado..
c) Organice su trabajo en carpetas, en lo posible una por cada punto del laboratorio.
d) Recuerde que es responsabilidad total y absoluta de los integrantes del grupo el verificar la existencia de la
información correspondiente al informe en el medio de almacenamiento. No se aceptan reclamos por un mal
funcionamiento de programas o por un error en la grabación de los datos del laboratorio.
e) Evidencia de la ejecución. Esto se puede realizar copiando y pegando, en el informe, las ventanas donde se
suministra información o donde se entrega información por el DBMS o programa utilizado para conectarse a la base
de datos..
f) Durante el curso no se recibirán informes de laboratorio enviados por correo electrónico, los informes deben ser
descargados en el Campus Virtual de Univalle.
Objetivos:
1.
2.
3.
4.
5.
Crear una base de datos, las tablas y sus atributos
Generar y ejecutar consultas SQL sobre una tabla.
Ejecutar actualizaciones (inserción, actualización y borrado) sobre las tuplas de una tabla.
Caracterizar el uso de las funciones agregadas
Construir consultas SQL utilizando subconsultas
Metodología:
Se debe elaborar un informa del trabajo realizado, para ello deberá describir cada una de las actividades
que se realizó y responder a las preguntas formuladas. El laboratorio debe ser desarrollado en grupos
de máximo 3 personas.
Se debe presentar un informe que debe contener las instrucciones SQL para cada punto y
además una o varias imagen(es) como evidencia de la ejecución.
1. Aspectos Básicos I
Diseño e implementación de un Esquema:
Un esquema es la forma de organizar lógicamente los objetos de una base de datos relacionados,
describiendo las principales características de dichos objetos. Un esquema puede contener: Tablas,
Vistas, Dominios, Índices, etc.
Creación de Tablas
El comando (SQL) CREATE TABLE define una tabla y debe incluir el nombre de la tabla, sus atributos,
valores por defecto y las opciones del atributo. También puede incluir otros atributos como llaves o
restricciones de comprobación (Integridad de columna). Su sintaxis general es:
CREATE TABLE [nombre de la tabla](
[nombre del atributo] [tipo] [opciones],
[nombre del atributo] [tipo] [opciones],
[nombre del atributo] [tipo] [opciones],
[otras columnas. . . . . . . . ]
);
Donde [opciones] puede ser: NOT NULL, UNIQUE, DEFAULT o PRIMARY KEY
Los tipos de dato se encuentran definidos en el manual, pero los que usará más frecuentemente son:
VARCHAR: Tipo de cadena (string) de longitud variable pero con un determinado máximo.
CHAR:
Tipo de cadena de longitud fija, necesita especificar un tamaño máximo.
INTEGER:
Tipo de dato entero, no necesita especificar un tamaño máximo.
SMALLINT: Entero pequeño, su rango va desde –32000 hasta 32000 aprox.
BIGINT:
Entero grande, de –9000000000000000000 hasta 9000000000000000000 aprox.
FLOAT:
Tipo de dato real, no necesita especificar un tamaño máximo (De 1E-37 a 1E+37)
DATE:
Tipo de dato que encapsula tanto la hora como la fecha (Formato: '26-05-1997')
DOUBLE PRECISION: Tipo de dato real, de doble precisión (desde 1E-307 a 1E+308.)
DECIMAL O NUMERIC (t,d): Dato real, guarda un valor exacto. El primer argumento indica el total de dígitos y el
segundo, la cantidad de decimales.
TIME:
Tipo de dato fecha, (hora en horas, minutos, segundos y centésimas)
BOOL:
Tipo de dato lógico o booleano (true/false).
Vamos a crear la primera Tabla:
ASIGNATURA
codA
nombreA
number
Varchar(50)
precio
Float
depto
VarChar(12)
Para ello digitamos las siguientes instrucciones:
CREATE TABLE Asignatura (
codA NUMBER NOT NULL,
nombreA VARCHAR (50) NOT NULL,
precio FLOAT NOT NULL,
depto VARCHAR,
PRIMARY KEY (codA)
);
El DBMS le mostrará un mensaje de confirmación de la creación de la tabla.
Digite ahora la siguiente instrucción:
SELECT table_name, column_name, udt_name
FROM information_schema.columns
WHERE table_name = 'Asignatura';
Para ver la composición de la tabla Asignatura.
1. Bases de datos de Notas de Alumnos en Materias
Teniendo en cuenta el siguiente esquema relacional y los tipos de datos, cree estas tablas en la base
de datos. Escriba las sentencias SQL que permitan crearlas:
ASIGNATURA
codA
number
ALUMNO
nAlum
Varchar(4)
nombreA
Varchar(50)
nombre
Varchar(20)
precio
Float
depto
VarChar(12)
apellido
Varchar(20)
direccion
Varchar(30)
telefono
Varchar(12)
NOTAS
nAlum
number
FK
codA
Varchar(50)
FK
fecha
Date
nota
Decimal (4,1)
Asignatura
codA
1
2
3
nombreA
Programación
Dibujo
Ingles
Notas
precio
91.500
28.000
38.000
Depto
InvYDes
Diseño
Lenguas
apellido
Pérez Gómez
López López
García García
direccion
CL23 # 9-60
C5 #45-10
T.22 #7-98
Alumno
nAlum
0338
0254
0168
nombre
Ana
Rosa
Juan
teléfono
92478596
92458796
92477863
nAlum
0338
0254
0168
0338
0338
0254
0168
0168
CodA
1
2
2
2
3
1
1
3
Fecha
02-02-2013
02-02-2013
02-02-2013
02-02-2013
02-06-2013
02-06-2013
02-06-2013
02-06-2013
nota
3.6
2.8
4.9
2.5
5.0
4.1
3.3
1.9
Trabajo #1 Esquema de base de datos (10 puntos)
Entre a su DBMS y trabaje los siguientes puntos:
1. Muestre la tabla ASIGNATURA.[3]
2. Cree la tabla ALUMNO. Muestre como se ve la tabla.[3]
3. Cree la tabla NOTAS. Muestre como se ve la tabla.[2]
4. No olvide crear las llaves primarias para cada tabla!!...Como se hace?[2]
2. Aspectos Básicos II
Inserción de Datos
Una vez creado el esquema de la base de datos se procede, la mayoría de las veces, a realizar la carga
de los datos dentro de las tablas.
La forma más fácil de introducir los datos en la tabla es utilizar el comando de inserción INSERT. Cuya
sintaxis es la siguiente:
INSERT INTO nombre_de_la_tabla ( atributos_a_insertar ) VALUES ( valores_a_insertar );
La cláusula (atributos_a_insertar) es opcional, solo se usa cuando los atributos a los que se le va a
insertar valores no son todos los atributos de la tabla.
Digite:
INSERT INTO ASIGNATURA (codA, nombreA, precio) VALUES (1, ‘Programación’, 91500);
El DBMS mostrará un mensaje de ejecución exitosa.
Para ver todos los registros ingresados a la tabla Asignatura, escriba:
select * from Asignatura;
Trabajo #2 (12 puntos)
6. Ahora cargue las tablas creadas anteriormente con los registros sugeridos en el enunciado y muestre los
resultados finales. Recuerde que debe “cargar” los datos previamente, porque más adelante hay consultas
que debe resolver. Escriba las instrucciones SQL necesarias. (6 pts)
7. Escriba las sentencias SQL para insertar correctamente 10 registros en la tabla Asignatura. (2 pts)
8. Insertar correctamente 10 registros nuevos en la tabla Alumno, uno de ellos con nAlum = 1111. (2 pts)
9. Insertar correctamente 10 registros en la tabla Notas. (2 pts)
3. Aspectos Básicos III
Consultas Básicas I
La sentencia SQL mas básica es la consulta, que es una sentencia SQL que usa el comando SELECT para
recuperar la información contenida en las tablas de la base de datos. Esta sentencia muestra los datos que
han sido insertados o actualizados en las tablas que nosotros indiquemos.
Estructura de una consulta: La consulta más simple es aquella que muestra toda la información de una
tabla escogida. Para empezar debe saber que la estructura de una consulta simple es la siguiente:
SELECT [Lista de atributos a seleccionar]
FROM [nombre de las tablas que contienen los datos]
WHERE [restricciones aplicadas a la consulta];
Si se desea obtener todos los atributos de una tabla se puede usar el comodín * para remplazar la lista de
atributos, además, la cláusula WHERE no es obligatoria dentro de una consulta, aunque es realmente
necesaria cuando no se desean trabajar todos los datos de la tabla, sino aquellos que cumplen una condición
especifica, como lo pueden ser: (<, >, =, etc.). Ahora digite:
SELECT * FROM Asignatura;
El DBMS le mostrará un listado con todos los registros existentes dentro de la tabla Asignatura.
Para obtener columnas o atributos específicos de una tabla y que a su vez cumplan una condición dada, se
hace de forma similar a como se haría para realizar la consulta sin una condición especifica, ahora considere
el siguiente ejemplo:
SELECT codA, nombreA, precio
FROM Asignatura
WHERE nombre LIKE ('Prog%');
El resultado de ejecutar esta instrucción, será un listado de las asignaturas cuyo nombre inicia por ‘Prog’.
Trabajo #3 (15 puntos)
Escriba en SQL las siguientes consultas:
10. Obtener el nombre y su departamento de la asignatura que tiene el código igual a 2. (3 pts)
11. Obtener nombre, apellido y dirección de los alumnos con número de alumno igual a 0254. (3 pts)
12. Obtener el nombre del alumno y nombre de la asignatura en la que obtuvo nota aprobatoria de la
materia (mayor a 3.0). (3 pts)
13. Obtener el nombre del alumno matriculado en Junio 2 de 2013. (3 pts)
14. Obtener el nombre de las asignaturas del departamento de Lenguas. (3 pts)
Recuerde que debe crear los datos que permitan dar una respuesta a las consultas. Consulta
sin respuesta no se tendrá en cuenta.
4. Aspectos Básicos IV
Actualización de Información
Para la actualización de los datos existentes en la base de datos, se pueden usar las sentencias estándar
para borrado (DELETE) y actualización (UPDATE) de datos.
La primera permite la eliminación de una o más filas de una tabla, y su sintaxis es la siguiente:
DELETE FROM [nombre de la tabla]
WHERE [condiciones para el borrado];
Digite la instrucción:
DELETE
FROM Alumno
WHERE nAlum = 1111;
El resultado de la instrucción anterior será la eliminación del registro que corresponde al alumno con
identificación 1111. Puede verificar lo anterior?
Para realizar la actualización de los datos de un registro, se utiliza la sentencia UPDATE la cual
permite modificar los valores de las columnas en una o más filas de una tabla, su sintaxis de uso es:
UPDATE [nombre de la tabla]
SET [atributo a cambiar = nuevo valor, atributo a cambiar = nuevo valor,...]
WHERE [condición para ejecutar la actualización];
Digite la instrucción:
UPDATE Asignatura
SET precio = 43250
WHERE codA = 3;
Ahora realice una consulta sobre la tabla modificada para que observe que sucede al ejecutarse la
instrucción anterior, así:
SELECT * FROM Asignatura
WHERE codA = 3;
Se podrá observar que ahora el nuevo precio de la asignatura con identificación 3.
Trabajo #4 (12 puntos)
Escriba las sentencias SQL para hacer las siguientes operaciones:
15. Modificar el departamento de la Asignatura codA = 5 a ‘Sistemas’ [2]
16. Modificar la dirección del alumno con nAlum 2000 a ‘Dg32 #12-87’ [2]
17. Eliminar las notas que se hayan obtenido antes del año 2013 [2]
18. Borrar las asignaturas que tengan un precio superior a $100.000 [2]
En cada caso muestre mediante una consulta el estado anterior a la operación y el posterior.
17. En algunos de los atributos aparece el modificador NOT NULL, investigue qué significa y de un ejemplo
de una tupla que no puede ser insertada en la tabla Alumno por la existencia del NOT NULL. [2]
18. Trate de insertar la siguiente tupla en la tabla Asignatura:
1, ‘Programación Avanzada’, 99000, ‘Sistemas’
A qué se debe el mensaje de error que aparece? [2]
Recuerde que debe crear los datos que permitan dar una respuesta a las consultas. Consulta
sin respuesta no se tendrá en cuenta.
5. Aspectos Básicos V
Funciones Agregadas
Las funciones de agregación son:
función
SUM
COUNT
MAX
MIN
AVG
significado
Suma valores de una columna
Cuenta registros
Halla el máximo valor de una columna
Halla el valor mínimo de una columna
Halla el valor promedio de una columna
Sintaxis de uso
SELECT atributo(s), función(columna)
FROM tabla(s)
WHERE (condición)
GROUP BY columna;
Para la realización de funciones un requerimiento muy común es la agregación de datos, esto se realiza a
través de la cláusula GROUP BY. Esta cláusula agrupa las filas con iguales valores en las columnas
indicadas después de esta, formando así subconjuntos. Así, todos los atributos dentro del SELECT deben
estar en el GROUP BY, un ejemplo de esto seria:
Obtener el número de notas obtenidas por cada alumno:
SELECT nAlum, COUNT(nota)
FROM Notas
GROUP BY nAlum;
(Función y atributo al cual se le aplicará)
De esta forma primero se agrupan las notas por alumno, obteniendo subconjuntos de quienes tienen el mismo
valor de nAlum, y luego la función COUNT, que cuenta en un conjunto de valores, se aplica al dato nota en
cada uno de los grupos formados.
Trabajo #5 (10 puntos)
19. Realice una consulta con cada una de las funciones agregadas del SQL.
6. Aspectos Básicos VI
Subconsultas en SQL
Las sentencias SELECT pueden "anidarse" unas dentro de otras, usando en las más externas el resultado
de las más internas. Una subconsulta provee como resultado un conjunto de valores, que puede ser usado
como argumento de búsqueda en un predicado de pertenencia IN o EXISTS. Veamos los siguientes
ejemplos básicos de una subconsulta:
Predicado IN
Predicado EXISTS
SELECT codA, nombreA, precio
FROM
Asignatura
WHERE codA IN
(SELECT codA
FROM
Notas
WHERE cod > 5);
SELECT nombre, apellido, telefono
FROM
Alumno
WHERE EXISTS
(SELECT *
FROM
Notas
WHERE Notas.nAlum =
Alumno.nAlum);
Consulta que muestra el código, el nombre y el
precio de la asignatura que ha sido cursada por
alumnos con codA mayor a 5.
Consulta que muestra el nombre, apellido y teléfono
de los alumnos que tienen notas.
Algunas de las consultas que se plantean a continuación exigen que se prepare un “paquete de datos”
que permita comprobar el funcionamiento de la consulta. Asegúrese de ingresar los datos para poder
demostrar que la consulta funciona correctamente.
Trabajo #6 (7 puntos)
En el entorno SQL desarrolle los anteriores ítems:
20. Por medio de una subconsulta, obtenga el nombre y departamento de las asignaturas que han sido
aprobadas, durante el año 2013. (utilice el predicado IN o EXISTS). [3]
21. Usando subconsultas, obtenga la información de los alumnos que han aprobado asignaturas pertenecientes
al departamento de ‘Sistemas’. [2]
22. Usando subconsultas, obtenga la información de los alumnos que han obtenido una nota superior al
promedio de notas del año 2013. (utilice el predicado IN o EXISTS). [2]
Recuerde que debe crear los datos que permitan dar una respuesta a las consultas. Consulta
sin respuesta no se tendrá en cuenta.
7. Aspectos Básicos V
Vistas
Una vista es un objeto o una tabla lógica que presenta datos de una o más tablas; se puede usar para mostrar
todas las filas y columnas de una tabla, de modo que para motivos de seguridad proteja el nombre de su tabla
de origen, también puede mostrar un subconjunto de filas y columnas de una o más tablas, permitiendo
proteger algunos datos de ciertas tablas. Otra de sus formas de uso es para simplificar la codificación de
aplicaciones, pues con estas puede unir datos de diferentes tablas y hacerlas ver como si estuvieran
relacionadas, o mostrar datos derivados que no están realmente en una tabla especifica.
La sintaxis básica para crear una vista es:
CREATE VIEW nombre_vista AS
SELECT instrucciones...
FROM nombre_Tabla | nombre_vista
[WHERE (condición)];
Digite la instrucción:
CREATE VIEW vistaAlumno AS
SELECT codEst, nombEs, apelEs
FROM
Alumno;
Ahora realice una consulta sobre la vista que se acaba de crear. Muestre en su informe el resultado.
Trabajo #7 (4 puntos)
23. Cree una vista de las asignaturas, con el nombreA y depto, del departamento de Sistemas, llámela
ViewAsignaturasSmas. [2]
24. Cree una vista de los alumnos que contenga los el nAlum, el nombre, el apellido y el teléfono. Asígnele
VistaAlumno como nombre a la vista. [2]
2. Bases de datos: Entidad Financiera “BancaUV”
Considerar las siguientes tablas:
Empleado (dniEmp, nomEmp, sexEmp, fecNac, fecAlt, salEmp, codSuc, dirEmp)
Sucursal (codSuc, dirSuc, telSuc)
Cuenta
(nroCta, fecAbre, codSuc)
Cliente (nDICli, nomCli, dirCli, telCli)
Titular (nroCta, nDICli, numOrdTit)
Cajero
(codCaj, tipCaj, codSuc)
Operacion (codCaj, fechaOpe, horaOpe, tipOpe, DescripcOpe, vlrOpe, nroCta)
Trabajo #8 (4 puntos) Consultas Sencillas
Usted(es) debe(n) de crear la base de datos, poblarla con datos significativos (que permitan dar
respuesta a las consultas abajo planteadas). Por ello se requiere:
 Presentar el esquema SQL – no olvide llaves primarias y foráneas.
 Presentar los datos ingresados en cada una de las tablas, examine bien los tipos de datos para
asignarlos a cada atributo y así mismo ingresar los datos correspondientes.
 Mostar una evidencia (imagen con pantallazo) de la ejecución. Sin este requisito no se califica el
punto, aunque presente la consulta.
Trabajo #9 (6 puntos) Consultas Sencillas
Realizar las siguientes consultas utilizando SQL:
25. Número de todas las cuentas corrientes (nroCta) de la sucursal número 2 ordenadas por fecha de
apertura (fecAbre).
26. El número de todas las cuentas corrientes del cliente con # documento de identidad 44444444 y el
orden de titularidad.
27. El número de todas las cuentas corrientes del cliente que se llama Juan del Risco y el orden de
titularidad.
28. El # documento de identidad y nombre de todos los clientes que tienen cuenta en la sucursal número
4, ordenado por nombre.
29. El saldo de la cuenta número 6.
30. El número y saldo de todas las cuentas de la sucursal número 4.
Trabajo #10 (10 puntos) Otras Consultas
31. Todas las sucursales (codSuc) y su saldo total (suma de los saldos de todas sus cuentas) ordenado
descendentemente por el saldo.
32. Todas las fechas que hay operaciones junto con el saldo global del banco acumulado hasta esa fecha.
33. Todos los clientes (# documento de identidad y nombre) junto con el número de cuentas corrientes
que tienen (¿Cuántas tienen?), el saldo máximo y la suma de los saldos ordenado por el número de
cuentas que tienen descendentemente; y para todos aquellos que tienen el mismo número de cuentas,
ordenados por nombre ascendentemente.
34. Todos los clientes (# documento de identidad) junto con el número de cuentas corrientes que tienen;
pero sólo aquellos clientes que tienen más de una cuenta corriente.
35. Obtener las cuentas en las que no han hecho ninguna operación en un cajero de la sucursal de la
cuenta.
Trabajo #11 (10 puntos) Consultas con Funciones Agregadas
36. Todas las cuentas corrientes (nroCta) cuyo saldo sea superior a la media de saldos de la misma
sucursal.
37. Listado de clientes (# documento de identidad y nombre) con el saldo total (suma de saldos) de todas
sus cuentas corrientes, ordenado por nombre.
38. Extraer un listado de todas las sucursales (codSuc) junto con el número de empleados de dicha
sucursal; ordenado por el número de empleados
39. Extraer un listado de todas las sucursales (codSuc) junto con el número de empleados masculinos y el
número de empleados femeninos.
40. Extraer un listado de clientes (# documento de identidad y nombre) junto con el nombre del director de
la sucursal de todas aquellas cuentas en las que el cliente es el primer titular (numOrdTit = 1).
Recuerde que debe crear los datos que permitan dar una respuesta a las consultas. Consulta
sin respuesta no se tendrá en cuenta.
Fecha de Entrega: Octubre 18 de 2014
Descargar