Sei sulla pagina 1di 71

MANUAL DE TRABAJOS

Ejercicios
En este Manual de Trabajo a aparece el acceso a los distintos ejercicios
opcionales

obligatorios

del

curso

de

SQL

con

MySQL.

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.

Recuerda que para realizar los ejercicios de la Parte II y III,


necesitars el fichero "cargartablas.sql".

Parte I, tema 1
El lenguaje de gestin de base de datos
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

1.- El empleado nmero 7499 pertenece al departamento nmero:


a. 30
b. 20
c. 40

2.- El DIRECTOR del empleado 7844 es el empleado nmero:


a. 7698
b. 7839
c. 7782

3.- El empleado REY es el director de:


a. MARTINEZ
b. GARRIDO
c. MARTINEZ Y GARRIDO

4.- Al departamento de INVESTIGACION pertenecen los empleados:


a. ALONSO Y LOPEZ
b. GIL Y JIMENEZ
c. GARRIDO Y MARTINEZ

5.- El cliente DISTRIBUCIONES GOMEZ pidi cuatro unidades del


producto SILLA DIRECTOR MOD. BUFALO el 7 de enero de 2000:
a. Verdadero
b. Falso, los datos son incorrectos
c. Los datos facilitados son insuficientes
afirmacin

para

verificar

6.- El cliente INDUSTRIAS LACTEAS S.A. ha realizado:


a. Un pedido
b. Dos pedidos
c. Tres pedidos

7.- MySql es un Sistema Gestor de Bases de Datos:


a. Jerrquico
b. En red
c. Relacional

la

8.- Segn el modelo relacional:


a. Cada fila de una tabla representa un atributo o caracterstica
b. Cada columna de una tabla representa un atributo o caracterstica
c. Cada entidad representa un atributo o caracterstica

9.- SQL es:


a. Un lenguaje estructurado de consulta
b. Un lenguaje procedimental de tercera generacin
c. Ambas son correctas

10.- El lenguaje SQL permite:


a. Manipular datos (consultar, actualizar, etctera)
b. Definir objetos de la base de datos (Crear, modificar y eliminar objetos de la base
de datos)
c. Ambas son correctas

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

Elegir la respuesta correcta de las siguientes cuestiones:


1.- Cul de los siguientes identificadores no es correcto:
a. xx
b. 2x
c. x2

2.- VARCHAR es:


a. Un comando
b. Un operador
c. Un tipo de dato

3.- Para comparar un dato alfanumrico con un patrn de comparacin


que contiene caracteres comodines utilizaremos el operador:
a. IN
b. LIKE
c. =

4.- Siendo el valor de A verdadero (true) y el de B falso (false), el


resultado de la expresin A AND B ser:
a. Verdadero (true)
b. Falso (false)
c. Nulo (null)

5.-Siendo el valor de A verdadero (true) y el de B nulo (null), el resultado


de la expresin A AND B ser:
a. Verdadero (true)
b. Falso (false)
c. Nulo (null)

6.- Para redondear a dos decimales un nmero (num) utilizaremos la


funcin:
a. POWER(num,2)
b. TRUNC(num,2)
c. ROUND(num,2)

7.- Para obtener la longitud de una cadena (cad) utilizaremos la funcin:

a. LPAD(cad)
b. LOWER(cad)
c. LENGTH(cad)

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)

10.- Una condicin es:


a. Una variable
b. Un conjunto de datos, operadores y funciones)
c. Un conjunto de datos, operadores y funciones cuyo resultado es
verdadero o falso

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

Definicin de las tablas


Tabla COMPRADORES
Campo
CIF_comprador
Nombre_social
Domicilio_social
Localidad
C_postal
Telfono

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.

b. Crear la tabla ARTICULOS, con referencia_articulo como PRIMARY KEY


con el nombre PK_ARTICULOS, la columna IVA con valores entre 5 y 25
inclusive y la columna existecias_actuales con valor por defecto 0.
c. Crear la tabla FACTURAS con la columna factura_no como clave primaria
con el nombre PK_FACTURAS, y la columna fecha_factura tendr como
valor por defecto la fecha 1 de enero de 2005.
d. Crear la tabla LINEAS_FACTURAS con las columnas factura_no y
referencia_articulo como PRIMARY KEY con nombre PK_LINEAS_FACTURA, la
columna factura_no como FOREIGN KEY con nombre FK_LINEAS_FACTURAS
referenciando la columna factura_no de la tabla facturas con borrado en
cascada y la columna referencia_articulo como FOREIGN KEY con nombre
FK_LINEAS_ARTICULOS referenciando la columna referencia_articulo de la
tabla articulos
2. Aadir a la tabla FACTURAS la columna cod_oficina de tipo numrico de
4 posiciones, con el nmero de oficina
3. Aadir en la tabla FACTURAS la columna cif_cliente como FORIEGN KEY
con nombre FK_FACTURA_COMPRADORES referenciando a la columna
cif_comprador de la tabla compradores
4. Cambiar en la tabla COMPRADORES el nombre de la columna c_postal por
texto_codigo_postal

5. Aadir a la columna cod_oficina de la tabla FACTURAS la comprobacin


de estar entre 1 y 1000.

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
Domicilio
Localidad C postal Telefono
111111-L
TELARES ASUNCION C. LA RUA 5
ALBACETE 02002
97223141
222222-J
TEXTIL LAGO
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

2. Insertar un nuevo artculo con valores


Referencia_articulo
06-CUERO

Precio_unidad
10.99

IVA
10

Hacer un listado de las filas de la tabla ARTICULOS (SELECT * FROM articulos;) e

indicar

que

ha

sucedido con las columnas


existencias_actuales razonando la respuesta.

descripcion_articulo

3. Hacer una rebaja del IVA en un punto para cada artculo


4. Modificar la descripcin del artculo de referencia 01-LANA para que el nuevo
valor sea LANA 90%NATURAL 10%ACRILICO.
5. Indicar los pasos necesarios para modificar el articulo de referencia 01-LANA
para que la nueva referencia sea 01-LANA90/10.
6. Borrar de la tabla FACTURAS la factura con el valor de factura_no igual a 2.
Observar que ha sucedido en las tablas facturas y lneas de factura. Para
comprobarlo hacer un listado de las filas

BLOQUE I (temas 1, 2, 3 y 4)
SQL CON MYSQL
"Evaluacin I"
Marca la casilla con la respuesta correcta

1. El lenguaje SQL permite:


Controlar
Crear
Recuperar

el
objetos
la

acceso
en

informacin

a
una

almacenada

la

informacin

base
en

de
la

base

datos
de

datos

Todas las anteriores

2. En el modelo relacional la restriccin que se utiliza para


relacionar dos tablas es:
PRIMARY KEY
FOREIGN KEY
UNIQUE
CHECK

3. Siendo el valor de A true (verdadero) y el de B null, el resultado


de la expresin A AND B ser:
true
false
null
ninguno de los anteriores

4. Indicar cul de los siguientes identificadores es incorrecto:


b2-ax
ax_b2
axb2
xa2b

5. Indicar cul de las siguientes expresiones es la correcta para


comprobar si el valor de COMISION es nulo (carece de valor):
COMISION

IS

COMISION

COMISION

NULL
0
NULL

Cualquiera de los anteriores

6. Para comprobar si un nombre empieza por 'A', qu expresin


sera la correcta?:
nombre='A%'
Nombre

LIKE

'A%'

Nombre

LIKE

'A_'

Nombre LIKE '%A'

7. Para mostrar los empleados del departamento 10 y del 30 qu


clausula WHERE sera la adecuada:
Dep_no=10 AND dep_no=30
Dep_no=10 OR dep_no=30
Dep_no BETWEEN 10 AND 30
Dep_no IN (10,20,30)

8. Para buscar un salario entre 1500 y 3500, ambos inclusives:


Salario=1500 OR salario=3500
Salario>1500 AND salario<3500
Salario>1500 OR salario<3500
Salario BETWEEN 1500 AND 3500

9. Para 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

10. Para indicar que una columna va a ser clave principal:


NOT 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. Una restriccin se puede definir a nivel de columna:


Siempre se puede definir
Si no le queremos dar un nombre
Si afecta a una sola columna
Si no le queremos dar un nombre y afecta a una sola columna

13.

La

clusula

ON

DELETE

CASCADE:

Es obligatoria para crear una clave ajena


Es obligatoria para crear una clave ajena que permita el borrado automtico
de filas cuando se ha borrado la clave principal
Sirve para borrar filas seleccionadas con un WHERE
Evita el borrado automtico de filas cuando se ha borrado la clave principal

14. Para aadir una columna a una tabla ya creada:


ALTER TABLE tabla NombreColumna;
ALTER TABLE tabla;
ALTER TABLE tabla ADD NombreColumna;
ALTER TABLE tabla ADD NombreColumna TipoDato;

15. Para cambiar de nombre la tabla Uno por Dos podemos utilizar:
ALTER TABLE Uno RENAME TO Dos;
RENAME TABLE Uno TO Dos;
Los dos anteriores
Ninguno de los anteriores

16. Indicar cul de los siguientes comandos de insercin es


incorrecto:
INSERT INTO departamentos VALUES (50,'MARKETING', NULL);
INSERT INTO departamentos VALUES (50, NULL, 'BILBAO');
INSERT INTO departamentos VALUES (50, 'MARKETING');
Todos son correctos

17. Indicar cul de los siguientes comandos de insercin es


incorrecto:
INSERT
INTO
('BILBAO',50);

departamentos

(dnombre,

localidad)

VALUES

INSERT
INTO
(50,'MARKETING');

departamentos

(dep_no,

dnombre)

VALUES

INSERT
INTO
('MARKETING',50);

departamentos

(dnombre,

dep_no)

VALUES

INSERT INTO departamentos (dnombre, localidad, dep_no) VALUES


( 'MARKETING',NULL, 50);

18. Para incrementar en 100 Euros el salario de todos los empleados


escribiremos:
UPDATE salario FROM empleados WHERE salario = salario + 100;
UPDATE

salario

FROM

empleados

SET

salario

100;

UPDATE empleados FROM salario WHERE salario = salario + 100;


UPDATE empleados SET salario = 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
Elimina todos los empleados de la tabla empleados

20. Si existe una clave ajena en la tabla EMPLEADOS referenciando


a la tabla DEPARTAMENTOS sin la opcin modificado en cascada,
podremos modificar un departamento:
Siempre
Solo si no tiene empleados
Nunca
Siempre que hagamos primero la modificacin correspondiente en la tabla
EMPLEADOS

BLOQUE I (temas 5, 6, 7, 8 y 9)
SQL CON MYSQL
"Evaluacin II"
Marca la casilla con la respuesta correcta

1. La clusula WHERE:
Selecciona

las

filas

seleccionadas

que

cumplan

una

condicin

Establece un criterio de ordenacin


Indica sobre qu tabla se est realizando la consulta
Modifica las filas de una tabla

2. Para ordenar de mayor a menor por salario y, a igual salario,


alfabticamente por apellido:
ORDER BY salario,apellido
ORDER BY apellido,salario DESC
ORDER BY salario DESC,apellido
ORDER BY salario DESC,apellido DESC

3. Para visualizar los tres empleados que ms salario ganan:


SELECT *

FROM

empleados

ORDER

BY salario

LIMIT 3;

SELECT * FROM empleados ORDER BY salario DESC LIMIT 3;


SELECT * FROM empleados ORDER BY salario LIMIT 1,3;
SELECT * FROM empleados ORDER BY salario DESC LIMIT 1,3;

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

5. Las expresiones de columna a especificar en una SELECT con


clusula GROUP BY:
Son las que se quiera especificar sin otra restriccin
Son las que se han puesto en la clusula GROUP BY
Son las columnas o expresiones de agrupacin y/o funciones de grupo
Las funciones de columna que aparezcan en la clusula HAVING

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

7. Para obtener el mayor salario de cada departamento:


SELECT MAX(salario),dep_no FROM empleados
SELECT MAX(salario),dep_no FROM empleados GROUP BY salario
SELECT MAX(salario),dep_no FROM empleados GROUP BY dep_no
SELECT
MAX(salario),dep_no
MAX(salario)=dep_no

FROM

empleados

WHERE

8. Para seleccionar los departamentos con ms de 2 empleados:


SELECT dep_no,COUNT(*) FROM empleados GROUP BY emp_no
SELECT dep_no,COUNT(*) FROM empleados GROUP BY dep_no
SELECT dep_no,COUNT(*) FROM empleados GROUP BY emp_no
HAVING COUNT(*)>2
SELECT dep_no,COUNT(*) FROM empleados GROUP BY dep_no
HAVING COUNT(*)>2

9. Una subconsulta consiste en:


Realizar una consulta sobre un subconjunto de datos
Utilizar los resultados de una consulta dentro de otra
Almacenar resultados de una consulta para acceder a ellos en posteriores
consultas
Realizar una consulta despus de otra

10.Una subconsulta se describe en:


WHERE
HAVING
WHERE o HAVING
En cualquier clusula de la consulta principal
11. Cul sera la subconsulta correcta para obtener todos los

nmeros de pedido procedentes de clientes de 'BARCELONA':


SELECT pedido_no FROM pedidos WHERE cliente_no=(SELECT
cliente_no FROM clientes WHERE localidad='BARCELONA');
SELECT pedido_no FROM pedidos WHERE cliente_no IN (SELECT
cliente_no FROM clientes WHERE localidad='BARCELONA');
SELECT pedido_no FROM pedidos WHERE cliente_no = (SELECT
cliente_no FROM clientes) AND localidad='BARCELONA';
SELECT pedido_no FROM pedidos WHERE cliente_no IN (SELECT
cliente_no FROM clientes) AND localidad='BARCELONA';

12. Cul sera la subconsulta correcta obtener los empleados que


ganan
menos
que
la
media
de
su
oficio?
SELECT * FROM empleados WHERE salario < ( SELECT AVG(salario)
FROM
empleados
);
(

SELECT * FROM empleados GROUP BY oficio HAVING salario <


SELECT AVG(salario) FROM empleados GROUP BY oficio);

SELECT * FROM empleados e1 WHERE salario < ( SELECT AVG(salario)


FROM
empleados
WHERE
oficio=e1.oficio);
SELECT * FROM empleados WHERE salario < ( SELECT AVG(salario)
FROM empleados e2 WHERE oficio=e2.oficio);

13. Una composicin o combinacin (JOIN) consiste en:


Obtener
Obtener

filas
todas

de
las

filas

ms
resultantes

de
de

una
multiplicar

tabla
tablas

Aplicar una condicin de seleccin a las filas resultantes de multiplicar tablas


Obtener el producto cartesiano de tablas

14. Para obtener los pedidos con nombres de cliente y de producto:


SELECT
pedido_no,nombre,descripcin,unidades
pedidos,productos,clientes;

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;

15. Para obtener cada nombre de empleado con el nombre de su


director:
SELECT e1.apellido Empleado,e2.apellido "Su director" FROM empleados
e1,empleados
e2
WHERE
e1.director=e2.emp_no;
SELECT e2.apellido Empleado,e2.apellido "Su director" FROM empleados
e1,empleados
e2
WHERE
e1.director=e2.emp_no;
SELECT apellido Empleado,apellido "Su director" FROM empleados
,empleados
WHERE
director=emp_no;
SELECT e1.apellido Empleado,e2.apellido "Su director" FROM empleados
e1,empleados e2 WHERE e2.director=e1.emp_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;

17. Para crear una tabla a partir de otra ya creada:


No
Hay

se
que

puede
crearla

idntica

Se puede crear a partir de una consulta sobre la tabla ya creada


Se puede hacer usando dos sentencias CREATE concatenadas

18. Suponiendo que disponemos de la tabla TNOMBRES (recin


creada y vaca) con una nica columna denominada C1. Para
introducir en ella todos los apellidos de los empleados cuyo salario
supera
las
3000
Euros,
escribiremos:
UPDATE tnombres SELECT apellido FROM empleados WHERE salario >
3000;
UPDATE tnombres SET c1 = apellido WHERE salario > 3000;
INSERT INTO tnombres SELECT apellido FROM empleados WHERE
salario
>
3000;
Ninguna de las anteriores

19. Al crear una vista:


No se puede usar la clusula ORDER BY en la creacin de una vista
La consulta que define a una vista puede incluir a su vez una vista
Se puede crear a partir de una consulta que recupera informacin de varias
tablas
relacionadas
Las tres anteriores son correctas

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

BLOQUE I (temas 10,11 y 12)


SQL CON MYSQL
"Evaluacin III"
Marca la casilla con la respuesta correcta
1. Ventajas de las tablas MyISAM con respecto a las tablas InnoDB
(Marcar la respuesta falsa).
El acceso a los datos es ms rpido.
Consumen menos espacio de disco.
Permiten control de transacciones
Permiten crear tablas comprimidas.

2. Indicar cual de las siguientes afirmaciones es falsa con respecto a


las tablas InnoDB.
Permite definir integridad referencial entre tablas.
Permite bloqueo a nivel de fila.
Permite definir los datos de cada tabla en ficheros independientes separados
del resto de tablas.
Permite a los usuarios un mejor acceso concurrente a la informacin.
3. Si en la base de datos hay una tabla tipo MyISAM llamada

EMPLEADOS
necesariamente debe haber un fichero asociado llamado empleados.frm donde
estn los datos almacenados.
necesariamente debe haber un fichero asociado llamado empleados.frm donde
estn los ndices almacenados.
necesariamente debe haber un fichero asociado llamado empleados.MYD
donde estn los datos almacenados.

necesariamente debe haber un fichero asociado llamado empleados.MDI


donde estn los ndices almacenados.

4. Si estoy lanzando una sentencia del tipo C:\mysql\bin>myisamchk


-u ..\data\test\empleados Que estoy tratando de hacer?
Convertir

la

tabla

empleados

tipo

InnoDB.

Descomprimiendo la tabla empleados que se supone comprimida.


Optimizar

la

tabla

empleados

mediante

una

desfragmentacin.

Comprimiendo la tabla empleados que se supone descomprimida.


4. Indicar que sentencia es verdadera referida a la clusula

IDENTIFIED

BY

de

una

sentencia

GRANT.

Si el usuario no existe y se omite la clusula se crea el usuario sin


contrasea.
Si el usuario existe y no se omite la clusula la contrasea que acompaa
la clusula sustituye la anterior.
Si el usuario existe y se omite la clusula permanece vigente la contrasea
anterior.
Todas las anteriores son ciertas.

6. Indicar cual de las siguientes sentencias GRANT no tiene un error


de
sintaxis.
mysql>GRANT ALL PRIVILEGES ON *.* TO manuel@localhost
IDENTIFIED
BY
'algo'
FROM
GRANT
OPTION;
mysql> GRANT ALL PRIVILEGES TO manuel@"%" IDENTIFIED BY
'algo'
;
mysql> GRANT RELOAD, PROCESS ON *.* TO admin@localhost;
mysql> GRANT PRIVILEGES ON *.* TO manuel;

7. Indica cual de las siguientes utilidades de la distribucin de


MySQL no requiere de una comunicacin directa con el servidor
myisamchk
mysqlshow
mysqldump
mysqlimport

8. Que diferencia sucede con los usuarios pepe@localhost y


juan@localhost si se lanzan estas dos sentencias. 1- mysql> SET
PASSWORD FOR pepe@localhost='epep'; y 2- mysql> SET
PASSWORD
FOR
juan@localhost=PASSWORD('nuaj');
La

sentencia

La

sentencia

La

sentencia

tiene

error

encripta
tiene

la

error

de

sintaxis

password
de

la
la

sintaxis

la

est

sentencia
1

est

correcta.
1

no.

correcta.

La sentencia 1 encripta la password la sentencia 2 no

9. Indica la afirmacin correcta con respecto a mysqldump y


mysqlhotcopy
mysqlhotcopy
mysqldump

es
es

solo
solo

para
para

tablas
tablas

InnoDB.
MyISAM.

mysqlhotcopy solo funciona si el servidor no est en ejecucin.


Las tres anteriores son falsas.

10. Si desde la consola de comandos se lanza la siguiente sentencia


shell>mysql -h mihost.midominio.es -u juan -p prueba
Se intenta ejecutar el cliente mysql pero no se llega a conectar con la base de
datos por error en la sintaxis.
Se intenta ejecutar el cliente mysql para acceder a un servidor situado en la
mquina mihost.midominio.es mediante el usuario Juan con password prueba.
Se intenta ejecutar el cliente mysql para acceder a la base de datos prueba de
un servidor situado en la mquina mihost.midominio.es mediante el usuario Juan
que tiene password.

Se intenta ejecutar el cliente mysql para acceder a la base de datos prueba de


un servidor situado en la mquina mihost.midominio.es mediante el usuario Juan
que no tiene password.

11. Indica la respuesta correcta


El eliminar todos los privilegios de un usuario no supone la eliminacin del
usuario.
Se puede eliminar un usuario mediante DROP USER aunque aun conserve
privilegios.
Se puede eliminar completamente un usuario mediante REVOKE ALL
PRIVILEGES.
Las tres anteriores respuestas son falsas.

12.La siguiente sentencia LOAD DATA LOCAL INFILE


'C:\\temp\\misdatos.txt' INTO TABLE mitabla FIELDS
TERMINATED BY '#' ENCLOSED BY '"' LINES
TERMINATED BY '\n';
Busca el fichero misdatos.txt en la carpeta temp del servidor.
Busca el fichero misdatos.txt en la carpeta temp del cliente.
Busca primero el fichero misdatos.txt en la carpeta temp del servidor y si no
encuentra
busca
en
la
carpeta
temp
del
cliente.
Busca primero el fichero misdatos.txt en la carpeta temp del cliente y si no
encuentra busca en la carpeta temp del servidor.

13. Indica cual de las siguientes afirmaciones no es verdadera con


respecto al proceso de la replicacin de datos:
Permitir

configurar

el

balanceo

de

carga

en

las

consultas.

Permite aumentar la fiabilidad ante las cadas de los servidores.


Permite

configurar el balanceo

de carga en las

transacciones.

Incluye la posibilidad de implementar un servicio de copia de seguridad sobre


el esclavo sin molestar al maestro y por tanto a los usuarios.

14. Indica cual de las siguientes no es una regla valida para


establecer
una
arquitectura
de
replicacin:
Un

maestro

Un

esclavo

puede
solo

tener
debe

muchos
tener

esclavos.

un

maestro.

Servidores maestros pueden ser a su vez esclavos de otros maestros.


Servidores esclavos no pueden ser a su vez maestros de otros esclavos.

15. Indica cual es la condicin indispensable para ejecutar dos


servidores
MySQL
en
la
misma
mquina.
Deben escuchar
Deben

tener

Deben

acceder

las peticiones
dos
a

por dos

directorios
distintos

puertos TCP distintos.

de

datos

fichero

de

diferentes.
configuracin.

Las tres anteriores son ciertas.

16. Indica cual de las siguientes sentencias es correcta para crear un


ndice ordinario llamado miindice sobre el campo micampo de la
tabla
mitabla.
ALTER
CREATE
CREATE

TABLE
INDEX
INDEX

mitabla

ADD

miindice
miindice

ON

INDEX
micampo

FROM

miindice(micampo);
FROM

mitabla

mitabla;

(micampo);

Todas son correctas.

17. Sobre los tipos de ndices marcar cual es la respuesta correcta de


las siguientes:
Los ndices ordinarios son ndices primarios que no admiten valores
duplicados.
Los ndices ordinarios son ndices que no son primarios y permiten valores
duplicados.
Los ndices ordinarios son ndices primarios que admiten valores duplicados.
Las tres anteriores son falsas, por lo tanto, esta es la respuesta correcta.

18. Si en el fichero my.ini tenemos la siguiente entrada en la seccin


[mysqld]: log Que se le esta indicando al servidor MySQL?:
Que se activa el binary log file.
Que se activa el query log file.
Que se activa el error log file.
Que se activa el update log file.

19. Para poder iniciar un servicio de replicacin:


Es aconsejable tener activado el binary log file.
Es necesario tener activado el query log file.
Es necesario tener activado el binary log file.
Es aconsejable tener activado el query log file.

20. Si se lanza la siguiente sentencia desde una ventana de


comandos:
mysqldump -d test > test.sql .Qu se esta almacenando en test.sql?
Solo los datos de la base de datos test no la estructura de sus tablas.
Solo la estructura de tablas la base de datos test no sus datos.
Solo la estructura y los datos de la base de datos test no sus relaciones de
integridad.
Todas las anteriores son falsas.

Parte II, tema 5


Consultas sencillas
Obligatorio

Tablas utilizadas: EMPLEADOS y DEPARTAMENTOS

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

Parte II, tema 6


Seleccin con agrupamientos y funciones de grupo
Obligatorio

Tablas utilizadas: EMPLEADOS, DEPARTAMENTOS, PEDIDOS, PRODUCTOS y CLIENTES.

1. Obtener, para cada departamento, cuantos DIRECTORES hay en el


departamento y cual es su salario medio.
2. Obtener los salarios medios por departamento, ordenados
descendentemente por dicho importe, cuando dichos salarios medios sean
inferiores a 3000 euros
3. Obtener el total de unidades por producto que hay entre todos los
pedidos, visualizando el nmero de producto, la descripcin y la suma.
4. Listar los nmeros de cliente que tengan ms de dos pedidos,
ordenado por cantidad de pedidos
5. Obtener las localidades en las que haya ms de un cliente, visualizando
cuantos clientes hay.
6. Obtener Los datos de los 4 productos de los que ms unidades se han
vendido, visualizando el nmero de producto y las unidades vendidas

Parte II, tema 7


Subconsultas
Obligatorio
Tablas utilizadas: EMPLEADOS , DEPARTAMENTOS, PEDIDOS, PRODUCTOS y CLIENTES.
1. Listar los nombres y cdigos de los departamentos en los que haya
empleados.
2. Obtener los datos del pedido ms reciente.
3. Pare el departamento de VENTAS, visualizar para cada oficio, la suma
de los salarios de los empleados
4. Obtener los datos del producto con ms unidades en los pedidos de los
clientes.
5. Seleccionar los datos de los pedidos correspondientes al realizado con
mayor cantidad de unidades del mismo producto, visualizndolo para
cada producto.
6. Seleccionar los empleados de la empresa que tengan igual comisin
que la media de su oficio

Parte II, tema 8


Consultas multitablas
Obligatorio
Tablas utilizadas: EMPLEADOS, DEPARTAMENTOS, PEDIDOS, PRODUCTOS y CLIENTES.
Enunciado
1. Obtener una lista de los pedidos con la descripcin del producto y el
nombre del cliente clasificados por el nmero del cliente.
2. Obtener los nombres de los empleados y los nombres de sus
departamentos, para aquellos empleados que no son del departamento
VENTAS y que entraron en la empresa despus del 1 de enero de 82.
3. Obtener una lista de los apellidos de los vendedores con el importe
acumulado de sus pedidos.
4. Obtener los nombre de los empleados del departamento 30 que son
jefes directos de algn empleado de la empresa, indicando de cuantos
empleados son jefes.
5. Realizar un listado de los empleados cuyo oficio es EMPLEADO, que
incluir los nmeros de empleado, los apellido y los salarios anuales,
sabiendo que el salario anual es el salario multiplicado por 14, e
incluyendo en este listado el nombre del director del empleado.
6. Visualizar los productos con el nmero total de pedidos, las unidades
totales vendidas, y el precio unidad de cada uno de ellos incluyendo los
que no tienen pedidos (en este caso se mostrar un 0 en el total unidades
vendidas)

Parte II, tema 9


Consultas dentro de otras sentencias
Obligatorio

Tablas utilizadas: EMPLEADOS, DEPARTAMENTOS, PEDIDOS, PRODUCTOS y CLIENTES.


Enunciado
1. Aadir 100 euros de comisin a los empleados tengan una comisin
menor de 500 euros o nula
2. Crear una tabla clientes_producto_20 con las columnas cliente_no y
nombre_cliente, equivalentes a las de la tabla clientes, y unidades_20
equivalente a la de la tabla pedidos, que contenga las filas de la tabla
pedidos correspondientes al producto con nmero 20.
3.
Se
quiere
borrar
al
empleado
MARTINEZ.
Para poder hacerlo sin errores, previamente (en otra sentencia aparte
ejecutada anteriormente) se habrn modificado aquellos empleados de
los que sea jefe MARTINEZ ponindole como jefe al jefe supremo REY.
4. Actualizar la columna debe de la tabla clientes incluyendo en ella el
importe total de los pedidos realizados por cada cliente
5. Crear la vista EMPLEADOS_GARRIDO que incluir los datos empleado_no,
apellido, salario_anual de los empleados cuyo jefe es GARRIDO
6. Crear una vista RESUMEN_DEP de los departamentos, incluyendo todos
los departamento hasta los que no tengan ningn empleado, que permita
mostrar la informacin que se detalla:
Nombre del departamento
Nmero de empleados
Suma de sus salarios
Suma de sus comisiones

BLOQUE II (temas 1, 2, 3 y 4)
SQL CON MYSQL
"Evaluacin I"
Marca la casilla con la respuesta correcta

1. El lenguaje SQL permite:


Controlar el acceso a la informacin
Crear objetos en una base de datos
Recuperar la informacin almacenada en la base de datos
Todas las anteriores

2. En el modelo relacional la restriccin que se utiliza para


relacionar
dos
tablas
es:
PRIMARY KEY
FOREIGN KEY
UNIQUE
CHECK

3. Siendo el valor de A true (verdadero) y el de B null, el resultado


de la expresin A AND B ser:
true
false
null
ninguno de los anteriores

4. Indicar cul de los siguientes identificadores es incorrecto:


b2-ax
ax_b2
axb2
xa2b
5. Indicar cul de las siguientes expresiones es la correcta para

comprobar si el valor de COMISION es nulo (carece de valor):


COMISION IS NULL
COMISION = 0
COMISION = NULL
Cualquiera de los anteriores

6. Para comprobar si un nombre empieza por 'A', qu expresin


sera la correcta?:
nombre='A%'
Nombre LIKE 'A%'
Nombre LIKE 'A_'
Nombre LIKE '%A'
7. Para mostrar los empleados del departamento 10 y del 30 qu

clausula

WHERE

sera

la

adecuada:

Dep_no=10 AND dep_no=30


Dep_no=10 OR dep_no=30
Dep_no BETWEEN 10 AND 30
Dep_no IN (10,20,30)
8. Para buscar un salario entre 1500 y 3500, ambos inclusives:
Salario=1500 OR salario=3500
Salario>1500 AND salario<3500
Salario>1500 OR salario<3500
Salario BETWEEN 1500 AND 3500

9. Para

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

10. Para indicar que una columna va a ser clave principal:


NOT

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. Una restriccin se puede definir a nivel de columna:
Siempre se puede definir
Si no le queremos dar un nombre
Si afecta a una sola columna
Si no le queremos dar un nombre y afecta a una sola columna

13.

La
Es

clusula

obligatoria

ON
para

DELETE
crear

CASCADE:

una

clave

ajena

Es obligatoria para crear una clave ajena que permita el borrado automtico
de
filas
cuando
se
ha
borrado
la
clave
principal
Sirve

para

borrar

filas

seleccionadas

con

un

WHERE

Evita el borrado automtico de filas cuando se ha borrado la clave principal

14. Para

aadir

una

columna

una

tabla

ya

creada:

ALTER TABLE tabla NombreColumna;


ALTER TABLE tabla;
ALTER TABLE tabla ADD NombreColumna;
ALTER TABLE tabla ADD NombreColumna TipoDato;
15. Para cambiar de nombre la tabla Uno por Dos podemos utilizar:
ALTER TABLE Uno RENAME TO Dos;
RENAME TABLE Uno TO Dos;
Los dos anteriores
Ninguno de los anteriores

16. Indicar cul de los siguientes comandos de insercin es


incorrecto:
INSERT INTO departamentos VALUES (50,'MARKETING', NULL);
INSERT INTO departamentos VALUES (50, NULL, 'BILBAO');
INSERT

INTO

departamentos

VALUES

(50,

'MARKETING');

Todos son correctos

17. Indicar cul de los siguientes comandos de insercin es


incorrecto:
INSERT
INTO
('BILBAO',50);

departamentos

(dnombre,

localidad)

VALUES

INSERT
INTO
(50,'MARKETING');

departamentos

(dep_no,

dnombre)

VALUES

INSERT
INTO
('MARKETING',50);

departamentos

(dnombre,

dep_no)

VALUES

INSERT INTO departamentos (dnombre, localidad, dep_no) VALUES


( 'MARKETING',NULL, 50);

18. Para incrementar en 100 Euros el salario de todos los empleados


escribiremos:

UPDATE salario FROM empleados WHERE salario = salario + 100;


UPDATE

salario

FROM

empleados

SET

salario

100;

UPDATE empleados FROM salario WHERE salario = salario + 100;


UPDATE empleados SET salario = 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
Elimina todos los empleados de la tabla empleados

20. Si existe una clave ajena en la tabla EMPLEADOS referenciando


a la tabla DEPARTAMENTOS sin la opcin modificado en cascada,
podremos modificar un departamento:
Siempre
Solo si no tiene empleados
Nunca
Siempre que hagamos primero la modificacin correspondiente en la tabla
EMPLEADOS

BLOQUE II (temas 5, 6, 7, 8 y 9)
SQL CON MYSQL
"Evaluacin II"
Marca la casilla con la respuesta correcta

1. La clusula WHERE:
Selecciona

las

filas

seleccionadas

que

cumplan

una

condicin

Establece un criterio de ordenacin


Indica sobre qu tabla se est realizando la consulta
Modifica las filas de una tabla

2. Para ordenar de mayor a menor por salario y, a igual salario,


alfabticamente por apellido:
ORDER

BY

salario,apellido

ORDER

BY

apellido,salario

ORDER

BY

salario

DESC
DESC,apellido

ORDER BY salario DESC,apellido DESC

3. Para visualizar los tres empleados que ms salario ganan:


SELECT *

FROM

empleados

ORDER

BY salario

LIMIT 3;

SELECT * FROM empleados ORDER BY salario DESC LIMIT 3;


SELECT * FROM empleados ORDER BY salario LIMIT 1,3;
SELECT * FROM empleados ORDER BY salario DESC LIMIT 1,3;

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

5. Las expresiones de columna a especificar en una SELECT con


clusula GROUP BY:
Son

las

Son

las

que
que

se
se

quiera
han

especificar

puesto

en

la

sin

otra

clusula

restriccin

GROUP

BY

Son las columnas o expresiones de agrupacin y/o funciones de grupo


Las funciones de columna que aparezcan en la clusula HAVING

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

7. Para obtener el mayor salario de cada departamento:


SELECT

MAX(salario),dep_no

FROM

empleados

SELECT MAX(salario),dep_no FROM empleados GROUP BY salario


SELECT MAX(salario),dep_no FROM empleados GROUP BY dep_no
SELECT
MAX(salario),dep_no
MAX(salario)=dep_no

FROM

empleados

WHERE

8. Para seleccionar los departamentos con ms de 2 empleados:


SELECT dep_no,COUNT(*) FROM empleados GROUP BY emp_no
SELECT dep_no,COUNT(*) FROM empleados GROUP BY dep_no
SELECT dep_no,COUNT(*) FROM empleados GROUP BY emp_no
HAVING
COUNT(*)>2
SELECT dep_no,COUNT(*) FROM empleados GROUP BY dep_no
HAVING COUNT(*)>2

9. Una subconsulta consiste en:


Realizar
Utilizar

una
los

consulta
resultados

sobre
de

un

una

subconjunto
consulta

dentro

de
de

datos
otra

Almacenar resultados de una consulta para acceder a ellos en posteriores


consultas
Realizar una consulta despus de otra

10.Una subconsulta se describe en:


WHERE
HAVING
WHERE o HAVING
En cualquier clusula de la consulta principal

11. Cul sera la subconsulta correcta para obtener todos los


nmeros de pedido procedentes de clientes de 'BARCELONA':
SELECT pedido_no FROM pedidos
cliente_no
FROM
clientes
WHERE

WHERE cliente_no=(SELECT
localidad='BARCELONA');

SELECT pedido_no FROM pedidos WHERE cliente_no IN (SELECT


cliente_no
FROM
clientes
WHERE
localidad='BARCELONA');
SELECT pedido_no FROM pedidos WHERE cliente_no = (SELECT
cliente_no
FROM
clientes)
AND
localidad='BARCELONA';
SELECT pedido_no FROM pedidos WHERE cliente_no IN (SELECT
cliente_no FROM clientes) AND localidad='BARCELONA';

12. Cul sera la subconsulta correcta obtener los empleados que


ganan
memos
que
la
media
de
su
oficio?
SELECT * FROM empleados WHERE salario < ( SELECT AVG(salario)
FROM
empleados
);
(

SELECT * FROM empleados GROUP BY oficio HAVING salario <


SELECT AVG(salario) FROM empleados GROUP BY oficio);

SELECT * FROM empleados e1 WHERE salario < ( SELECT AVG(salario)


FROM
empleados
WHERE
oficio=e1.oficio);
SELECT * FROM empleados WHERE salario < ( SELECT AVG(salario)
FROM empleados e2 WHERE oficio=e2.oficio);

13. Una composicin o combinacin (JOIN) consiste en:


Obtener
Obtener

filas
todas

de
las

filas

ms
resultantes

de
de

una
multiplicar

tabla
tablas

Aplicar una condicin de seleccin a las filas resultantes de multiplicar tablas


Obtener el producto cartesiano de tablas

14. Para obtener los pedidos con nombres de cliente y de producto:


SELECT
pedido_no,nombre,descripcin,unidades
pedidos,productos,clientes;

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;

15. Para obtener cada nombre de empleado con el nombre de su


director:
SELECT e1.apellido Empleado,e2.apellido "Su director" FROM empleados
e1,empleados
e2
WHERE
e1.director=e2.emp_no;
SELECT e2.apellido Empleado,e2.apellido "Su director" FROM empleados
e1,empleados
e2
WHERE
e1.director=e2.emp_no;
SELECT apellido Empleado,apellido "Su director" FROM empleados
,empleados
WHERE
director=emp_no;
SELECT e1.apellido Empleado,e2.apellido "Su director" FROM empleados
e1,empleados e2 WHERE e2.director=e1.emp_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

SELECT c.cliente_no,nombre,pedido_no FROM clientes c JOIN pedidos p


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;
17. Para

crear una tabla a partir de otra ya creada:

No se puede
Hay que crearla idntica
Se puede crear a partir de una consulta sobre la tabla ya creada
Se puede hacer usando dos sentencias CREATE concatenadas

18.Suponiendo que disponemos de la tabla TNOMBRES (recin


creada y vaca) con una nica columna denominada C1. Para
introducir en ella todos los apellidos de los empleados cuyo
salario supera las 3000 Euros, escribiremos:
UPDATE tnombres SELECT apellido FROM empleados WHERE salario >
3000;
UPDATE tnombres SET c1 = apellido WHERE salario > 3000;
INSERT INTO tnombres SELECT apellido FROM empleados WHERE
salario > 3000;
Ninguna de las anteriores

19.Al crear una vista:


No se puede usar la clusula ORDER BY en la creacin de una vista
La consulta que define a una vista puede incluir a su vez una vista
Se puede crear a partir de una consulta que recupera informacin de varias
tablas relacionadas
Las tres anteriores son correctas

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

Ninguna de las anteriores

las

tablas

vistas

asociadas.

BLOQUE II (temas 10,11 y 12)


SQL CON MYSQL
"Evaluacin III"
Marca la casilla con la respuesta correcta

1. Ventajas de las tablas MyISAM con respecto a las tablas InnoDB


(Marcar la respuesta falsa).
El acceso a los datos es ms rpido.
Consumen menos espacio de disco.
Permiten control de transacciones
Permiten crear tablas comprimidas.

2. Indicar cual de las siguientes afirmaciones es falsa con respecto a


las tablas InnoDB.
Permite definir integridad referencial entre tablas.
Permite bloqueo a nivel de fila.
Permite definir los datos de cada tabla en ficheros independientes separados
del resto de tablas.
Permite a los usuarios un mejor acceso concurrente a la informacin.
3. Si en la base de datos hay una tabla tipo MyISAM llamada

EMPLEADOS
necesariamente debe haber un fichero asociado llamado empleados.frm donde
estn los datos almacenados.
necesariamente debe haber un fichero asociado llamado empleados.frm donde
estn los ndices almacenados.
necesariamente debe haber un fichero asociado llamado empleados.MYD
donde estn los datos almacenados.

necesariamente debe haber un fichero asociado llamado empleados.MDI


donde estn los ndices almacenados.

4. Si estoy lanzando una sentencia del tipo C:\mysql\bin>myisamchk


-u ..\data\test\empleados Que estoy tratando de hacer?
Convertir

la

tabla

empleados

tipo

InnoDB.

Descomprimiendo la tabla empleados que se supone comprimida.


Optimizar

la

tabla

empleados

mediante

una

desfragmentacin.

Comprimiendo la tabla empleados que se supone descomprimida.

5. Indicar que sentencia es verdadera referida a la clusula


IDENTIFIED
BY
de
una
sentencia
GRANT.
Si el usuario no existe y se omite la clusula se crea el usuario sin contrasea.
Si el usuario existe y no se omite la clusula la contrasea que acompaa la
clusula
sustituye
la
anterior.
Si el usuario existe y se omite la clusula permanece vigente la contrasea
anterior.
Todas las anteriores son ciertas.

6. Indicar cual de las siguientes sentencias GRANT no tiene un error


de
sintaxis.
mysql>GRANT ALL PRIVILEGES ON *.* TO manuel@localhost
IDENTIFIED
BY
'algo'
FROM
GRANT
OPTION;
mysql> GRANT ALL PRIVILEGES TO manuel@"%" IDENTIFIED BY
'algo'
;
mysql> GRANT RELOAD, PROCESS ON *.* TO admin@localhost;
mysql> GRANT PRIVILEGES ON *.* TO manuel;

7. Indica cual de las siguientes utilidades de la distribucin de


MySQL no requiere de una comunicacin directa con el servidor
myisamchk
mysqlshow
mysqldump
mysqlimport

8. Que diferencia sucede con los usuarios pepe@localhost y


juan@localhost si se lanzan estas dos sentencias. 1- mysql> SET
PASSWORD FOR pepe@localhost='epep'; y 2- mysql> SET
PASSWORD
FOR
juan@localhost=PASSWORD('nuaj');
La

sentencia

La

sentencia

La

sentencia

tiene

error

encripta
tiene

la

error

de

sintaxis

password
de

la
la

sintaxis

la

est

sentencia
1

est

correcta.
1

no.

correcta.

La sentencia 1 encripta la password la sentencia 2 no

9. Indica la afirmacin correcta con respecto a mysqldump y


mysqlhotcopy
mysqlhotcopy
mysqldump

es
es

solo
solo

para
para

tablas
tablas

InnoDB.
MyISAM.

mysqlhotcopy solo funciona si el servidor no est en ejecucin.


Las tres anteriores son falsas.

11. Si desde la consola de comandos se lanza la siguiente sentencia


shell>mysql -h mihost.midominio.es -u juan -p prueba
Se intenta ejecutar el cliente mysql pero no se llega a conectar con la base de
datos por error en la sintaxis.
Se intenta ejecutar el cliente mysql para acceder a un servidor situado en la
mquina mihost.midominio.es mediante el usuario Juan con password prueba.
Se intenta ejecutar el cliente mysql para acceder a la base de datos prueba de
un servidor situado en la mquina mihost.midominio.es mediante el usuario Juan
que tiene password.
Se intenta ejecutar el cliente mysql para acceder a la base de datos prueba de
un servidor situado en la mquina mihost.midominio.es mediante el usuario Juan
que no tiene password.

12.Indica la respuesta correcta


El eliminar todos los privilegios de un usuario no supone la eliminacin del
usuario.
Se puede eliminar un usuario mediante DROP USER aunque aun conserve
privilegios.
Se puede eliminar completamente un usuario mediante REVOKE ALL
PRIVILEGES.
Las tres anteriores respuestas son falsas.

13.La siguiente sentencia LOAD DATA LOCAL INFILE


'C:\\temp\\misdatos.txt'
INTO
TABLE
mitabla
FIELDS TERMINATED BY '#' ENCLOSED BY '"' LINES
TERMINATED BY '\n';
Busca el fichero misdatos.txt en la carpeta temp del servidor.
Busca el fichero misdatos.txt en la carpeta temp del cliente.
Busca primero el fichero misdatos.txt en la carpeta temp del servidor y si no
encuentra
busca
en
la
carpeta
temp
del
cliente.
Busca primero el fichero misdatos.txt en la carpeta temp del cliente y si no
encuentra busca en la carpeta temp del servidor.

13. Indica cual de las siguientes afirmaciones no es verdadera con


respecto al proceso de la replicacin de datos:
Permitir

configurar

el

balanceo

de

carga

en

las

consultas.

Permite aumentar la fiabilidad ante las cadas de los servidores.


Permite

configurar el balanceo

de carga en las

transacciones.

Incluye la posibilidad de implementar un servicio de copia de seguridad sobre


el esclavo sin molestar al maestro y por tanto a los usuarios.

14.Indica cual de las siguientes no es una regla valida para


establecer una arquitectura de replicacin:
Un

maestro

Un

esclavo

puede
solo

tener
debe

muchos
tener

un

esclavos.
maestro.

Servidores maestros pueden ser a su vez esclavos de otros maestros.


Servidores esclavos no pueden ser a su vez maestros de otros esclavos.

15.Indica cual es la condicin indispensable para ejecutar dos


servidores MySQL en la misma mquina.
Deben escuchar
Deben

tener

Deben

acceder

las peticiones
dos
a

por dos

directorios
distintos

Las tres anteriores son ciertas.

de
fichero

puertos TCP distintos.


datos
de

diferentes.
configuracin.

16. Indica cual de las siguientes sentencias es correcta para crear un


ndice ordinario llamado miindice sobre el campo micampo de la
tabla
mitabla.
ALTER
CREATE

TABLE

mitabla

INDEX

CREATE

ADD

miindice

INDEX

ON

miindice

INDEX

miindice(micampo);

micampo

FROM

FROM

mitabla

mitabla;

(micampo);

Todas son correctas.

16.Sobre los tipos de ndices marcar cual es la respuesta correcta de


las siguientes:
Los ndices ordinarios son ndices primarios que no admiten valores
duplicados.
Los ndices ordinarios son ndices que no son primarios y permiten valores
duplicados.
Los ndices ordinarios son ndices primarios que admiten valores duplicados.
Las tres anteriores son falsas, por lo tanto, esta es la respuesta correcta.

18. Si en el fichero my.ini tenemos la siguiente entrada en la seccin


[mysqld]: log Que se le esta indicando al servidor MySQL?:
Que

se

activa

el

binary

log

file.

Que

se

activa

el

query

log

file.

Que

se

activa

el

error

log

file.

un

servicio

de

activado

el

binary

log

file.

Que se activa el update log file.

19.

Para

poder

iniciar
tener

replicacin:

Es

aconsejable

Es

necesario

tener

activado

el

query

log

file.

Es

necesario

tener

activado

el

binary

log

file.

Es aconsejable tener activado el query log file.

20. Si se lanza la siguiente sentencia desde una ventana de


comandos:
mysqldump -d test > test.sql .Qu se esta almacenando en test.sql?
Solo los datos de la base de datos test no la estructura de sus tablas.
Solo la estructura de tablas la base de datos test no sus datos.
Solo la estructura y los datos de la base de datos test no sus relaciones de
integridad.
Todas las anteriores son falsas

Parte III, tema 11


Administracin de MySQL (I)
Obligatorio
A partir del fichero ASCII TituloAutorNacionalidad.txt que tiene la siguiente
informacin
"Ttulo"#"Autor"#"Nacionalidad"
"Las
lecciones
de
las
cosas"#"Luis
Mateo
Dez"#"Espaol"
"El
secuestro
de
Miss
Blandish"#"James
Hadley
Chase"#"Norteamericano"
"Una
princesa
en
Berln"#"A.
R.
G.
Solmssen"#"Alemn"
"Solal"#"Albert
Cohen"#"Norteamericano"
"Los
Indiferentes"#"Alberto
Moravia"#"Italiano"
"El
cabra"#"Alexandre
Jardin"#"Francs"
"Asuntos
Exteriores"#"Alison
Lurie"#"Britnico"
"La
virtud
sobre
Lorin
Jones"#"Alison
Lurie"#"Britnico"
"Amor
y
amistad"#"Alison
Lurie"#"Britnico"
etc,etc.

Se quiere importar a MYSQL dicha informacin pero optimizando el


almacenamiento de tal forma que la informacin resultante quede
estructurada de la siguiente forma
Tabla NACIONALIDADES
id
nacionalidad
1
Espaol
2
Norteamericano
3
Alemn
4
Italiano
5
Francs
6
Britnico
7
Asiatico
etc,etc,..
Tabla AUTORES
id
autor
1
A. R. G. Solmssen
2
Alan Bennett
3
Albert Cohen
4
Alberto Moravia
5
Alexandre Jardin
6
Alison Lurie
7
Almudena Grandes
etc,etc,..
Tabla TITULOS
id
autor
Las lecciones
1
cosas

id_nac
3
6
2
4
5
6
1

id_aut
de

las

2
3
4
5
6
7

El secuestro de Miss
6
Blandish
Una princesa en Berln 2
Solal
4
Los Indiferentes
5
El cabra
6
Asuntos Exteriores
1

Enunciado
Se pide:
1. Debes acceder al servidor como root y crear la base de datos LIBROS y
a continuacin crear un usuario con password llamado librero con
derechos totales en la base de datos LIBROS y con el permiso FILE que
permite importar ficheros a tablas y exportar tablas a ficheros.
2. Establecer una conexin al servidor MySQL con el usuario librero y
acceder a la base de datos LIBROS. Realizar con este usuario las tareas
necesarias de administracin de BD para pasar la informacin desde el
fichero TituloAutorNacionalidad.txt a las tablas NACIONALIDADES ,
AUTORES y TITULOS. Habr que tener en cuenta que los campos
llamados Id en cada una de las tablas deben ser de tipo auto_increment.
3. Incluye las restricciones de integridad que consideres necesarias entre
las tres tablas.
4. Genera los ficheros ASCII nacionalidades.txt, autores.txt y titulos.txt
exportando las tablas NACIONALIDADES , AUTORES y TITULOS como
ficheros de texto de campos delimitados. El carcter delimitador ser # y
los campos de texto deben ir entrecomillados
Todas estas tareas deben quedar reflejadas en sentencias sql y guardadas
en un fichero de script llamado, por ejemplo, act1_administracion.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 o tutora, para que pueda
comprobar el grado de tu aprendizaje y orientarte adecuadamente, si lo
precisas.

Parte III, tema 12


Administracin de MySQL (II)
Obligatorio

Enunciado
Este ejercicio consiste en hacer una simulacin de un error de actuacin
sobre una base de datos que obliga al Administrador del servidor de base
de datos MySQL a iniciar un proceso de recuperacin de los datos a partir
de la ltima copia de seguridad realizada y posteriormente ejecutar las
sentencias almacenadas en el fichero de log para dejar la base de datos
exactamente como se encontraba inmediatamente antes de producirse el
error.
Pasos a dar para la ejecucin de la prctica.
1. Activa el binary log en el servidor MySQL y comprueba su
funcionamiento correcto. (Lee detenidamente el punto 12.1.4 de la
Documentacin del curso)
2. Crea una base de datos para nuestra prueba llamado por ejemplo
PRUEBACOPIA y crgala con dos tablas a partir del script siguiente:
CREATE DATABASE PRUEBACOPIA;
USE PRUEBACOPIA;
CREATE
TABLE
(
DEP_NO
DNOMBRE
LOCALIDAD
CONSTRAINT
PK_DEPARTAMENTOS_DEP_NO
) engine=myisam;

PRIMARY

DEPARTAMENTOS
INT(2),
VARCHAR(14),
VARCHAR(10),
KEY
(DEP_NO)

INSERT
INTO
DEPARTAMENTOS
VALUES(10,
'CONTABILIDAD',
'BARCELONA');
INSERT
INTO
DEPARTAMENTOS
VALUES(20,
'INVESTIGACION',
'VALENCIA');
INSERT INTO DEPARTAMENTOS VALUES(30, 'VENTAS', 'MADRID');
INSERT
INTO
DEPARTAMENTOS
VALUES(40,
'PRODUCCION',
'SEVILLA');
CREATE
(
APELLIDO

TABLE
EMP_NO

EMPLEADOS
INT(4),
VARCHAR(8),

OFICIO
VARCHAR(10),
DIRECTOR
INT(4),
FECHA_ALTA
DATE,
SALARIO
FLOAT(6,2),
COMISION
FLOAT(6,2),
DEP_NO
INT
(2),
CONSTRAINT
PK_EMPLEADOS_EMP_NO
PRIMARY
KEY
(EMP_NO),
CONSTRAINT
FK_EMP_DIRECTOR
FOREIGN
KEY
(DIRECTOR)
REFERENCES
EMPLEADOS(EMP_NO),
CONSTRAINT
FK_EMP_DEP_NO
FOREIGN
KEY
(DEP_NO)
REFERENCES
DEPARTAMENTOS(DEP_NO)
)engine=myisam;
INSERT
INTO
EMPLEADOS
VALUES
(7839,'REY',
'PRESIDENTE',NULL,'1981-11-17',6000.00,
NULL,
10);
INSERT INTO EMPLEADOS VALUES (7698,'GARRIDO', 'DIRECTOR',
7839,'1981-5-1',3850.00,
NULL,
30);
INSERT INTO EMPLEADOS VALUES (7782,'MARTINEZ','DIRECTOR',
7839,'1981-6-1',2450.00,
NULL,
10);
INSERT
INTO
EMPLEADOS
VALUES(7499,'ALONSO',
'VENDEDOR',
7698,'1981-2-20',1400.00,400.00,30);
INSERT INTO EMPLEADOS VALUES (7521,'LOPEZ', 'EMPLEADO',
7782,'1981-5-8',1350.00,
NULL,10);
INSERT INTO EMPLEADOS VALUES (7654,'MARTIN', 'VENDEDOR',
7698,'1981-9-28',1500.00,
1600.00,
30);
INSERT INTO EMPLEADOS VALUES (7844,'CALVO', 'VENDEDOR',
7698,'1981-9-8',1800.00,
0,
30);
INSERT
INTO
EMPLEADOS
VALUES
(7876,'GIL',
'ANALISTA',
7782,'1982-5-6',3350.00,
NULL,
20);
INSERT INTO EMPLEADOS VALUES (7900,'JIMENEZ', 'EMPLEADO',
7782,'1983-3-24',1400.00, NULL, 20);

3. Crear mediante mysqldump la copia de seguridad completa de la base


datos PRUEBACOPIA del servidor. (Lee detenidamente el punto 11.5.1 de
la Documentacin del curso).
4. Inmediatamente despus de efectuada la copia reiniciamos el servidor
mysql. Esto obliga a que se genere un nuevo fichero binary log
inmediatamente despus de cada proceso de backup.
5. Aadimos algunos cambios a nuestra base de datos de prueba para la
comprobacin posterior. (por ejemplo borramos determinadas filas de una
tabla y creamos una tabla nueva en la base de datos PRUEBACOPIA).
6. Se corrompe la base de datos PRUEBACOPIA o se produce
accidentalmente alguna transaccin no deseada. En nuestro caso

borramos, se supone que por descuido, la base de datos PRUEBACOPIA.


El objetivo es recuperar las tablas a la situacin que tenan justo antes de
producirse esa sentencia errnea de borrado.
7. Antes de proceder a recuperar la copia reiniciamos de nuevo el
servidor para que se inicie un nuevo fichero binary log .
8. Restauramos la ultima copia de seguridad realizada. (Lee
detenidamente el punto 11.5.1 de la Documentacin del curso).
9. Ejecutamos los binary log a partir de la ltima copia efectuada
mediante la herramienta mysqlbinlog. Tenemos que determinar que
fichero binary log es el que tiene los cambios realizados entre la creacin
de la copia de seguridad y la recuperacin de dicha copia. Habr que
analizar con cuidado que parte del fichero log tenemos que relanzar
Ejemplo:
C:\mysql4\bin>mysqlbinlog --port=3308 --start-position=171 --stopposition=246 ..\data\Portatil-bin.000005 | mysql --port=3308

10. Comprobamos que la base de datos se encuentra en el estado previo


al momento de producirse el borrado accidental.
Todos los comandos y sentencias que se realicen en este ejercicio de
simulacin de restauracin completa de una base de datos deben quedar
recogidos en un documento llamado restaurar.txt con los comentarios
necesarios que consideris pertinentes.

BLOQUE III (temas 1, 2, 3 y 4)


SQL CON MYSQL
"Evaluacin I"
Marca la casilla con la respuesta correcta

1. El lenguaje SQL permite:


Controlar
Crear
Recuperar

el
objetos
la

acceso
en

informacin

a
una

almacenada

la

informacin

base
en

de
la

base

datos
de

datos

Todas las anteriores

2. En el modelo relacional la restriccin que se utiliza para


relacionar dos tablas es:
PRIMARY KEY
FOREIGN KEY
UNIQUE
CHECK

3. Siendo el valor de A true (verdadero) y el de B null, el resultado


de la expresin A AND B ser:
true
false
null
ninguno de los anteriores

4. Indicar cul de los siguientes identificadores es incorrecto:


b2-ax
ax_b2
axb2
xa2b
5. Indicar cul de las siguientes expresiones es la correcta para

comprobar si el valor de COMISION es nulo (carece de valor):


COMISION IS NULL
COMISION = 0
COMISION = NULL
Cualquiera de los anteriores

6. Para comprobar si un nombre empieza por 'A', qu expresin


sera la correcta?:
nombre='A%'
Nombre LIKE 'A%'
Nombre LIKE 'A_'
Nombre LIKE '%A'

7. Para mostrar los empleados del departamento 10 y del 30 qu


clausula WHERE sera la adecuada:
Dep_no=10 AND dep_no=30
Dep_no=10 OR dep_no=30
Dep_no BETWEEN 10 AND 30
Dep_no IN (10,20,30)

8. Para buscar un salario entre 1500 y 3500, ambos inclusives:


Salario=1500 OR salario=3500
Salario>1500 AND salario<3500
Salario>1500 OR salario<3500
Salario BETWEEN 1500 AND 3500

9.

Para

crear

una

tabla

se

necesita:

Un nombre de tabla
Las definiciones de las columnas
El

nombre

de

la

tabla

las

definiciones

de

las

columnas

El nombre de la tabla y sus restricciones


10. Para indicar que una columna va a ser clave principal:
NOT 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. Una restriccin se puede definir a nivel de columna:
Siempre se puede definir
Si

no

Si

le

afecta

queremos
a

dar

una

un
sola

nombre
columna

Si no le queremos dar un nombre y afecta a una sola columna

13.

La
Es

de

clusula

obligatoria

ON
para

DELETE
crear

CASCADE:

una

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

Evita el borrado automtico de filas cuando se ha borrado la clave principal

14. Para

aadir

una

columna

una

tabla

ya

creada:

ALTER TABLE tabla NombreColumna;


ALTER TABLE tabla;
ALTER TABLE tabla ADD NombreColumna ;
ALTER TABLE tabla ADD NombreColumna TipoDato;
15. Para cambiar de nombre la tabla Uno por Dos podemos utilizar:
ALTER

TABLE

Uno

RENAME

TO

Dos;

RENAME TABLE Uno TO Dos;


Los dos anteriores
Ninguno de los anteriores

16. Indicar cul de los siguientes comandos de insercin es


incorrecto:
INSERT INTO departamentos VALUES (50,'MARKETING', NULL);
INSERT INTO departamentos VALUES (50, NULL, 'BILBAO');
INSERT

INTO

departamentos

VALUES

(50,

'MARKETING');

Todos son correctos

17. Indicar cul de los siguientes comandos de insercin es


incorrecto:
INSERT
INTO
('BILBAO',50);

departamentos

(dnombre,

localidad)

VALUES

INSERT
INTO
(50,'MARKETING');

departamentos

(dep_no,

dnombre)

VALUES

INSERT
INTO
('MARKETING',50);

departamentos

(dnombre,

dep_no)

VALUES

INSERT INTO departamentos (dnombre, localidad, dep_no) VALUES


( 'MARKETING',NULL, 50);

18. Para incrementar en 100 Euros el salario de todos los empleados


escribiremos:
UPDATE salario FROM empleados WHERE salario = salario + 100;
UPDATE

salario

FROM

empleados

SET

salario

100;

UPDATE empleados FROM salario WHERE salario = salario + 100;


UPDATE empleados SET salario = salario + 100;

19.

La

instruccin

Es

DELETE

incorrecta

FROM

empleados:
errnea

Elimina

el

ltimo

empleado

de

la

tabla

empleados

Elimina

el

primer

empleado

de

la

tabla

empleados

Elimina todos los empleados de la tabla empleados


21. Si existe una clave ajena en la tabla EMPLEADOS referenciando

a la tabla DEPARTAMENTOS sin la opcin modificado en cascada,


podremos
modificar
un
departamento:
Siempre
Solo si no tiene empleados
Nunca
Siempre que hagamos primero la modificacin correspondiente en la tabla
EMPLEADOS

BLOQUE III (temas 5, 6, 7, 8 y 9)


SQL CON MYSQL
"Evaluacin II"
Marca la casilla con la respuesta correcta

1. La clusula WHERE:
Selecciona

las

Establece
Indica

filas

seleccionadas

un
sobre

qu

que

criterio
tabla

se

cumplan
de

est

una

condicin

ordenacin

realizando

la

consulta

Modifica las filas de una tabla


2. Para ordenar de mayor a menor por salario y, a igual salario,

alfabticamente

por

apellido:

ORDER BY salario,apellido
ORDER

BY

apellido,salario

ORDER

BY

salario

DESC
DESC,apellido

ORDER BY salario DESC,apellido DESC

3. Para visualizar los tres empleados que ms salario ganan:


SELECT *

FROM

empleados

ORDER

BY salario

LIMIT 3;

SELECT * FROM empleados ORDER BY salario DESC LIMIT 3;


SELECT * FROM empleados ORDER BY salario LIMIT 1,3;
SELECT * FROM empleados ORDER BY salario DESC LIMIT 1,3;

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

5. Las expresiones de columna a especificar en una SELECT con


clusula
GROUP
BY:
Son

las

Son

las

que
que

se
se

quiera
han

especificar

puesto

en

la

sin

otra

clusula

restriccin

GROUP

BY

Son las columnas o expresiones de agrupacin y/o funciones de grupo


Las funciones de columna que aparezcan en la clusula HAVING

6.

La

clusula

HAVING:

Establece unas condiciones para la seleccin de grupos formados con


GROUP
BY
Realiza
Sustituye

lo

mismo

que

WHERE

cuando

la

clusula
existe

WHERE

GROUP

BY

Ordena los resultados de la agrupacin

7. Para obtener el mayor salario de cada departamento:


SELECT

MAX(salario),dep_no

FROM

empleados

SELECT MAX(salario),dep_no FROM empleados GROUP BY salario


SELECT MAX(salario),dep_no FROM empleados GROUP BY dep_no
SELECT
MAX(salario),dep_no
MAX(salario)=dep_no

FROM

empleados

WHERE

8. Para seleccionar los departamentos con ms de 2 empleados:


SELECT dep_no,COUNT(*) FROM empleados GROUP BY emp_no
SELECT dep_no,COUNT(*) FROM empleados GROUP BY dep_no

SELECT dep_no,COUNT(*) FROM empleados GROUP BY emp_no


HAVING
COUNT(*)>2
SELECT dep_no,COUNT(*) FROM empleados GROUP BY dep_no
HAVING COUNT(*)>2

9.

Una
Realizar
Utilizar

una
los

subconsulta
consulta

consiste

sobre

resultados

de

un

una

en:

subconjunto
consulta

dentro

de

datos

de

otra

Almacenar resultados de una consulta para acceder a ellos en posteriores


consultas
Realizar una consulta despus de otra

10.

Una

subconsulta

se

describe

en:

WHERE
HAVING
WHERE

HAVING

En cualquier clusula de la consulta principal

11. Cul sera la subconsulta correcta para obtener todos los


nmeros de pedido procedentes de clientes de 'BARCELONA':
SELECT pedido_no FROM pedidos
cliente_no
FROM
clientes
WHERE

WHERE cliente_no=(SELECT
localidad='BARCELONA');

SELECT pedido_no FROM pedidos WHERE cliente_no IN (SELECT


cliente_no
FROM
clientes
WHERE
localidad='BARCELONA');
SELECT pedido_no FROM pedidos WHERE cliente_no = (SELECT
cliente_no
FROM
clientes)
AND
localidad='BARCELONA';
SELECT pedido_no FROM pedidos WHERE cliente_no IN (SELECT
cliente_no FROM clientes) AND localidad='BARCELONA';

12. Cul sera la subconsulta correcta obtener los empleados que


ganan
memos
que
la
media
de
su
oficio?
SELECT * FROM empleados WHERE salario < ( SELECT AVG(salario)
FROM
empleados
);
SELECT * FROM empleados GROUP BY oficio HAVING salario <

SELECT

AVG(salario)

FROM

empleados

GROUP

BY

oficio);

SELECT * FROM empleados e1 WHERE salario < ( SELECT AVG(salario)


FROM
empleados
WHERE
oficio=e1.oficio);
SELECT * FROM empleados WHERE salario < ( SELECT AVG(salario)
FROM empleados e2 WHERE oficio=e2.oficio);

13. Una composicin o combinacin (JOIN) consiste en:


Obtener
Obtener

filas
todas

de
las

filas

ms
resultantes

de
de

una
multiplicar

tabla
tablas

Aplicar una condicin de seleccin a las filas resultantes de multiplicar tablas


Obtener el producto cartesiano de tablas

14. Para obtener los pedidos con nombres de cliente y de producto:


SELECT
pedido_no,nombre,descripcin,unidades
pedidos,productos,clientes;

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;

15. Para obtener cada nombre de empleado con el nombre de su


director:
SELECT e1.apellido Empleado,e2.apellido "Su director" FROM empleados
e1,empleados
e2
WHERE
e1.director=e2.emp_no;
SELECT e2.apellido Empleado,e2.apellido "Su director" FROM empleados
e1,empleados
e2
WHERE
e1.director=e2.emp_no;
SELECT apellido Empleado,apellido "Su director" FROM empleados
,empleados
WHERE
director=emp_no;
SELECT e1.apellido Empleado,e2.apellido "Su director" FROM empleados
e1,empleados e2 WHERE e2.director=e1.emp_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;

17. Para crear una tabla a partir de otra ya creada:


No

se

Hay

que

puede
crearla

idntica

Se puede crear a partir de una consulta sobre la tabla ya creada


Se puede hacer usando dos sentencias CREATE concatenadas

18. Suponiendo que disponemos de la tabla TNOMBRES (recin


creada y vaca) con una nica columna denominada C1. Para
introducir en ella todos los apellidos de los empleados cuyo salario
supera
las
3000
Euros,
escribiremos:
UPDATE tnombres SELECT apellido FROM empleados WHERE salario >
3000;
UPDATE tnombres SET c1 = apellido WHERE salario > 3000;
INSERT INTO tnombres SELECT apellido FROM empleados WHERE
salario
>
3000;
Ninguna de las anteriores

19.

Al

crear

una

vista:

No se puede usar la clusula ORDER BY en la creacin de una vista


La consulta que define a una vista puede incluir a su vez una vista
Se puede crear a partir de una consulta que recupera informacin de varias
tablas
relacionadas
Las tres anteriores son correctas

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

Ninguna de las anteriores

las

tablas

vistas

asociadas.

BLOQUE III (temas 10,11 y 12)


SQL CON MYSQL
"Evaluacin III"
Marca la casilla con la respuesta correcta

1. Ventajas de las tablas MyISAM con respecto a las tablas InnoDB


(Marcar
la
respuesta
falsa).
El

acceso

Consumen

los

datos

menos

Permiten

es

espacio

control

de

ms
de

rpido.
disco.

transacciones

Permiten crear tablas comprimidas.

2. Indicar cual de las siguientes afirmaciones es falsa con respecto a


las
tablas
InnoDB.
Permite
Permite
del

definir
bloqueo

integridad
a

referencial
nivel

entre
de

tablas.
fila.

Permite definir los datos de cada tabla en ficheros independientes separados


resto
de
tablas.
Permite a los usuarios un mejor acceso concurrente a la informacin.

3. Si en la base de datos hay una tabla tipo MyISAM llamada


EMPLEADOS
necesariamente debe haber un fichero asociado llamado empleados.frm donde
estn
los
datos
almacenados.

necesariamente debe haber un fichero asociado llamado empleados.frm donde


estn
los
ndices
almacenados.
necesariamente debe haber un fichero asociado llamado empleados.MYD
donde
estn
los
datos
almacenados.
necesariamente debe haber un fichero asociado llamado empleados.MDI
donde estn los ndices almacenados.

4. Si estoy lanzando una sentencia del tipo C:\mysql\bin>myisamchk


-u ..\data\test\empleados Que estoy tratando de hacer?
Convertir

la

tabla

empleados

tipo

InnoDB.

Descomprimiendo la tabla empleados que se supone comprimida.


Optimizar

la

tabla

empleados

mediante

una

desfragmentacin.

Comprimiendo la tabla empleados que se supone descomprimida.

5. Indicar que sentencia es verdadera referida a la clusula


IDENTIFIED
BY
de
una
sentencia
GRANT.
Si el usuario no existe y se omite la clusula se crea el usuario sin contrasea.
Si el usuario existe y no se omite la clusula la contrasea que acompaa la
clusula
sustituye
la
anterior.
Si el usuario existe y se omite la clusula permanece vigente la contrasea
anterior.
Todas las anteriores son ciertas.

6. Indicar cual de las siguientes sentencias GRANT no tiene un error


de
sintaxis.
mysql>GRANT ALL PRIVILEGES ON *.* TO manuel@localhost
IDENTIFIED
BY
'algo'
FROM
GRANT
OPTION;
mysql> GRANT ALL PRIVILEGES TO manuel@"%" IDENTIFIED BY
'algo'
;
mysql> GRANT RELOAD, PROCESS ON *.* TO admin@localhost;
mysql> GRANT PRIVILEGES ON *.* TO manuel;

7. Indica cual de las siguientes utilidades de la distribucin de


MySQL no requiere de una comunicacin directa con el servidor

myisamchk
mysqlshow
mysqldump
mysqlimport

8. Que diferencia sucede con los usuarios pepe@localhost y


juan@localhost si se lanzan estas dos sentencias. 1- mysql> SET
PASSWORD FOR pepe@localhost='epep'; y 2- mysql> SET
PASSWORD
FOR
juan@localhost=PASSWORD('nuaj');
La

sentencia

La

sentencia

La

sentencia

tiene

error

encripta
tiene

la

error

de

sintaxis

password
de

la
la

sintaxis

la

est

sentencia
1

est

correcta.
1

no.

correcta.

La sentencia 1 encripta la password la sentencia 2 no

9. Indica la afirmacin correcta con respecto a mysqldump y


mysqlhotcopy
mysqlhotcopy
mysqldump

es
es

solo
solo

para
para

tablas
tablas

InnoDB.
MyISAM.

mysqlhotcopy solo funciona si el servidor no est en ejecucin.


Las tres anteriores son falsas.

10. Si desde la consola de comandos se lanza la siguiente sentencia


shell>mysql -h mihost.midominio.es -u juan -p prueba
Se intenta ejecutar el cliente mysql pero no se llega a conectar con la base de
datos
por
error
en
la
sintaxis.
Se intenta ejecutar el cliente mysql para acceder a un servidor situado en la
mquina mihost.midominio.es mediante el usuario Juan con password prueba.
Se intenta ejecutar el cliente mysql para acceder a la base de datos prueba de
un servidor situado en la mquina mihost.midominio.es mediante el usuario Juan
que
tiene
password.
Se intenta ejecutar el cliente mysql para acceder a la base de datos prueba de
un servidor situado en la mquina mihost.midominio.es mediante el usuario Juan
que no tiene password.

11.

Indica

la

respuesta

correcta

El eliminar todos los privilegios de un usuario no supone la eliminacin del


usuario.
Se puede eliminar un usuario mediante DROP USER aunque aun conserve
privilegios.
Se puede eliminar completamente un usuario mediante REVOKE ALL
PRIVILEGES.
Las tres anteriores respuestas son falsas.

12.
La
siguiente
sentencia
LOAD
DATA
LOCAL
INFILE
'C:\\temp\\misdatos.txt'
INTO
TABLE
mitabla
FIELDS TERMINATED BY '#' ENCLOSED BY '"'
LINES
TERMINATED
BY
'\n';
Busca el fichero misdatos.txt en la carpeta temp del servidor.
Busca el fichero misdatos.txt en la carpeta temp del cliente.
Busca primero el fichero misdatos.txt en la carpeta temp del servidor y si no
encuentra
busca
en
la
carpeta
temp
del
cliente.
Busca primero el fichero misdatos.txt en la carpeta temp del cliente y si no
encuentra busca en la carpeta temp del servidor.

13. Indica cual de las siguientes afirmaciones no es verdadera con


respecto al proceso de la replicacin de datos:
Permitir

configurar

el

balanceo

de

carga

en

las

consultas.

Permite aumentar la fiabilidad ante las cadas de los servidores.


Permite

configurar el balanceo

de carga en las

transacciones.

Incluye la posibilidad de implementar un servicio de copia de seguridad sobre


el esclavo sin molestar al maestro y por tanto a los usuarios.

14. Indica cual de las siguientes no es una regla valida para


establecer
una
arquitectura
de
replicacin:
Un

maestro

Un

esclavo

puede
solo

tener
debe

muchos
tener

un

esclavos.
maestro.

Servidores maestros pueden ser a su vez esclavos de otros maestros.


Servidores esclavos no pueden ser a su vez maestros de otros esclavos.

15. Indica cual es la condicin indispensable para ejecutar dos


servidores
MySQL
en
la
misma
mquina.
Deben escuchar
Deben

tener

Deben

acceder

las peticiones
dos

por dos

directorios

distintos

puertos TCP distintos.

de

datos

fichero

de

diferentes.
configuracin.

Las tres anteriores son ciertas.

16. Indica cual de las siguientes sentencias es correcta para crear un


ndice ordinario llamado miindice sobre el campo micampo de la
tabla
mitabla.
ALTER
CREATE

TABLE

mitabla

INDEX

CREATE

ADD

miindice

INDEX

ON

miindice

INDEX
micampo

FROM

miindice(micampo);
FROM

mitabla

mitabla;

(micampo);

Todas son correctas.

17. Sobre los tipos de ndices marcar cual es la respuesta correcta de


las
siguientes:
Los ndices ordinarios son ndices primarios que no admiten valores
duplicados.
Los ndices ordinarios son ndices que no son primarios y permiten valores
duplicados.
Los ndices ordinarios son ndices primarios que admiten valores duplicados.
Las tres anteriores son falsas, por lo tanto, esta es la respuesta correcta.

18. Si en el fichero my.ini tenemos la siguiente entrada en la seccin


[mysqld]: log Que se le esta indicando al servidor MySQL?:
Que

se

activa

el

binary

log

file.

Que

se

activa

el

query

log

file.

Que

se

activa

el

error

log

file.

un

servicio

de

activado

el

binary

log

file.

Que se activa el update log file.

19.

Para

poder

iniciar
tener

replicacin:

Es

aconsejable

Es

necesario

tener

activado

el

query

log

file.

Es

necesario

tener

activado

el

binary

log

file.

Es aconsejable tener activado el query log file.

20. Si se lanza la siguiente sentencia desde una ventana de


comandos:
mysqldump -d test > test.sql .Qu se esta almacenando en test.sql?
Solo los datos de la base de datos test no la estructura de sus tablas.
Solo la estructura de tablas la base de datos test no sus datos.
Solo la estructura y los datos de la base de datos test no sus relaciones de
integridad.
Todas las anteriores son falsas.