SlideShare una empresa de Scribd logo
1 de 71
Descargar para leer sin conexión
MANUAL DE TRABAJOS
Ejercicios
En este Manual de Trabajo aparece el acceso a los distintos ejercicios

opcionales      y      obligatorios        del   curso      de        SQL.

Los ejercicios están divididos según 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 realización 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 resolución de

esta actividad. No obstante, ten en cuenta que no se trata de un ejercicio

de autoevaluación, sino de evaluación 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 envíalo 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,

necesitarás el fichero "ejecutame". Que se encuentra dentro de

la carpeta Moving to sql.




Parte I, tema 1
El lenguaje de gestión 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 número 7499 pertenece al departamento número:
a. 30
b. 20
c. 40
2.- El DIRECTOR del empleado 7844 es el empleado número:
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       para   verificar   la
afirmación

6.- El cliente INDUSTRIAS LACTEAS S.A. ha realizado:
a. Un pedido
b. Dos pedidos
c. Tres pedidos
7.- Sql es un Sistema Gestor de Bases de Datos:
a. Jerárquico
b. En red
c. Relacional



8.- Según el modelo relacional:
a. Cada fila de una tabla representa un atributo o característica
b. Cada columna de una tabla representa un atributo o característica
c. Cada entidad representa un atributo o característica



9.- SQL es:
a. Un lenguaje estructurado de consulta
b. Un lenguaje procedimental de tercera generación
c. Ambas son correctas
10.- El lenguaje SQL permite:
a. Manipular datos (consultar, actualizar, etcétera)
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.- Cuál 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 alfanumérico con un patrón de comparación
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 expresión 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 expresión A AND B será:
a. Verdadero (true)
b. Falso (false)
c. Nulo (null)
6.- Para redondear a dos decimales un número (num) utilizaremos la
función:

a. POWER(num,2)
b. TRUNC(num,2)
c. ROUND(num,2)
7.- Para obtener la longitud de una cadena (cad) utilizaremos la función:
a. LPAD(cad)
b. LOWER(cad)
c. LENGTH(cad)
8.- Para calcular en número de días entre dos fechas (fecha1 y fecha2)
utilizaremos la función:
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 expresión:
a. salario + comision
b. IFNULL (salario,0) + comision
c. salario + IFNULL(comision,0)
10.- Una condición 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
Creación 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

Definición de las tablas


Tabla COMPRADORES
Campo                        Tipo
CIF_comprador                alfanumérico    de   11 caracteres
Nombre_social                alfanumérico    de   30 caracteres
Domicilio_social             alfanumérico    de   30 caracteres
Localidad                    alfanumérico    de   30 caracteres
C_postal                     alfanumérico    de   5 caracteres
Teléfono                     alfanumérico    de   9 caracteres

Tabla ARTICULOS
Campo                        Tipo
Referencia_articulo          alfanumérico de 12 caracteres
Descripción_articulo         alfanumérico de 30 caracteres
Precio_unidad                numérico de 6 posiciones, con dos decimales
IVA                          numérico de 2 posiciones
Existencias_actuales         numérico de 5 posiciones

Tabla FACTURAS
Campo                        Tipo
Factura_no                   numérico de 6 posiciones
Fecha_factura                tipo fecha
CIF_cliente                  alfanumérico de 11 caracteres

Tabla LINEAS_FACTURA
Campo                        Tipo
Factura_no                   numérico de 6 posiciones
Referencia_articulo          alfanumérico de 12 caracteres
Unidades                     numérico de 3 posiciones

Enunciado

1. Creación 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. Añadir a la tabla FACTURAS la columna cod_oficina de tipo numérico de
4 posiciones, con el número de oficina

3. Añadir 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. Añadir a la columna cod_oficina de la tabla FACTURAS la comprobación
de estar entre 1 y 1000.
Parte I, tema 4
   Actualización de tablas
   Obligatorio

NOTA: si se quiere hacer pruebas y que las actualizaciones de las tablas no sean validadas,
se puede trabajar con el parámetro 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         ALGODÓN 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       Fecha_factura                       Cliente_no        Cod_oficina
1                12 de mayo de 2004                  111111-L          1212
2                18 de julio de 2004                 111111-L          1231
3                31 de julio de 2004                 222222-J          1406
4                10 de agosto de 2004                222222-J          1212

Tabla LINEAS_FACTURAS
Factura_no          Referencia_articulo                                Unidades
1                   01-LANA                                            120
1                   04-LINO                                            75
2                   01-LANA                                            20
2                   02-ALGODÓN                                         50

2. Insertar un nuevo artículo con valores

Referencia_articulo                               Precio_unidad                   IVA
06-CUERO                                          10.99                           10

Hacer un listado de las filas de la tabla ARTICULOS (SELECT * FROM articulos;) e
indicar   que   ha sucedido con las columnas          descripcion_articulo    y
existencias_actuales razonando la respuesta.

3. Hacer una rebaja del IVA en un punto para cada artículo

4. Modificar la descripción del artículo 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 líneas de factura. Para
comprobarlo hacer un listado de las filas
BLOQUE I (temas 1, 2, 3 y 4)
GESTION DE DATOS CON SQL

"Evaluación I"


Marca la casilla con la respuesta correcta



      1. El lenguaje SQL permite:
         Controlar         el        acceso         a           la          información
         Crear        objetos        en       una        base          de         datos
         Recuperar    la   información    almacenada    en   la      base    de   datos
         Todas las anteriores

      2. En el modelo relacional la restricción 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 expresión A AND B será:
         true
         false
         null
         ninguno de los anteriores
4. Indicar cuál de los siguientes identificadores es incorrecto:
   b2-ax
   ax_b2
   axb2
   xa2b

5. Indicar cuál 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é expresión
sería 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 sería 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 cláusulas:
      FOREIGN KEY
      FOREIGN KEY con REFERENCES
      FOREIGN KEY con REFERENCES y ON DELETE CASCADE
      FOREIGN KEY y PRIMARY KEY

12. Una restricción 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         cláusula          ON        DELETE             CASCADE:
      Es obligatoria para crear una clave ajena
     Es obligatoria para crear una clave ajena que permita el borrado automático
de filas cuando se ha borrado la clave principal
      Sirve para borrar filas seleccionadas con un WHERE
      Evita el borrado automático de filas cuando se ha borrado la clave principal
14.     Para    añadir       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 cuál de los siguientes comandos de inserción 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 cuál de los siguientes comandos de inserción es
incorrecto:
    INSERT     INTO          departamentos   (dnombre,     localidad)   VALUES
('BILBAO',50);
     INSERT  INTO            departamentos   (dep_no,      dnombre)     VALUES
(50,'MARKETING');
   INSERT    INTO            departamentos   (dnombre,      dep_no)     VALUES
('MARKETING',50);
   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 instrucción DELETE FROM empleados:
   Es incorrecta o errónea
   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 opción modificado en cascada,
podremos modificar un departamento:
   Siempre
   Solo si no tiene empleados
   Nunca
  Siempre que hagamos primero la modificación correspondiente en la tabla
EMPLEADOS
BLOQUE I (temas 5, 6, 7, 8 y 9)
GESTION DE DATOS CON SQL

"Evaluación II"


Marca la casilla con la respuesta correcta



      1. La cláusula WHERE:
         Selecciona       las   filas    seleccionadas   que   cumplan    una    condición
         Establece un criterio de ordenación
         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,
         alfabéticamente 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 más 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
   cláusula GROUP BY:
    Son las que se quiera especificar sin otra restricción
    Son las que se han puesto en la cláusula GROUP BY
    Son las columnas o expresiones de agrupación y/o funciones de grupo
    Las funciones de columna que aparezcan en la cláusula HAVING

6. La cláusula HAVING:
  Establece unas condiciones para la selección de grupos formados con
GROUP BY
    Realiza lo mismo que la cláusula WHERE
    Sustituye a WHERE cuando existe GROUP BY
    Ordena los resultados de la agrupación

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             FROM          empleados   WHERE
MAX(salario)=dep_no

8. Para seleccionar los departamentos con más 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 después de otra

10. Una subconsulta se describe en:
   WHERE
   HAVING
   WHERE o HAVING
   En cualquier cláusula de la consulta principal

11. ¿Cuál sería la subconsulta correcta para obtener todos los
   números 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. ¿Cuál sería 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     composición         o    combinación      (JOIN)     consiste     en:

      Obtener         filas         de        más         de         una         tabla
      Obtener     todas       las   filas   resultantes   de    multiplicar     tablas
      Aplicar una condición de selección 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,descripción,unidades                 FROM
pedidos,productos,clientes;
    SELECT              pedido_no,nombre,descripción,unidades                 FROM
pedidos,productos,clientes      WHERE        cliente_no=cliente_no             AND
producto_no=producto_no;
    SELECT       pedido_no,nombre,descripción,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,descripción,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                ningún               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                               puede
   Hay                    que                 crearla                 idéntica
   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 (recién
creada y vacía) 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 cláusula ORDER BY en la creación 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 información 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 quedarán 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 selección de la
vista.
    Se elimina la vista y las tablas y vistas asociadas.
    Ninguna de las anteriores
BLOQUE I (temas 10,11 y 12)
GESTION DE DATOS CON SQL

"Evaluación 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 más rápido.
           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 información.

      3.  Si en la base de datos hay una tabla tipo MyISAM llamada
      EMPLEADOS
          necesariamente debe haber un fichero asociado llamado empleados.frm donde
      están los datos almacenados.
          necesariamente debe haber un fichero asociado llamado empleados.frm donde
      están los índices almacenados.
         necesariamente debe haber un fichero asociado llamado empleados.MYD
      donde están los datos almacenados.
necesariamente debe haber un fichero asociado llamado empleados.MDI
donde están los índices almacenados.

4. Si estoy lanzando una sentencia del tipo C:mysqlbin>myisamchk
-u ..datatestempleados ¿Que estoy tratando de hacer?

   Convertir         la           tabla        empleados       a     tipo    InnoDB.
   Descomprimiendo la tabla empleados que se supone comprimida.
   Optimizar    la        tabla     empleados      mediante    una   desfragmentación.
   Comprimiendo la tabla empleados que se supone descomprimida.

4. Indicar que sentencia es verdadera referida a la cláusula
   IDENTIFIED                BY           de       una        sentencia     GRANT.

       Si el usuario no existe y se omite la cláusula se crea el usuario sin
   contraseña.
        Si el usuario existe y no se omite la cláusula la contraseña que acompaña
   la cláusula sustituye la anterior.
       Si el usuario existe y se omite la cláusula permanece vigente la contraseña
   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 distribución de
MySQL no requiere de una comunicación 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    1        tiene   error       de    sintaxis    la     2      está    correcta.
    La    sentencia    2        encripta      la    password        la     sentencia       1    no.
    La   sentencia    2        tiene   error       de    sintaxis    la     1      está    correcta.
    La sentencia 1 encripta la password la sentencia 2 no

9. Indica la afirmación correcta con respecto a mysqldump y
mysqlhotcopy

    mysqlhotcopy               es          solo          para             tablas           InnoDB.
    mysqldump             es           solo             para         tablas               MyISAM.
    mysqlhotcopy solo funciona si el servidor no está en ejecución.
    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
máquina 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 máquina 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 máquina 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 eliminación 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:tempmisdatos.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   replicación   de    datos:

    Permitir        configurar     el    balanceo        de         carga        en     las         consultas.
    Permite aumentar la fiabilidad ante las caídas 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      replicación:
   Un         maestro               puede            tener            muchos            esclavos.
   Un        esclavo            solo         debe             tener           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 condición indispensable para ejecutar dos
servidores     MySQL        en      la     misma       máquina.
   Deben    escuchar      las       peticiones      por    dos      puertos     TCP     distintos.
   Deben        tener       dos           directorios          de       datos         diferentes.
   Deben       acceder          a       distintos         fichero       de         configuración.
   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        TABLE           mitabla       ADD            INDEX       miindice(micampo);
   CREATE        INDEX          miindice         ON          micampo         FROM        mitabla;
   CREATE         INDEX              miindice         FROM            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 sección
[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 replicación:
    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 día>> de <<nombre del mes>> de <<año con 4
dígitos>>

2. Hallar por orden alfabético los apellidos de los empleados, suprimiendo
las tres últimas letras, mostrando solo aquellos cuyo apellido tenga más
de seis caracteres

3. Se desea hacer un regalo de un 3% del salario a los empleados que no
tienen comisión. Obtener el listado ordenado por orden alfabético con los
apellidos y el importe de los regalos

4. Obtener los datos de los empleados cuyo salario total
(salario+comisión) supere los 2.000 euros, siempre que además su
salario supere los 1800 euros o su comisión supere los 500 euros

5. Visualizar los datos del empleado de oficio DIRECTOR más antiguo en
la empresa.

6. Visualizar los datos de los dos empleados que ganan más salario entre los empleados
de los departamento 20 y 30
Parte II, tema 6
Selección 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 número de producto, la descripción y la suma.

4. Listar los números de cliente que tengan más de dos pedidos,
ordenado por cantidad de pedidos

5. Obtener las localidades en las que haya más de un cliente, visualizando
cuantos clientes hay.

6. Obtener Los datos de los 4 productos de los que más unidades se han
vendido, visualizando el número 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 códigos de los departamentos en los que haya
empleados.

2. Obtener los datos del pedido más 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 más 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, visualizándolo para
cada producto.

6. Seleccionar los empleados de la empresa que tengan igual comisión
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 descripción del producto y el
nombre del cliente clasificados por el número 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 después 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 algún empleado de la empresa, indicando de cuantos
empleados son jefes.

5. Realizar un listado de los empleados cuyo oficio es EMPLEADO, que
incluirá los números 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 número 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. Añadir 100 euros de comisión a los empleados tengan una comisión
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 número 20.

3.      Se       quiere   borrar      al     empleado        MARTINEZ.
Para poder hacerlo sin errores, previamente (en otra sentencia aparte
ejecutada anteriormente) se habrán modificado aquellos empleados de
los que sea jefe MARTINEZ poniéndole 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 ningún empleado, que permita
mostrar la información que se detalla:

· Nombre del departamento
  Número de empleados
· Suma de sus salarios
· Suma de sus comisiones
BLOQUE II (temas 1, 2, 3 y 4)
GESTION DE DATOS CON SQL

"Evaluación I"


Marca la casilla con la respuesta correcta



      1. El lenguaje SQL permite:
         Controlar el acceso a la información
         Crear objetos en una base de datos
         Recuperar la información almacenada en la base de datos
         Todas las anteriores

      2. En el modelo relacional la restricción 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 expresión A AND B será:
         true
         false
         null
         ninguno de los anteriores
4. Indicar cuál de los siguientes identificadores es incorrecto:
   b2-ax
   ax_b2
   axb2
   xa2b

5. Indicar cuál 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é expresión
   sería 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           sería    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                                                                                    cláusulas:
      FOREIGN KEY
      FOREIGN                      KEY                    con                   REFERENCES
      FOREIGN KEY con REFERENCES y ON DELETE CASCADE
      FOREIGN KEY y PRIMARY KEY

12.        Una restricción 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         cláusula            ON            DELETE                CASCADE:
      Es          obligatoria       para          crear           una          clave        ajena
      Es obligatoria para crear una clave ajena que permita el borrado automático
de       filas    cuando      se     ha      borrado    la     clave     principal
      Sirve       para    borrar     filas     seleccionadas            con     un       WHERE
      Evita el borrado automático de filas cuando se ha borrado la clave principal
14.      Para    añadir      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 cuál de los siguientes comandos de inserción 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 cuál de los siguientes comandos de inserción es
incorrecto:

    INSERT     INTO         departamentos    (dnombre,       localidad)      VALUES
('BILBAO',50);
     INSERT  INTO            departamentos    (dep_no,       dnombre)        VALUES
(50,'MARKETING');
   INSERT    INTO            departamentos    (dnombre,       dep_no)        VALUES
('MARKETING',50);
   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 instrucción DELETE FROM empleados:
   Es incorrecta o errónea
   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 opción modificado en cascada,
podremos modificar un departamento:
   Siempre
   Solo si no tiene empleados
   Nunca
  Siempre que hagamos primero la modificación correspondiente en la tabla
EMPLEADOS
BLOQUE II (temas 5, 6, 7, 8 y 9)
GESTION DE DATOS CON SQL

"Evaluación II"


Marca la casilla con la respuesta correcta



      1. La cláusula WHERE:
         Selecciona       las   filas    seleccionadas     que     cumplan      una     condición
         Establece un criterio de ordenación
         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,
         alfabéticamente 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 más 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
   cláusula GROUP BY:
     Son     las     que        se     quiera       especificar    sin   otra   restricción
     Son     las    que    se        han   puesto      en   la    cláusula   GROUP     BY
     Son las columnas o expresiones de agrupación y/o funciones de grupo
     Las funciones de columna que aparezcan en la cláusula HAVING

6. La cláusula HAVING:
  Establece unas condiciones para la selección de grupos formados con
GROUP BY
     Realiza lo mismo que la cláusula WHERE
     Sustituye a WHERE cuando existe GROUP BY
     Ordena los resultados de la agrupación

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                     FROM        empleados     WHERE
MAX(salario)=dep_no

8. Para seleccionar los departamentos con más 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 después de otra

10. Una subconsulta se describe en:
   WHERE
   HAVING
   WHERE o HAVING
   En cualquier cláusula de la consulta principal

11. ¿Cuál sería la subconsulta correcta para obtener todos los
números 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. ¿Cuál sería 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     composición         o    combinación      (JOIN)     consiste     en:
      Obtener         filas         de        más         de         una         tabla
      Obtener     todas       las   filas   resultantes   de    multiplicar     tablas
      Aplicar una condición de selección 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,descripción,unidades                 FROM
pedidos,productos,clientes;
    SELECT              pedido_no,nombre,descripción,unidades                 FROM
pedidos,productos,clientes      WHERE        cliente_no=cliente_no             AND
producto_no=producto_no;
    SELECT       pedido_no,nombre,descripción,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,descripción,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 ningún 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 puede
      Hay que crearla idéntica
      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 (recién
    creada y vacía) 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 cláusula ORDER BY en la creación 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 información 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 quedarán 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 selección de la
vista.
    Se    elimina    la   vista    y    las   tablas   y    vistas    asociadas.
    Ninguna de las anteriores
BLOQUE II (temas 10,11 y 12)
GESTION DE DATOS CON SQL

"Evaluación 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 más rápido.
           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 información.

      3.  Si en la base de datos hay una tabla tipo MyISAM llamada
      EMPLEADOS
          necesariamente debe haber un fichero asociado llamado empleados.frm donde
      están los datos almacenados.
          necesariamente debe haber un fichero asociado llamado empleados.frm donde
      están los índices almacenados.
         necesariamente debe haber un fichero asociado llamado empleados.MYD
      donde están los datos almacenados.
necesariamente debe haber un fichero asociado llamado empleados.MDI
donde están los índices almacenados.

4. Si estoy lanzando una sentencia del tipo C:mysqlbin>myisamchk
-u ..datatestempleados ¿Que estoy tratando de hacer?
    Convertir          la           tabla    empleados       a     tipo     InnoDB.
    Descomprimiendo la tabla empleados que se supone comprimida.
    Optimizar     la        tabla     empleados   mediante   una   desfragmentación.
    Comprimiendo la tabla empleados que se supone descomprimida.

5. Indicar que sentencia es verdadera referida a la cláusula
IDENTIFIED       BY      de    una     sentencia   GRANT.
    Si el usuario no existe y se omite la cláusula se crea el usuario sin contraseña.
    Si el usuario existe y no se omite la cláusula la contraseña que acompaña la
cláusula                   sustituye                  la                anterior.
    Si el usuario existe y se omite la cláusula permanece vigente la contraseña
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 distribución de
MySQL no requiere de una comunicación 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    1        tiene   error       de    sintaxis    la     2      está    correcta.
      La    sentencia    2        encripta      la    password        la     sentencia       1    no.
      La   sentencia    2        tiene   error       de    sintaxis    la     1      está    correcta.
      La sentencia 1 encripta la password la sentencia 2 no

9. Indica la afirmación correcta con respecto a mysqldump y
mysqlhotcopy
      mysqlhotcopy               es          solo          para             tablas           InnoDB.
      mysqldump             es           solo             para         tablas               MyISAM.
      mysqlhotcopy solo funciona si el servidor no está en ejecución.
      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
máquina 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 máquina 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 máquina 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 eliminación 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:tempmisdatos.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   replicación   de    datos:

    Permitir        configurar         el     balanceo        de         carga        en      las         consultas.
    Permite aumentar la fiabilidad ante las caídas 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 replicación:
    Un              maestro                puede             tener               muchos                   esclavos.
    Un          esclavo                solo         debe                 tener             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 condición indispensable para ejecutar dos
    servidores MySQL en la misma máquina.
    Deben      escuchar         las        peticiones      por         dos     puertos       TCP          distintos.
    Deben            tener        dos           directorios               de          datos           diferentes.
    Deben            acceder          a        distintos           fichero            de        configuración.
    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        TABLE         mitabla      ADD        INDEX            miindice(micampo);
      CREATE        INDEX         miindice       ON      micampo           FROM              mitabla;
      CREATE            INDEX         miindice        FROM             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 sección
[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       replicación:
      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 III, tema 11
Administración de MySQL (I)
Obligatorio

A partir del fichero ASCII TituloAutorNacionalidad.txt que tiene la siguiente
información

"Título"#"Autor"#"Nacionalidad"
"Las    lecciones    de    las   cosas"#"Luis    Mateo    Díez"#"Español"
"El       secuestro       de      Miss      Blandish"#"James       Hadley
Chase"#"Norteamericano"
"Una    princesa     en    Berlín"#"A.    R.    G.     Solmssen"#"Alemán"
"Solal"#"Albert                                  Cohen"#"Norteamericano"
"Los              Indiferentes"#"Alberto             Moravia"#"Italiano"
"El                  cabra"#"Alexandre                  Jardin"#"Francés"
"Asuntos              Exteriores"#"Alison              Lurie"#"Británico"
"La    virtud     sobre    Lorin    Jones"#"Alison     Lurie"#"Británico"
"Amor           y           amistad"#"Alison           Lurie"#"Británico"
etc,etc….

Se quiere importar a MYSQL dicha información pero optimizando el
almacenamiento de tal forma que la información resultante quede
estructurada de la siguiente forma

                   Tabla NACIONALIDADES
                   id   nacionalidad
                   1    Espa±ol
                   2    Norteamericano
                   3    Alemßn
                   4    Italiano
                   5    FrancÚs
                   6    Britßnico
                   7    Asiatico
                   etc,etc,..

                   Tabla AUTORES
                   id   autor                  id_nac
                   1    A. R. G. Solmssen      3
                   2    Alan Bennett           6
                   3    Albert Cohen           2
                   4    Alberto Moravia        4
                   5    Alexandre Jardin       5
                   6    Alison Lurie           6
                   7    Almudena Grandes       1
                   etc,etc,..

                   Tabla TITULOS
                   id   autor                        id_aut
                        Las lecciones     de   las
                   1                                 3
                        cosas
El secuestro de Miss
                  2                            6
                        Blandish
                  3     Una princesa en BerlÝn 2
                  4     Solal                  4
                  5     Los Indiferentes       5
                  6     El cabra               6
                  7     Asuntos Exteriores     1

Enunciado

Se pide:

1. Debes acceder al servidor como root y crear la base de datos LIBROS y
a continuación 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 conexión al servidor MySQL con el usuario librero y
acceder a la base de datos LIBROS. Realizar con este usuario las tareas
necesarias de administración de BD para pasar la información 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 carácter 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 realización 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 resolución de
esta actividad. No obstante, ten en cuenta que no se trata de un ejercicio
de autoevaluación, sino de evaluación 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 envíalo al tutor o tutora, para que pueda
comprobar el grado de tu aprendizaje y orientarte adecuadamente, si lo
precisas.
Parte III, tema 12
Administración de MySQL (II)
Obligatorio


Enunciado

Este ejercicio consiste en hacer una simulación de un error de actuación
sobre una base de datos que obliga al Administrador del servidor de base
de datos MySQL a iniciar un proceso de recuperación 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 ejecución de la práctica.

1. Activa el binary log en el servidor MySQL y comprueba su
funcionamiento correcto. (Lee detenidamente el punto 12.1.4 de la
Documentación del curso)

2. Crea una base de datos para nuestra prueba llamado por ejemplo
PRUEBACOPIA y cárgala con dos tablas a partir del script siguiente:

   CREATE DATABASE PRUEBACOPIA;

   USE PRUEBACOPIA;

   CREATE                   TABLE                          DEPARTAMENTOS
   (                        DEP_NO                               INT(2),
   DNOMBRE                                                  VARCHAR(14),
   LOCALIDAD                                                VARCHAR(10),
   CONSTRAINT   PK_DEPARTAMENTOS_DEP_NO         PRIMARY   KEY   (DEP_NO)
   ) engine=myisam;

   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                        TABLE                        EMPLEADOS
   (                           EMP_NO                           INT(4),
   APELLIDO                                                 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 Documentación del curso).

4. Inmediatamente después de efectuada la copia reiniciamos el servidor
mysql. Esto obliga a que se genere un nuevo fichero binary log
inmediatamente después de cada proceso de backup.

5. Añadimos algunos cambios a nuestra base de datos de prueba para la
comprobación 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 transacción no deseada. En nuestro caso
borramos, se supone que por descuido, la base de datos PRUEBACOPIA.
El objetivo es recuperar las tablas a la situación que tenían justo antes de
producirse esa sentencia errónea 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 Documentación 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 creación
de la copia de seguridad y la recuperación de dicha copia. Habrá que
analizar con cuidado que parte del fichero log tenemos que relanzar

Ejemplo:
C:mysql4bin>mysqlbinlog --port=3308 --start-position=171 --stop-
position=246 ..dataPortatil-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
simulación de restauración completa de una base de datos deben quedar
recogidos en un documento llamado restaurar.txt con los comentarios
necesarios que consideréis pertinentes.
BLOQUE III (temas 1, 2, 3 y 4)
SQL CON MYSQL

"Evaluación I"


Marca la casilla con la respuesta correcta



      1. El lenguaje SQL permite:
         Controlar         el        acceso         a           la          información
         Crear        objetos        en       una        base          de         datos
         Recuperar    la   información    almacenada    en   la      base    de   datos
         Todas las anteriores

      2. En el modelo relacional la restricción 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 expresión A AND B será:
         true
         false
         null
         ninguno de los anteriores
4. Indicar cuál de los siguientes identificadores es incorrecto:
   b2-ax
   ax_b2
   axb2
   xa2b

5. Indicar cuál 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é expresión
   sería 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 sería 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 cláusulas:

      FOREIGN KEY
      FOREIGN KEY con REFERENCES
      FOREIGN KEY con REFERENCES y ON DELETE CASCADE
      FOREIGN KEY y PRIMARY KEY

12.        Una restricción 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         cláusula                ON              DELETE                CASCADE:

      Es        obligatoria            para           crear        una            clave          ajena
   Es obligatoria para crear una clave ajena que permita el borrado automático
de    filas    cuando      se     ha      borrado    la     clave     principal
      Sirve     para         borrar      filas       seleccionadas       con           un     WHERE
      Evita el borrado automático de filas cuando se ha borrado la clave principal
14.      Para    añadir      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 cuál de los siguientes comandos de inserción 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 cuál de los siguientes comandos de inserción es
incorrecto:

    INSERT     INTO         departamentos    (dnombre,       localidad)      VALUES
('BILBAO',50);
     INSERT  INTO            departamentos    (dep_no,       dnombre)        VALUES
(50,'MARKETING');
   INSERT    INTO            departamentos    (dnombre,       dep_no)        VALUES
('MARKETING',50);
   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      instrucción            DELETE        FROM           empleados:
      Es                     incorrecta                 o                    errónea
      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 opción
modificado en cascada, podremos modificar un departamento:
      Siempre
      Solo si no tiene empleados
      Nunca
  Siempre que hagamos primero la modificación correspondiente en la tabla
EMPLEADOS
BLOQUE III (temas 5, 6, 7, 8 y 9)
SQL CON MYSQL

"Evaluación II"


Marca la casilla con la respuesta correcta



      1. La cláusula WHERE:
           Selecciona       las   filas      seleccionadas      que    cumplan       una         condición
           Establece               un                criterio               de                  ordenación
           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,
      alfabéticamente                 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 más 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
cláusula                     GROUP                       BY:

     Son       las     que            se     quiera       especificar      sin    otra    restricción
     Son     las      que        se        han   puesto      en   la      cláusula      GROUP    BY
     Son las columnas o expresiones de agrupación y/o funciones de grupo
     Las funciones de columna que aparezcan en la cláusula HAVING

6.                          La                          cláusula                         HAVING:

  Establece unas condiciones para la selección de grupos formados con
GROUP                                                             BY
     Realiza           lo             mismo           que         la         cláusula        WHERE
     Sustituye         a          WHERE                cuando           existe       GROUP       BY
     Ordena los resultados de la agrupación

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                           FROM           empleados        WHERE
MAX(salario)=dep_no

8. Para seleccionar los departamentos con más 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 después de otra

10.              Una         subconsulta             se             describe          en:

      WHERE
      HAVING
      WHERE                                   o                                 HAVING
      En cualquier cláusula de la consulta principal

11. ¿Cuál sería la subconsulta correcta para obtener todos los
números 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. ¿Cuál sería 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      composición         o    combinación      (JOIN)    consiste     en:

      Obtener         filas          de        más         de        una         tabla
      Obtener     todas       las    filas   resultantes   de   multiplicar     tablas
      Aplicar una condición de selección 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,descripción,unidades                 FROM
pedidos,productos,clientes;
    SELECT              pedido_no,nombre,descripción,unidades                 FROM
pedidos,productos,clientes      WHERE        cliente_no=cliente_no             AND
producto_no=producto_no;
    SELECT       pedido_no,nombre,descripción,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,descripción,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                ningún               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                            puede
      Hay                    que               crearla                idéntica
      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 (recién
creada y vacía) 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 cláusula ORDER BY en la creación 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 información 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                       quedarán                         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 selección de la
vista.
    Se    elimina    la   vista    y    las   tablas   y    vistas    asociadas.
    Ninguna de las anteriores
BLOQUE III (temas 10,11 y 12)
SQL CON MYSQL

"Evaluación 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    más            rápido.
          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 información.

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

          necesariamente debe haber un fichero asociado llamado empleados.frm donde
      están                 los                  datos                 almacenados.
necesariamente debe haber un fichero asociado llamado empleados.frm donde
están                los                  índices                almacenados.
   necesariamente debe haber un fichero asociado llamado empleados.MYD
donde           están          los           datos         almacenados.
   necesariamente debe haber un fichero asociado llamado empleados.MDI
donde están los índices almacenados.

4. Si estoy lanzando una sentencia del tipo C:mysqlbin>myisamchk
-u ..datatestempleados ¿Que estoy tratando de hacer?

    Convertir         la           tabla    empleados       a     tipo      InnoDB.
    Descomprimiendo la tabla empleados que se supone comprimida.
    Optimizar    la        tabla     empleados   mediante   una   desfragmentación.
    Comprimiendo la tabla empleados que se supone descomprimida.

5. Indicar que sentencia es verdadera referida a la cláusula
IDENTIFIED       BY      de    una     sentencia   GRANT.

    Si el usuario no existe y se omite la cláusula se crea el usuario sin contraseña.
    Si el usuario existe y no se omite la cláusula la contraseña que acompaña la
cláusula                   sustituye                  la                anterior.
    Si el usuario existe y se omite la cláusula permanece vigente la contraseña
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 distribución de
MySQL no requiere de una comunicación 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   1        tiene   error       de    sintaxis    la     2      está    correcta.
    La    sentencia    2        encripta      la    password        la     sentencia       1    no.
    La    sentencia   2        tiene   error       de    sintaxis    la     1      está    correcta.
    La sentencia 1 encripta la password la sentencia 2 no

9. Indica la afirmación correcta con respecto a mysqldump y
mysqlhotcopy

    mysqlhotcopy               es          solo          para             tablas           InnoDB.
    mysqldump             es           solo             para         tablas               MyISAM.
    mysqlhotcopy solo funciona si el servidor no está en ejecución.
    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
máquina 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 máquina 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 máquina 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 eliminación 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:tempmisdatos.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   replicación   de    datos:

      Permitir        configurar     el     balanceo       de         carga        en     las         consultas.
      Permite aumentar la fiabilidad ante las caídas 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      replicación:

      Un              maestro            puede            tener               muchos                  esclavos.
      Un          esclavo            solo         debe                tener             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 condición indispensable para ejecutar dos
servidores     MySQL        en      la     misma       máquina.

   Deben    escuchar      las       peticiones      por    dos      puertos     TCP     distintos.
   Deben        tener        dos          directorios         de        datos         diferentes.
   Deben       acceder          a       distintos         fichero       de       configuración.
   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        TABLE           mitabla       ADD          INDEX         miindice(micampo);
   CREATE        INDEX          miindice         ON        micampo           FROM        mitabla;
   CREATE            INDEX           miindice         FROM            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 sección
[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      replicación:

      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.

Más contenido relacionado

Destacado

Ejercicios áLgebra Relacional
Ejercicios áLgebra RelacionalEjercicios áLgebra Relacional
Ejercicios áLgebra Relacionalnegriz
 
Introducción a SQL sobre Oracle
Introducción a SQL sobre OracleIntroducción a SQL sobre Oracle
Introducción a SQL sobre OracleRaúl Galíndez
 
BD Biblioteca con mysql
BD Biblioteca con mysqlBD Biblioteca con mysql
BD Biblioteca con mysqlEmerson Garay
 
Problemas de diseño de base de datos
Problemas de diseño de base de datosProblemas de diseño de base de datos
Problemas de diseño de base de datosgonzalopomboza
 
SISTEMA DE FACTURACION (Ejemplo desarrollado)
SISTEMA DE FACTURACION (Ejemplo desarrollado)SISTEMA DE FACTURACION (Ejemplo desarrollado)
SISTEMA DE FACTURACION (Ejemplo desarrollado)Darwin Durand
 

Destacado (9)

Examen final de sql nadia
Examen final de sql nadiaExamen final de sql nadia
Examen final de sql nadia
 
Ejercicios áLgebra Relacional
Ejercicios áLgebra RelacionalEjercicios áLgebra Relacional
Ejercicios áLgebra Relacional
 
SENTENCIAS DE SQL SERVER
SENTENCIAS DE SQL SERVERSENTENCIAS DE SQL SERVER
SENTENCIAS DE SQL SERVER
 
Introducción a SQL sobre Oracle
Introducción a SQL sobre OracleIntroducción a SQL sobre Oracle
Introducción a SQL sobre Oracle
 
BD Biblioteca con mysql
BD Biblioteca con mysqlBD Biblioteca con mysql
BD Biblioteca con mysql
 
Problemas de diseño de base de datos
Problemas de diseño de base de datosProblemas de diseño de base de datos
Problemas de diseño de base de datos
 
8.ejercicios SQL access
8.ejercicios SQL access8.ejercicios SQL access
8.ejercicios SQL access
 
SISTEMA DE FACTURACION (Ejemplo desarrollado)
SISTEMA DE FACTURACION (Ejemplo desarrollado)SISTEMA DE FACTURACION (Ejemplo desarrollado)
SISTEMA DE FACTURACION (Ejemplo desarrollado)
 
Manual sql server parte 1
Manual sql server parte 1Manual sql server parte 1
Manual sql server parte 1
 

Similar a Manual trabajo curso_sql

Similar a Manual trabajo curso_sql (20)

Funciones Buscar
Funciones BuscarFunciones Buscar
Funciones Buscar
 
Ejercicios practicos 1
Ejercicios practicos 1Ejercicios practicos 1
Ejercicios practicos 1
 
Presentación sql
Presentación sqlPresentación sql
Presentación sql
 
Diapositivas catalogo de cuentas
Diapositivas catalogo de cuentasDiapositivas catalogo de cuentas
Diapositivas catalogo de cuentas
 
Guia 03 periodo 2
Guia 03 periodo 2Guia 03 periodo 2
Guia 03 periodo 2
 
Manual formato para Facturacion electronica
Manual formato para Facturacion electronicaManual formato para Facturacion electronica
Manual formato para Facturacion electronica
 
Parcial1
Parcial1Parcial1
Parcial1
 
Contenido 4
Contenido 4Contenido 4
Contenido 4
 
Guía 2 Ejercicios de Normalización de Base de Datos
Guía 2 Ejercicios de Normalización de Base de DatosGuía 2 Ejercicios de Normalización de Base de Datos
Guía 2 Ejercicios de Normalización de Base de Datos
 
Base de datos en visual studio
Base de datos en visual studioBase de datos en visual studio
Base de datos en visual studio
 
Taller Access #2
Taller Access #2Taller Access #2
Taller Access #2
 
Ministerio De Desarrollo EconóMico
Ministerio De Desarrollo EconóMicoMinisterio De Desarrollo EconóMico
Ministerio De Desarrollo EconóMico
 
Ejercicio de access
Ejercicio de accessEjercicio de access
Ejercicio de access
 
Ejercicio Practico Access
Ejercicio Practico AccessEjercicio Practico Access
Ejercicio Practico Access
 
Generals tools eq.2
Generals tools eq.2Generals tools eq.2
Generals tools eq.2
 
Trabajo de ntics en excel
Trabajo de ntics en excelTrabajo de ntics en excel
Trabajo de ntics en excel
 
Trabajo de ntics en excel
Trabajo de ntics en excelTrabajo de ntics en excel
Trabajo de ntics en excel
 
Prácticos excel 2ª práctica
Prácticos excel   2ª prácticaPrácticos excel   2ª práctica
Prácticos excel 2ª práctica
 
Ejercicios
Ejercicios Ejercicios
Ejercicios
 
Ejer acces
Ejer accesEjer acces
Ejer acces
 

Manual trabajo curso_sql

  • 2. Ejercicios En este Manual de Trabajo aparece el acceso a los distintos ejercicios opcionales y obligatorios del curso de SQL. Los ejercicios están divididos según 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 realización 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 resolución de esta actividad. No obstante, ten en cuenta que no se trata de un ejercicio de autoevaluación, sino de evaluación 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 envíalo al tutor, para que pueda comprobar el grado de tu aprendizaje y orientarte adecuadamente, si lo precisas.
  • 3. Recuerda que para realizar los ejercicios de la Parte II y III, necesitarás el fichero "ejecutame". Que se encuentra dentro de la carpeta Moving to sql. Parte I, tema 1 El lenguaje de gestión 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 número 7499 pertenece al departamento número: a. 30 b. 20 c. 40 2.- El DIRECTOR del empleado 7844 es el empleado número: 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 para verificar la afirmación 6.- El cliente INDUSTRIAS LACTEAS S.A. ha realizado: a. Un pedido b. Dos pedidos c. Tres pedidos 7.- Sql es un Sistema Gestor de Bases de Datos: a. Jerárquico b. En red
  • 4. c. Relacional 8.- Según el modelo relacional: a. Cada fila de una tabla representa un atributo o característica b. Cada columna de una tabla representa un atributo o característica c. Cada entidad representa un atributo o característica 9.- SQL es: a. Un lenguaje estructurado de consulta b. Un lenguaje procedimental de tercera generación c. Ambas son correctas 10.- El lenguaje SQL permite: a. Manipular datos (consultar, actualizar, etcétera) b. Definir objetos de la base de datos (Crear, modificar y eliminar objetos de la base de datos) c. Ambas son correctas
  • 5. 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.- Cuál 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 alfanumérico con un patrón de comparación 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 expresión 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 expresión A AND B será: a. Verdadero (true) b. Falso (false) c. Nulo (null) 6.- Para redondear a dos decimales un número (num) utilizaremos la función: a. POWER(num,2) b. TRUNC(num,2) c. ROUND(num,2) 7.- Para obtener la longitud de una cadena (cad) utilizaremos la función: a. LPAD(cad) b. LOWER(cad) c. LENGTH(cad)
  • 6. 8.- Para calcular en número de días entre dos fechas (fecha1 y fecha2) utilizaremos la función: 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 expresión: a. salario + comision b. IFNULL (salario,0) + comision c. salario + IFNULL(comision,0) 10.- Una condición 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
  • 7. Parte I, tema 3 Creación 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 Definición de las tablas Tabla COMPRADORES Campo Tipo CIF_comprador alfanumérico de 11 caracteres Nombre_social alfanumérico de 30 caracteres Domicilio_social alfanumérico de 30 caracteres Localidad alfanumérico de 30 caracteres C_postal alfanumérico de 5 caracteres Teléfono alfanumérico de 9 caracteres Tabla ARTICULOS Campo Tipo Referencia_articulo alfanumérico de 12 caracteres Descripción_articulo alfanumérico de 30 caracteres Precio_unidad numérico de 6 posiciones, con dos decimales IVA numérico de 2 posiciones Existencias_actuales numérico de 5 posiciones Tabla FACTURAS Campo Tipo Factura_no numérico de 6 posiciones Fecha_factura tipo fecha CIF_cliente alfanumérico de 11 caracteres Tabla LINEAS_FACTURA Campo Tipo Factura_no numérico de 6 posiciones Referencia_articulo alfanumérico de 12 caracteres Unidades numérico de 3 posiciones Enunciado 1. Creación 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.
  • 8. 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. Añadir a la tabla FACTURAS la columna cod_oficina de tipo numérico de 4 posiciones, con el número de oficina 3. Añadir 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. Añadir a la columna cod_oficina de la tabla FACTURAS la comprobación de estar entre 1 y 1000.
  • 9. Parte I, tema 4 Actualización de tablas Obligatorio NOTA: si se quiere hacer pruebas y que las actualizaciones de las tablas no sean validadas, se puede trabajar con el parámetro 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 ALGODÓN 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 Fecha_factura Cliente_no Cod_oficina 1 12 de mayo de 2004 111111-L 1212 2 18 de julio de 2004 111111-L 1231 3 31 de julio de 2004 222222-J 1406 4 10 de agosto de 2004 222222-J 1212 Tabla LINEAS_FACTURAS Factura_no Referencia_articulo Unidades 1 01-LANA 120 1 04-LINO 75 2 01-LANA 20 2 02-ALGODÓN 50 2. Insertar un nuevo artículo con valores Referencia_articulo Precio_unidad IVA 06-CUERO 10.99 10 Hacer un listado de las filas de la tabla ARTICULOS (SELECT * FROM articulos;) e
  • 10. indicar que ha sucedido con las columnas descripcion_articulo y existencias_actuales razonando la respuesta. 3. Hacer una rebaja del IVA en un punto para cada artículo 4. Modificar la descripción del artículo 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 líneas de factura. Para comprobarlo hacer un listado de las filas
  • 11. BLOQUE I (temas 1, 2, 3 y 4) GESTION DE DATOS CON SQL "Evaluación I" Marca la casilla con la respuesta correcta 1. El lenguaje SQL permite: Controlar el acceso a la información Crear objetos en una base de datos Recuperar la información almacenada en la base de datos Todas las anteriores 2. En el modelo relacional la restricción 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 expresión A AND B será: true false null ninguno de los anteriores
  • 12. 4. Indicar cuál de los siguientes identificadores es incorrecto: b2-ax ax_b2 axb2 xa2b 5. Indicar cuál 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é expresión sería 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 sería 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
  • 13. 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 cláusulas: FOREIGN KEY FOREIGN KEY con REFERENCES FOREIGN KEY con REFERENCES y ON DELETE CASCADE FOREIGN KEY y PRIMARY KEY 12. Una restricción 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 cláusula ON DELETE CASCADE: Es obligatoria para crear una clave ajena Es obligatoria para crear una clave ajena que permita el borrado automático de filas cuando se ha borrado la clave principal Sirve para borrar filas seleccionadas con un WHERE Evita el borrado automático de filas cuando se ha borrado la clave principal
  • 14. 14. Para añadir 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 cuál de los siguientes comandos de inserción 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 cuál de los siguientes comandos de inserción es incorrecto: INSERT INTO departamentos (dnombre, localidad) VALUES ('BILBAO',50); INSERT INTO departamentos (dep_no, dnombre) VALUES (50,'MARKETING'); INSERT INTO departamentos (dnombre, dep_no) VALUES ('MARKETING',50); 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;
  • 15. 19. La instrucción DELETE FROM empleados: Es incorrecta o errónea 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 opción modificado en cascada, podremos modificar un departamento: Siempre Solo si no tiene empleados Nunca Siempre que hagamos primero la modificación correspondiente en la tabla EMPLEADOS
  • 16. BLOQUE I (temas 5, 6, 7, 8 y 9) GESTION DE DATOS CON SQL "Evaluación II" Marca la casilla con la respuesta correcta 1. La cláusula WHERE: Selecciona las filas seleccionadas que cumplan una condición Establece un criterio de ordenación 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, alfabéticamente 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 más 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;
  • 17. 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 cláusula GROUP BY: Son las que se quiera especificar sin otra restricción Son las que se han puesto en la cláusula GROUP BY Son las columnas o expresiones de agrupación y/o funciones de grupo Las funciones de columna que aparezcan en la cláusula HAVING 6. La cláusula HAVING: Establece unas condiciones para la selección de grupos formados con GROUP BY Realiza lo mismo que la cláusula WHERE Sustituye a WHERE cuando existe GROUP BY Ordena los resultados de la agrupación 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 FROM empleados WHERE MAX(salario)=dep_no 8. Para seleccionar los departamentos con más 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
  • 18. 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 después de otra 10. Una subconsulta se describe en: WHERE HAVING WHERE o HAVING En cualquier cláusula de la consulta principal 11. ¿Cuál sería la subconsulta correcta para obtener todos los números 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. ¿Cuál sería 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);
  • 19. 13. Una composición o combinación (JOIN) consiste en: Obtener filas de más de una tabla Obtener todas las filas resultantes de multiplicar tablas Aplicar una condición de selección 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,descripción,unidades FROM pedidos,productos,clientes; SELECT pedido_no,nombre,descripción,unidades FROM pedidos,productos,clientes WHERE cliente_no=cliente_no AND producto_no=producto_no; SELECT pedido_no,nombre,descripción,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,descripción,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;
  • 20. 16. Para listar los clientes con sus pedidos, incluyendo aquellos que no tengan ningún 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 puede Hay que crearla idéntica 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 (recién creada y vacía) 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 cláusula ORDER BY en la creación 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 información de varias tablas relacionadas Las tres anteriores son correctas
  • 21. 20. Al eliminar una vista, los datos de las tablas en las que se basa la vista quedarán 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 selección de la vista. Se elimina la vista y las tablas y vistas asociadas. Ninguna de las anteriores
  • 22. BLOQUE I (temas 10,11 y 12) GESTION DE DATOS CON SQL "Evaluación 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 más rápido. 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 información. 3. Si en la base de datos hay una tabla tipo MyISAM llamada EMPLEADOS necesariamente debe haber un fichero asociado llamado empleados.frm donde están los datos almacenados. necesariamente debe haber un fichero asociado llamado empleados.frm donde están los índices almacenados. necesariamente debe haber un fichero asociado llamado empleados.MYD donde están los datos almacenados.
  • 23. necesariamente debe haber un fichero asociado llamado empleados.MDI donde están los índices almacenados. 4. Si estoy lanzando una sentencia del tipo C:mysqlbin>myisamchk -u ..datatestempleados ¿Que estoy tratando de hacer? Convertir la tabla empleados a tipo InnoDB. Descomprimiendo la tabla empleados que se supone comprimida. Optimizar la tabla empleados mediante una desfragmentación. Comprimiendo la tabla empleados que se supone descomprimida. 4. Indicar que sentencia es verdadera referida a la cláusula IDENTIFIED BY de una sentencia GRANT. Si el usuario no existe y se omite la cláusula se crea el usuario sin contraseña. Si el usuario existe y no se omite la cláusula la contraseña que acompaña la cláusula sustituye la anterior. Si el usuario existe y se omite la cláusula permanece vigente la contraseña 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;
  • 24. 7. Indica cual de las siguientes utilidades de la distribución de MySQL no requiere de una comunicación 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 1 tiene error de sintaxis la 2 está correcta. La sentencia 2 encripta la password la sentencia 1 no. La sentencia 2 tiene error de sintaxis la 1 está correcta. La sentencia 1 encripta la password la sentencia 2 no 9. Indica la afirmación correcta con respecto a mysqldump y mysqlhotcopy mysqlhotcopy es solo para tablas InnoDB. mysqldump es solo para tablas MyISAM. mysqlhotcopy solo funciona si el servidor no está en ejecución. 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 máquina 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 máquina mihost.midominio.es mediante el usuario Juan que tiene password.
  • 25. Se intenta ejecutar el cliente mysql para acceder a la base de datos prueba de un servidor situado en la máquina 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 eliminación 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:tempmisdatos.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 replicación de datos: Permitir configurar el balanceo de carga en las consultas. Permite aumentar la fiabilidad ante las caídas 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.
  • 26. 14. Indica cual de las siguientes no es una regla valida para establecer una arquitectura de replicación: Un maestro puede tener muchos esclavos. Un esclavo solo debe tener 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 condición indispensable para ejecutar dos servidores MySQL en la misma máquina. Deben escuchar las peticiones por dos puertos TCP distintos. Deben tener dos directorios de datos diferentes. Deben acceder a distintos fichero de configuración. 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 TABLE mitabla ADD INDEX miindice(micampo); CREATE INDEX miindice ON micampo FROM mitabla; CREATE INDEX miindice FROM 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.
  • 27. 18. Si en el fichero my.ini tenemos la siguiente entrada en la sección [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 replicación: 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.
  • 28. 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 día>> de <<nombre del mes>> de <<año con 4 dígitos>> 2. Hallar por orden alfabético los apellidos de los empleados, suprimiendo las tres últimas letras, mostrando solo aquellos cuyo apellido tenga más de seis caracteres 3. Se desea hacer un regalo de un 3% del salario a los empleados que no tienen comisión. Obtener el listado ordenado por orden alfabético con los apellidos y el importe de los regalos 4. Obtener los datos de los empleados cuyo salario total (salario+comisión) supere los 2.000 euros, siempre que además su salario supere los 1800 euros o su comisión supere los 500 euros 5. Visualizar los datos del empleado de oficio DIRECTOR más antiguo en la empresa. 6. Visualizar los datos de los dos empleados que ganan más salario entre los empleados de los departamento 20 y 30
  • 29. Parte II, tema 6 Selección 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 número de producto, la descripción y la suma. 4. Listar los números de cliente que tengan más de dos pedidos, ordenado por cantidad de pedidos 5. Obtener las localidades en las que haya más de un cliente, visualizando cuantos clientes hay. 6. Obtener Los datos de los 4 productos de los que más unidades se han vendido, visualizando el número de producto y las unidades vendidas
  • 30. Parte II, tema 7 Subconsultas Obligatorio Tablas utilizadas: EMPLEADOS , DEPARTAMENTOS, PEDIDOS, PRODUCTOS y CLIENTES. 1. Listar los nombres y códigos de los departamentos en los que haya empleados. 2. Obtener los datos del pedido más 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 más 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, visualizándolo para cada producto. 6. Seleccionar los empleados de la empresa que tengan igual comisión que la media de su oficio
  • 31. 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 descripción del producto y el nombre del cliente clasificados por el número 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 después 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 algún empleado de la empresa, indicando de cuantos empleados son jefes. 5. Realizar un listado de los empleados cuyo oficio es EMPLEADO, que incluirá los números 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 número 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)
  • 32. Parte II, tema 9 Consultas dentro de otras sentencias Obligatorio Tablas utilizadas: EMPLEADOS, DEPARTAMENTOS, PEDIDOS, PRODUCTOS y CLIENTES. Enunciado 1. Añadir 100 euros de comisión a los empleados tengan una comisión 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 número 20. 3. Se quiere borrar al empleado MARTINEZ. Para poder hacerlo sin errores, previamente (en otra sentencia aparte ejecutada anteriormente) se habrán modificado aquellos empleados de los que sea jefe MARTINEZ poniéndole 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 ningún empleado, que permita mostrar la información que se detalla: · Nombre del departamento Número de empleados · Suma de sus salarios · Suma de sus comisiones
  • 33. BLOQUE II (temas 1, 2, 3 y 4) GESTION DE DATOS CON SQL "Evaluación I" Marca la casilla con la respuesta correcta 1. El lenguaje SQL permite: Controlar el acceso a la información Crear objetos en una base de datos Recuperar la información almacenada en la base de datos Todas las anteriores 2. En el modelo relacional la restricción 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 expresión A AND B será: true false null ninguno de los anteriores
  • 34. 4. Indicar cuál de los siguientes identificadores es incorrecto: b2-ax ax_b2 axb2 xa2b 5. Indicar cuál 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é expresión sería 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 sería 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
  • 35. 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 cláusulas: FOREIGN KEY FOREIGN KEY con REFERENCES FOREIGN KEY con REFERENCES y ON DELETE CASCADE FOREIGN KEY y PRIMARY KEY 12. Una restricción 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 cláusula ON DELETE CASCADE: Es obligatoria para crear una clave ajena Es obligatoria para crear una clave ajena que permita el borrado automático de filas cuando se ha borrado la clave principal Sirve para borrar filas seleccionadas con un WHERE Evita el borrado automático de filas cuando se ha borrado la clave principal
  • 36. 14. Para añadir 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 cuál de los siguientes comandos de inserción 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 cuál de los siguientes comandos de inserción es incorrecto: INSERT INTO departamentos (dnombre, localidad) VALUES ('BILBAO',50); INSERT INTO departamentos (dep_no, dnombre) VALUES (50,'MARKETING'); INSERT INTO departamentos (dnombre, dep_no) VALUES ('MARKETING',50); INSERT INTO departamentos (dnombre, localidad, dep_no) VALUES ( 'MARKETING',NULL, 50);
  • 37. 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 instrucción DELETE FROM empleados: Es incorrecta o errónea 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 opción modificado en cascada, podremos modificar un departamento: Siempre Solo si no tiene empleados Nunca Siempre que hagamos primero la modificación correspondiente en la tabla EMPLEADOS
  • 38. BLOQUE II (temas 5, 6, 7, 8 y 9) GESTION DE DATOS CON SQL "Evaluación II" Marca la casilla con la respuesta correcta 1. La cláusula WHERE: Selecciona las filas seleccionadas que cumplan una condición Establece un criterio de ordenación 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, alfabéticamente 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 más 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;
  • 39. 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 cláusula GROUP BY: Son las que se quiera especificar sin otra restricción Son las que se han puesto en la cláusula GROUP BY Son las columnas o expresiones de agrupación y/o funciones de grupo Las funciones de columna que aparezcan en la cláusula HAVING 6. La cláusula HAVING: Establece unas condiciones para la selección de grupos formados con GROUP BY Realiza lo mismo que la cláusula WHERE Sustituye a WHERE cuando existe GROUP BY Ordena los resultados de la agrupación 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 FROM empleados WHERE MAX(salario)=dep_no 8. Para seleccionar los departamentos con más 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
  • 40. 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 después de otra 10. Una subconsulta se describe en: WHERE HAVING WHERE o HAVING En cualquier cláusula de la consulta principal 11. ¿Cuál sería la subconsulta correcta para obtener todos los números 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. ¿Cuál sería 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);
  • 41. 13. Una composición o combinación (JOIN) consiste en: Obtener filas de más de una tabla Obtener todas las filas resultantes de multiplicar tablas Aplicar una condición de selección 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,descripción,unidades FROM pedidos,productos,clientes; SELECT pedido_no,nombre,descripción,unidades FROM pedidos,productos,clientes WHERE cliente_no=cliente_no AND producto_no=producto_no; SELECT pedido_no,nombre,descripción,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,descripción,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;
  • 42. 16. Para listar los clientes con sus pedidos, incluyendo aquellos que no tengan ningún 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 puede Hay que crearla idéntica 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 (recién creada y vacía) 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 cláusula ORDER BY en la creación 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 información de varias tablas relacionadas Las tres anteriores son correctas
  • 43. 20. Al eliminar una vista, los datos de las tablas en las que se basa la vista quedarán 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 selección de la vista. Se elimina la vista y las tablas y vistas asociadas. Ninguna de las anteriores
  • 44. BLOQUE II (temas 10,11 y 12) GESTION DE DATOS CON SQL "Evaluación 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 más rápido. 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 información. 3. Si en la base de datos hay una tabla tipo MyISAM llamada EMPLEADOS necesariamente debe haber un fichero asociado llamado empleados.frm donde están los datos almacenados. necesariamente debe haber un fichero asociado llamado empleados.frm donde están los índices almacenados. necesariamente debe haber un fichero asociado llamado empleados.MYD donde están los datos almacenados.
  • 45. necesariamente debe haber un fichero asociado llamado empleados.MDI donde están los índices almacenados. 4. Si estoy lanzando una sentencia del tipo C:mysqlbin>myisamchk -u ..datatestempleados ¿Que estoy tratando de hacer? Convertir la tabla empleados a tipo InnoDB. Descomprimiendo la tabla empleados que se supone comprimida. Optimizar la tabla empleados mediante una desfragmentación. Comprimiendo la tabla empleados que se supone descomprimida. 5. Indicar que sentencia es verdadera referida a la cláusula IDENTIFIED BY de una sentencia GRANT. Si el usuario no existe y se omite la cláusula se crea el usuario sin contraseña. Si el usuario existe y no se omite la cláusula la contraseña que acompaña la cláusula sustituye la anterior. Si el usuario existe y se omite la cláusula permanece vigente la contraseña 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 distribución de MySQL no requiere de una comunicación directa con el servidor myisamchk mysqlshow mysqldump mysqlimport
  • 46. 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 1 tiene error de sintaxis la 2 está correcta. La sentencia 2 encripta la password la sentencia 1 no. La sentencia 2 tiene error de sintaxis la 1 está correcta. La sentencia 1 encripta la password la sentencia 2 no 9. Indica la afirmación correcta con respecto a mysqldump y mysqlhotcopy mysqlhotcopy es solo para tablas InnoDB. mysqldump es solo para tablas MyISAM. mysqlhotcopy solo funciona si el servidor no está en ejecución. 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 máquina 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 máquina 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 máquina 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 eliminación 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.
  • 47. 13. La siguiente sentencia… LOAD DATA LOCAL INFILE 'C:tempmisdatos.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 replicación de datos: Permitir configurar el balanceo de carga en las consultas. Permite aumentar la fiabilidad ante las caídas 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 replicación: Un maestro puede tener muchos esclavos. Un esclavo solo debe tener 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 condición indispensable para ejecutar dos servidores MySQL en la misma máquina. Deben escuchar las peticiones por dos puertos TCP distintos. Deben tener dos directorios de datos diferentes. Deben acceder a distintos fichero de configuración. Las tres anteriores son ciertas.
  • 48. 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 TABLE mitabla ADD INDEX miindice(micampo); CREATE INDEX miindice ON micampo FROM mitabla; CREATE INDEX miindice FROM 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 sección [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 replicación: 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.
  • 49. 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
  • 50. Parte III, tema 11 Administración de MySQL (I) Obligatorio A partir del fichero ASCII TituloAutorNacionalidad.txt que tiene la siguiente información "Título"#"Autor"#"Nacionalidad" "Las lecciones de las cosas"#"Luis Mateo Díez"#"Español" "El secuestro de Miss Blandish"#"James Hadley Chase"#"Norteamericano" "Una princesa en Berlín"#"A. R. G. Solmssen"#"Alemán" "Solal"#"Albert Cohen"#"Norteamericano" "Los Indiferentes"#"Alberto Moravia"#"Italiano" "El cabra"#"Alexandre Jardin"#"Francés" "Asuntos Exteriores"#"Alison Lurie"#"Británico" "La virtud sobre Lorin Jones"#"Alison Lurie"#"Británico" "Amor y amistad"#"Alison Lurie"#"Británico" etc,etc…. Se quiere importar a MYSQL dicha información pero optimizando el almacenamiento de tal forma que la información resultante quede estructurada de la siguiente forma Tabla NACIONALIDADES id nacionalidad 1 Espa±ol 2 Norteamericano 3 Alemßn 4 Italiano 5 FrancÚs 6 Britßnico 7 Asiatico etc,etc,.. Tabla AUTORES id autor id_nac 1 A. R. G. Solmssen 3 2 Alan Bennett 6 3 Albert Cohen 2 4 Alberto Moravia 4 5 Alexandre Jardin 5 6 Alison Lurie 6 7 Almudena Grandes 1 etc,etc,.. Tabla TITULOS id autor id_aut Las lecciones de las 1 3 cosas
  • 51. El secuestro de Miss 2 6 Blandish 3 Una princesa en BerlÝn 2 4 Solal 4 5 Los Indiferentes 5 6 El cabra 6 7 Asuntos Exteriores 1 Enunciado Se pide: 1. Debes acceder al servidor como root y crear la base de datos LIBROS y a continuación 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 conexión al servidor MySQL con el usuario librero y acceder a la base de datos LIBROS. Realizar con este usuario las tareas necesarias de administración de BD para pasar la información 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 carácter 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 realización 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 resolución de esta actividad. No obstante, ten en cuenta que no se trata de un ejercicio de autoevaluación, sino de evaluación 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 envíalo al tutor o tutora, para que pueda comprobar el grado de tu aprendizaje y orientarte adecuadamente, si lo precisas.
  • 52. Parte III, tema 12 Administración de MySQL (II) Obligatorio Enunciado Este ejercicio consiste en hacer una simulación de un error de actuación sobre una base de datos que obliga al Administrador del servidor de base de datos MySQL a iniciar un proceso de recuperación 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 ejecución de la práctica. 1. Activa el binary log en el servidor MySQL y comprueba su funcionamiento correcto. (Lee detenidamente el punto 12.1.4 de la Documentación del curso) 2. Crea una base de datos para nuestra prueba llamado por ejemplo PRUEBACOPIA y cárgala con dos tablas a partir del script siguiente: CREATE DATABASE PRUEBACOPIA; USE PRUEBACOPIA; CREATE TABLE DEPARTAMENTOS ( DEP_NO INT(2), DNOMBRE VARCHAR(14), LOCALIDAD VARCHAR(10), CONSTRAINT PK_DEPARTAMENTOS_DEP_NO PRIMARY KEY (DEP_NO) ) engine=myisam; 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 TABLE EMPLEADOS ( EMP_NO INT(4), APELLIDO VARCHAR(8),
  • 53. 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 Documentación del curso). 4. Inmediatamente después de efectuada la copia reiniciamos el servidor mysql. Esto obliga a que se genere un nuevo fichero binary log inmediatamente después de cada proceso de backup. 5. Añadimos algunos cambios a nuestra base de datos de prueba para la comprobación 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 transacción no deseada. En nuestro caso borramos, se supone que por descuido, la base de datos PRUEBACOPIA.
  • 54. El objetivo es recuperar las tablas a la situación que tenían justo antes de producirse esa sentencia errónea 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 Documentación 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 creación de la copia de seguridad y la recuperación de dicha copia. Habrá que analizar con cuidado que parte del fichero log tenemos que relanzar Ejemplo: C:mysql4bin>mysqlbinlog --port=3308 --start-position=171 --stop- position=246 ..dataPortatil-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 simulación de restauración completa de una base de datos deben quedar recogidos en un documento llamado restaurar.txt con los comentarios necesarios que consideréis pertinentes.
  • 55. BLOQUE III (temas 1, 2, 3 y 4) SQL CON MYSQL "Evaluación I" Marca la casilla con la respuesta correcta 1. El lenguaje SQL permite: Controlar el acceso a la información Crear objetos en una base de datos Recuperar la información almacenada en la base de datos Todas las anteriores 2. En el modelo relacional la restricción 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 expresión A AND B será: true false null ninguno de los anteriores
  • 56. 4. Indicar cuál de los siguientes identificadores es incorrecto: b2-ax ax_b2 axb2 xa2b 5. Indicar cuál 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é expresión sería 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 sería 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
  • 57. 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 cláusulas: FOREIGN KEY FOREIGN KEY con REFERENCES FOREIGN KEY con REFERENCES y ON DELETE CASCADE FOREIGN KEY y PRIMARY KEY 12. Una restricción 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 cláusula ON DELETE CASCADE: Es obligatoria para crear una clave ajena Es obligatoria para crear una clave ajena que permita el borrado automático de filas cuando se ha borrado la clave principal Sirve para borrar filas seleccionadas con un WHERE Evita el borrado automático de filas cuando se ha borrado la clave principal
  • 58. 14. Para añadir 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 cuál de los siguientes comandos de inserción 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 cuál de los siguientes comandos de inserción es incorrecto: INSERT INTO departamentos (dnombre, localidad) VALUES ('BILBAO',50); INSERT INTO departamentos (dep_no, dnombre) VALUES (50,'MARKETING'); INSERT INTO departamentos (dnombre, dep_no) VALUES ('MARKETING',50); INSERT INTO departamentos (dnombre, localidad, dep_no) VALUES ( 'MARKETING',NULL, 50);
  • 59. 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 instrucción DELETE FROM empleados: Es incorrecta o errónea 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 opción modificado en cascada, podremos modificar un departamento: Siempre Solo si no tiene empleados Nunca Siempre que hagamos primero la modificación correspondiente en la tabla EMPLEADOS
  • 60. BLOQUE III (temas 5, 6, 7, 8 y 9) SQL CON MYSQL "Evaluación II" Marca la casilla con la respuesta correcta 1. La cláusula WHERE: Selecciona las filas seleccionadas que cumplan una condición Establece un criterio de ordenación 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, alfabéticamente 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 más 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;
  • 61. 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 cláusula GROUP BY: Son las que se quiera especificar sin otra restricción Son las que se han puesto en la cláusula GROUP BY Son las columnas o expresiones de agrupación y/o funciones de grupo Las funciones de columna que aparezcan en la cláusula HAVING 6. La cláusula HAVING: Establece unas condiciones para la selección de grupos formados con GROUP BY Realiza lo mismo que la cláusula WHERE Sustituye a WHERE cuando existe GROUP BY Ordena los resultados de la agrupación 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 FROM empleados WHERE MAX(salario)=dep_no 8. Para seleccionar los departamentos con más de 2 empleados: SELECT dep_no,COUNT(*) FROM empleados GROUP BY emp_no SELECT dep_no,COUNT(*) FROM empleados GROUP BY dep_no
  • 62. 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 después de otra 10. Una subconsulta se describe en: WHERE HAVING WHERE o HAVING En cualquier cláusula de la consulta principal 11. ¿Cuál sería la subconsulta correcta para obtener todos los números 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. ¿Cuál sería 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 < (
  • 63. 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 composición o combinación (JOIN) consiste en: Obtener filas de más de una tabla Obtener todas las filas resultantes de multiplicar tablas Aplicar una condición de selección 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,descripción,unidades FROM pedidos,productos,clientes; SELECT pedido_no,nombre,descripción,unidades FROM pedidos,productos,clientes WHERE cliente_no=cliente_no AND producto_no=producto_no; SELECT pedido_no,nombre,descripción,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,descripción,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;
  • 64. 16. Para listar los clientes con sus pedidos, incluyendo aquellos que no tengan ningún 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 puede Hay que crearla idéntica 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 (recién creada y vacía) 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 cláusula ORDER BY en la creación 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 información de varias tablas relacionadas Las tres anteriores son correctas
  • 65. 20. Al eliminar una vista, los datos de las tablas en las que se basa la vista quedarán 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 selección de la vista. Se elimina la vista y las tablas y vistas asociadas. Ninguna de las anteriores
  • 66. BLOQUE III (temas 10,11 y 12) SQL CON MYSQL "Evaluación 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 más rápido. 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 información. 3. Si en la base de datos hay una tabla tipo MyISAM llamada EMPLEADOS necesariamente debe haber un fichero asociado llamado empleados.frm donde están los datos almacenados.
  • 67. necesariamente debe haber un fichero asociado llamado empleados.frm donde están los índices almacenados. necesariamente debe haber un fichero asociado llamado empleados.MYD donde están los datos almacenados. necesariamente debe haber un fichero asociado llamado empleados.MDI donde están los índices almacenados. 4. Si estoy lanzando una sentencia del tipo C:mysqlbin>myisamchk -u ..datatestempleados ¿Que estoy tratando de hacer? Convertir la tabla empleados a tipo InnoDB. Descomprimiendo la tabla empleados que se supone comprimida. Optimizar la tabla empleados mediante una desfragmentación. Comprimiendo la tabla empleados que se supone descomprimida. 5. Indicar que sentencia es verdadera referida a la cláusula IDENTIFIED BY de una sentencia GRANT. Si el usuario no existe y se omite la cláusula se crea el usuario sin contraseña. Si el usuario existe y no se omite la cláusula la contraseña que acompaña la cláusula sustituye la anterior. Si el usuario existe y se omite la cláusula permanece vigente la contraseña 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 distribución de MySQL no requiere de una comunicación directa con el servidor
  • 68. 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 1 tiene error de sintaxis la 2 está correcta. La sentencia 2 encripta la password la sentencia 1 no. La sentencia 2 tiene error de sintaxis la 1 está correcta. La sentencia 1 encripta la password la sentencia 2 no 9. Indica la afirmación correcta con respecto a mysqldump y mysqlhotcopy mysqlhotcopy es solo para tablas InnoDB. mysqldump es solo para tablas MyISAM. mysqlhotcopy solo funciona si el servidor no está en ejecución. 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 máquina 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 máquina 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 máquina mihost.midominio.es mediante el usuario Juan que no tiene password.
  • 69. 11. Indica la respuesta correcta El eliminar todos los privilegios de un usuario no supone la eliminación 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:tempmisdatos.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 replicación de datos: Permitir configurar el balanceo de carga en las consultas. Permite aumentar la fiabilidad ante las caídas 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 replicación: Un maestro puede tener muchos esclavos. Un esclavo solo debe tener un maestro.
  • 70. 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 condición indispensable para ejecutar dos servidores MySQL en la misma máquina. Deben escuchar las peticiones por dos puertos TCP distintos. Deben tener dos directorios de datos diferentes. Deben acceder a distintos fichero de configuración. 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 TABLE mitabla ADD INDEX miindice(micampo); CREATE INDEX miindice ON micampo FROM mitabla; CREATE INDEX miindice FROM 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 sección [mysqld]: log ¿Que se le esta indicando al servidor MySQL?: Que se activa el binary log file. Que se activa el query log file.
  • 71. Que se activa el error log file. Que se activa el update log file. 19. Para poder iniciar un servicio de replicación: 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.