Manual Practico SQL
Manual Practico SQL
Ejercicios
En este Manual de Trabajo aparece el acceso a los distintos ejercicios
opcionales
obligatorios
del
curso
de
SQL.
Los ejercicios estn divididos segn los bloques del curso: Parte I, Parte
II y Parte III. Selecciona cada uno de los bloques para acceder a los
ejercicios correspondientes.
Todas estas tareas (salvo en Temas 1 y 2) deben quedar reflejadas en
sentencias sql y guardadas en un fichero de script llamado, por ejemplo,
actividad_temaXX.sql con los comentarios necesarios que consideres
pertinentes.
Si encuentras problemas o dificultades en la realizacin del ejercicio, no
tengas duda en preguntar al tutor o incluso enviarle las sentencias que no
funcionan como deben, para que lo vea y te ayude en la resolucin de
esta actividad. No obstante, ten en cuenta que no se trata de un ejercicio
de autoevaluacin, sino de evaluacin por parte del tutor, por lo cual
debes intentar resolverlo por tu cuenta.
Cuando acabes la actividad propuesta, comprime el fichero .sql en nico
fichero tipo .zip o .rar y envalo al tutor, para que pueda comprobar el
grado de tu aprendizaje y orientarte adecuadamente, si lo precisas.
Parte I, tema 1
El lenguaje de gestin de base de datos
Obligatorio
para
verificar
la
c. Relacional
Parte I, tema 2
Elementos del lenguaje
Obligatorio
NOTA: el objetivo es familiarizarse con una base de datos relacional observando la
estructura de las tablas y las relaciones entre ellas. Estos ejercicios deben realizarse
estudiando el contenido de las tablas y la forma de relacionarse entre ellas
8.- Para calcular en nmero de das entre dos fechas (fecha1 y fecha2)
utilizaremos la funcin:
a. DATESUBB(fecha1, fecha2)
b. DATEDIFF( fecha1,fecha2)
c. DUBDATE( fecha1,fecha2)
9.- Para sumar las columnas salario (no puede contener nulos) y comision
(si puede contener nulos) necesitaremos la expresin:
a. salario + comision
b. IFNULL (salario,0) + comision
c. salario + IFNULL(comision,0)
Parte I, tema 3
Creacin de tablas
Obligatorio
NOTA: No se pueden crear tablas con el mismo nombre que otras ya existentes en la
misma base de datos. Si estuviesen ya creadas con ese nombre, es necesario
borrarlas previamente
Tipo
alfanumrico
alfanumrico
alfanumrico
alfanumrico
alfanumrico
alfanumrico
Tabla ARTICULOS
Campo
Referencia_articulo
Descripcin_articulo
Precio_unidad
IVA
Existencias_actuales
Tipo
alfanumrico de 12 caracteres
alfanumrico de 30 caracteres
numrico de 6 posiciones, con dos decimales
numrico de 2 posiciones
numrico de 5 posiciones
Tabla FACTURAS
Campo
Factura_no
Fecha_factura
CIF_cliente
Tipo
numrico de 6 posiciones
tipo fecha
alfanumrico de 11 caracteres
Tabla LINEAS_FACTURA
Campo
Factura_no
Referencia_articulo
Unidades
Tipo
numrico de 6 posiciones
alfanumrico de 12 caracteres
numrico de 3 posiciones
de
de
de
de
de
de
11 caracteres
30 caracteres
30 caracteres
30 caracteres
5 caracteres
9 caracteres
Enunciado
1. Creacin de las tablas con las restricciones.
a. Crear la tabla COMPRADORES con la columna de columna cif_comprador
como clave primaria con nombre PK_COMPRADORES_CIF, y la columna
nombre_social nica con nombre UQ_COMPRADORES_NOMBRE_SOCIAL. La
columna telefono debe ser obligatoria.
Parte I, tema 4
Actualizacin de tablas
Obligatorio
NOTA: si se quiere hacer pruebas y que las actualizaciones de las tablas no sean validadas,
se puede trabajar con el parmetro AUTOCOMMIT = 0. As, en cualquier momento,
tendremos la posibilidad de hacer ROLLBACK para deshacer los cambios o COMMIT para
validarlos.
Enunciado
Para poder trabajar con las tablas creadas en el tema anterior vamos a insertar
algunos valores. Estas inserciones son indispensables para poder realizar los
siguientes ejercicios
1. Realizar las inserciones de las siguientes filas:
Tabla COMPRADORES
Cif_comprador Nombre_social
111111-L
TELARES ASUNCION
222222-J
TEXTIL LAGO
Domicilio
Localidad C postal Telefono
C. LA RUA 5
ALBACETE 02002
97223141
PLAZA MAYOR 2 ALMERIA
04131
95434567
Tabla ARTICULOS
Referencia_articuloDescricion_articuloPrecio_unidadIVAExistencias_actuales
01-LANA
LANA 100% NATURAL 31.09
10 100
02-ALGODON
ALGODN DE 2 CABOS 18.00
10 155
03-SEDA
SEDA CHINA
55.50
15 190
04-LINO
LINO EUROPEO
44.00
12 250
Tabla FACTURAS
Factura_no
1
2
3
4
Fecha_factura
12 de mayo de 2004
18 de julio de 2004
31 de julio de 2004
10 de agosto de 2004
Cliente_no
111111-L
111111-L
222222-J
222222-J
Tabla LINEAS_FACTURAS
Factura_no
Referencia_articulo
1
01-LANA
1
04-LINO
2
01-LANA
2
02-ALGODN
Cod_oficina
1212
1231
1406
1212
Unidades
120
75
20
50
Precio_unidad
10.99
IVA
10
indicar
que
ha
descripcion_articulo
BLOQUE I (temas 1, 2, 3 y 4)
GESTION DE DATOS CON SQL
"Evaluacin I"
IS
NULL
COMISION
COMISION
NULL
LIKE
'A%'
Nombre
LIKE
'A_'
11. Para indicar que una columna va a ser clave ajena se necesitan
las clusulas:
FOREIGN KEY
FOREIGN KEY con REFERENCES
FOREIGN KEY con REFERENCES y ON DELETE CASCADE
FOREIGN KEY y PRIMARY KEY
14.
Para
aadir
una
columna
una
tabla
ya
creada:
15. Para cambiar de nombre la tabla Uno por Dos podemos utilizar:
ALTER TABLE Uno RENAME TO Dos;
EXEC sp_rename 'curso.uno', 'dos';
departamentos
(dnombre,
localidad)
VALUES
INSERT
INTO
(50,'MARKETING');
departamentos
(dep_no,
dnombre)
VALUES
INSERT
INTO
('MARKETING',50);
departamentos
(dnombre,
dep_no)
VALUES
salario
FROM
empleados
SET
salario
100;
BLOQUE I (temas 5, 6, 7, 8 y 9)
GESTION DE DATOS CON SQL
"Evaluacin II"
1. La clusula WHERE:
Selecciona
las
filas
seleccionadas
que
cumplan
una
condicin
FROM
empleados
ORDER
BY
salario
LIMIT
3;
FROM
empleados
ORDER
BY
salario
LIMIT
1,3;
6. La clusula HAVING:
Establece unas condiciones para la seleccin de grupos formados con
GROUP BY
Realiza lo mismo que la clusula WHERE
Sustituye a WHERE cuando existe GROUP BY
Ordena los resultados de la agrupacin
FROM
empleados
WHERE
13.
Una
composicin
combinacin
(JOIN)
consiste
en:
AND
16. Para listar los clientes con sus pedidos, incluyendo aquellos que
no tengan ningn pedido:
SELECT c.cliente_no,nombre,pedido_no FROM clientes c RIGHT JOIN
pedidos p ON c.cliente_no=p.cliente_no;
SELECT c.cliente_no,nombre,pedido_no FROM clientes c LEFT JOIN
pedidos p ON c.cliente_no=p.cliente_no;
SELECT c.cliente_no,nombre,pedido_no FROM clientes c JOIN pedidos p
ON
c.cliente_no=p.cliente_no;
SELECT c.cliente_no,nombre,pedido_no FROM clientes c,pedidos p
WHERE c.cliente_no=p.cliente_no;
se
puede
20. Al eliminar una vista, los datos de las tablas en las que se basa la
vista quedarn afectados:
Se eliminan todos los datos de las tablas en las que se basa la vista.
Se eliminan solamente las filas que estaban incluidas en la seleccin de la
vista.
Se elimina la vista y las tablas y vistas asociadas.
Ninguna de las anteriores
Enunciado
1. Escribir los apellidos de los empleados junto con sus fechas de alta en
formato: <<numero del da>> de <<nombre del mes>> de <<ao con 4
dgitos>>
2. Hallar por orden alfabtico los apellidos de los empleados, suprimiendo
las tres ltimas letras, mostrando solo aquellos cuyo apellido tenga ms
de seis caracteres
3. Se desea hacer un regalo de un 3% del salario a los empleados que no
tienen comisin. Obtener el listado ordenado por orden alfabtico con los
apellidos y el importe de los regalos
4. Obtener los datos de los empleados cuyo salario total
(salario+comisin) supere los 2.000 euros, siempre que adems su
salario supere los 1800 euros o su comisin supere los 500 euros
5. Visualizar los datos del empleado de oficio DIRECTOR ms antiguo en
la empresa.
6. Visualizar los datos de los dos empleados que ganan ms salario entre los empleados
de los departamento 20 y 30
BLOQUE II (temas 1, 2, 3 y 4)
GESTION DE DATOS CON SQL
"Evaluacin I"
clausula
WHERE
sera
la
adecuada:
Para
9.
crear
una
tabla
se
necesita:
Un nombre de tabla
Las definiciones de las columnas
El nombre de la tabla y las definiciones de las columnas
El nombre de la tabla y sus restricciones
NULL
FOREIGN
KEY
CHECK
PRIMARY KEY
11. Para indicar que una columna va a ser clave ajena se necesitan
las
clusulas:
FOREIGN KEY
FOREIGN KEY con REFERENCES
FOREIGN KEY con REFERENCES y ON DELETE CASCADE
FOREIGN KEY y PRIMARY KEY
12.
13.
La
Es
de
clusula
obligatoria
ON
para
DELETE
crear
una
CASCADE:
clave
ajena
Es obligatoria para crear una clave ajena que permita el borrado automtico
filas
cuando
se
ha
borrado
la
clave
principal
Sirve
para
borrar
filas
seleccionadas
con
un
WHERE
14.
Para
aadir
una
columna
una
tabla
ya
creada:
INTO
departamentos
INTO
VALUES
departamentos
(50,
VALUES
NULL,
(50,
'BILBAO');
'MARKETING');
departamentos
(dnombre,
localidad)
VALUES
INSERT
INTO
(50,'MARKETING');
departamentos
(dep_no,
dnombre)
VALUES
INSERT
INTO
('MARKETING',50);
departamentos
(dnombre,
dep_no)
VALUES
salario
FROM
empleados
SET
salario
100;
BLOQUE II (temas 5, 6, 7, 8 y 9)
GESTION DE DATOS CON SQL
"Evaluacin II"
1. La clusula WHERE:
Selecciona
las
filas
seleccionadas
que
cumplan
una
condicin
BY
salario,apellido
ORDER
BY
apellido,salario
ORDER
BY
salario
DESC
DESC,apellido
TOP 3 *
FROM
empleados
ORDER
BY
salario;
TOP 3 *
FROM
empleados
ORDER
BY
salario;
4.
Las
funciones
de
grupo
exigen
GROUP
BY:
Siempre
Nunca
No siempre, si se considera que todas las filas de la tabla forman un nico
grupo
Da lo mismo
las
las
que
que
se
se
quiera
han
especificar
puesto
en
la
sin
otra
clusula
restriccin
GROUP
BY
6. La clusula HAVING:
Establece unas condiciones para la seleccin de grupos formados con
GROUP BY
Realiza lo mismo que la clusula WHERE
Sustituye a WHERE cuando existe GROUP BY
Ordena los resultados de la agrupacin
MAX(salario),dep_no
FROM
empleados
FROM
empleados
WHERE
una
los
consulta
resultados
sobre
de
un
una
subconjunto
consulta
dentro
de
de
datos
otra
13.
Una
composicin
Obtener
filas
Obtener
todas
las
combinacin
(JOIN)
consiste
en:
de
ms
de
una
tabla
filas
resultantes
de
multiplicar
tablas
FROM
SELECT
pedido_no,nombre,descripcin,unidades
pedidos,productos,clientes
WHERE
cliente_no=cliente_no
producto_no=producto_no;
FROM
AND
SELECT
pedido_no,nombre,descripcin,unidades
FROM
pedidos
p,productos
pr,clientes
c
WHERE
p.cliente_no=c.cliente_no
AND
p.producto_no=pr.producto_no;
SELECT
pedido_no,nombre,descripcin,unidades
FROM
pedidos
p,productos
pr,clientes
c
WHERE
p.cliente_no=c.cliente_no
AND
p.producto_no=pr.producto_no AND p.pedido=pr.pedido_no;
16. Para listar los clientes con sus pedidos, incluyendo aquellos que
no tengan ningn pedido:
SELECT c.cliente_no,nombre,pedido_no FROM clientes c RIGHT JOIN
pedidos
p
ON
c.cliente_no=p.cliente_no;
SELECT c.cliente_no,nombre,pedido_no FROM clientes c LEFT JOIN
pedidos
p
ON
c.cliente_no=p.cliente_no;
ON
20. Al eliminar una vista, los datos de las tablas en las que se basa la
vista quedarn afectados:
Se eliminan todos los datos de las tablas en las que se basa la vista.
Se eliminan solamente las filas que estaban incluidas en la seleccin de la
vista.
Se
elimina
la
vista
las
tablas
vistas
asociadas.
el
Crear
objetos
Recuperar
la
acceso
en
informacin
a
una
almacenada
la
base
en
la
informacin
de
base
datos
de
datos
nombre
de
la
tabla
las
definiciones
de
las
columnas
11. Para indicar que una columna va a ser clave ajena se necesitan
las clusulas:
FOREIGN KEY
FOREIGN KEY con REFERENCES
FOREIGN KEY con REFERENCES y ON DELETE CASCADE
FOREIGN KEY y PRIMARY KEY
12.
14.
Para
aadir
una
columna
una
tabla
ya
creada:
INTO
departamentos
INTO
VALUES
departamentos
(50,
VALUES
NULL,
(50,
'BILBAO');
'MARKETING');
departamentos
(dnombre,
localidad)
VALUES
INSERT
INTO
(50,'MARKETING');
departamentos
(dep_no,
dnombre)
VALUES
INSERT
INTO
('MARKETING',50);
departamentos
(dnombre,
dep_no)
VALUES
salario
FROM
empleados
SET
salario
100;
19.
La
instruccin
DELETE
FROM
empleados:
Es incorrecta o errnea
Elimina
el
ltimo
empleado
de
la
tabla
empleados
Elimina
el
primer
empleado
de
la
tabla
empleados
Siempre
Solo si no tiene empleados
Nunca
Siempre que hagamos primero la modificacin correspondiente en la tabla
EMPLEADOS
1. La clusula WHERE:
Selecciona
las
filas
Establece
Indica
seleccionadas
un
sobre
qu
que
criterio
tabla
se
est
cumplan
una
de
condicin
ordenacin
realizando
la
consulta
2.
ORDER BY salario,apellido
ORDER BY apellido,salario DESC
ORDER BY salario DESC,apellido
ORDER BY salario DESC,apellido DESC
TOP 3 *
FROM
empleados
ORDER
BY
salario;
TOP 3 *
FROM
empleados
ORDER
BY
salario;
4.
Las
funciones
de
grupo
exigen
GROUP
BY:
Siempre
Nunca
No siempre, si se considera que todas las filas de la tabla forman un nico
grupo
Da lo mismo
las
las
que
que
se
se
quiera
han
especificar
puesto
en
la
sin
otra
clusula
restriccin
GROUP
BY
6. La clusula HAVING:
Establece unas condiciones para la seleccin de grupos formados con
GROUP
BY
Realiza
Sustituye
lo
mismo
WHERE
que
la
cuando
clusula
existe
WHERE
GROUP
BY
MAX(salario),dep_no
FROM
empleados
FROM
empleados
WHERE
una
los
consulta
resultados
sobre
de
un
una
subconjunto
consulta
dentro
de
de
datos
otra
HAVING
SELECT
AVG(salario)
FROM
empleados
GROUP
BY
oficio);
13.
Una
composicin
Obtener
filas
Obtener
todas
las
combinacin
(JOIN)
consiste
en:
de
ms
de
una
tabla
filas
resultantes
de
multiplicar
tablas
FROM
AND
SELECT
pedido_no,nombre,descripcin,unidades
FROM
pedidos
p,productos
pr,clientes
c
WHERE
p.cliente_no=c.cliente_no
AND
p.producto_no=pr.producto_no;
SELECT
pedido_no,nombre,descripcin,unidades
FROM
pedidos
p,productos
pr,clientes
c
WHERE
p.cliente_no=c.cliente_no
AND
p.producto_no=pr.producto_no AND p.pedido=pr.pedido_no;
16. Para listar los clientes con sus pedidos, incluyendo aquellos que
no
tengan
ningn
pedido:
SELECT c.cliente_no,nombre,pedido_no FROM clientes c RIGHT JOIN
pedidos
p
ON
c.cliente_no=p.cliente_no;
SELECT c.cliente_no,nombre,pedido_no FROM clientes c LEFT JOIN
pedidos
p
ON
c.cliente_no=p.cliente_no;
SELECT c.cliente_no,nombre,pedido_no FROM clientes c JOIN pedidos p
ON
c.cliente_no=p.cliente_no;
SELECT c.cliente_no,nombre,pedido_no FROM clientes c,pedidos p
WHERE c.cliente_no=p.cliente_no;
se
puede
19.
Al
crear
una
vista:
20. Al eliminar una vista, los datos de las tablas en las que se basa la
vista quedarn afectados:
Se eliminan todos los datos de las tablas en las que se basa la vista.
Se eliminan solamente las filas que estaban incluidas en la seleccin de la
vista.
Se
elimina
la
vista
las
tablas
vistas
asociadas.