SQL, procedimientos almacenados y disparadores — Cuerpo de Técnicos Auxiliares de Informática de la Administración del Estado
Test de 30 preguntas con explicaciones justificadas.
Pregunta 1: ¿Cuál de las siguientes sentencias DDL se utiliza para crear una nueva tabla en una base de datos?
- A) CREATE TABLE
- B) CREATE DATABASE
- C) CREATE INDEX
- D) CREATE VIEW
La sentencia CREATE TABLE es un comando DDL que crea una nueva tabla definiendo sus columnas, tipos de datos y restricciones.
Pregunta 2: En una consulta SELECT que recupera datos de una tabla, ¿cuál de las siguientes cláusulas es obligatoria?
- A) WHERE
- B) FROM
- C) GROUP BY
- D) ORDER BY
La cláusula FROM es obligatoria en una consulta SELECT que referencia tablas, ya que especifica la tabla o tablas de las que se obtienen los datos.
Pregunta 3: ¿Qué comando DCL se utiliza para revocar permisos previamente concedidos a un usuario?
- A) GRANT
- B) DENY
- C) REVOKE
- D) REMOVE
El comando REVOKE se utiliza en SQL DCL para retirar privilegios previamente concedidos a un usuario o rol.
Pregunta 4: ¿Qué tipo de JOIN devuelve todos los registros de ambas tablas, combinando los coincidentes y rellenando con NULLs donde no hay coincidencia?
- A) INNER JOIN
- B) LEFT JOIN
- C) RIGHT JOIN
- D) FULL OUTER JOIN
Un FULL OUTER JOIN devuelve todos los registros de ambas tablas; donde hay coincidencia se combinan, y donde no, se rellenan con NULLs.
Pregunta 5: ¿Qué operador se utiliza en una subconsulta para comprobar si existe algún resultado en la subconsulta?
- A) EXISTS
- B) IN
- C) ANY
- D) ALL
El operador EXISTS se utiliza en subconsultas para verificar si la subconsulta devuelve al menos una fila.
Pregunta 6: ¿Qué característica de una vista asegura que las modificaciones a través de la vista no puedan violar la condición definida en la misma?
- A) WITH READ ONLY
- B) WITH CHECK OPTION
- C) WITH LOCAL CHECK
- D) WITH CASCADE CHECK
La cláusula WITH CHECK OPTION en una vista asegura que todas las inserciones o actualizaciones realizadas a través de la vista cumplan la condición de la vista.
Pregunta 7: En SQL, ¿cuál de las siguientes sentencias se utiliza para crear un procedimiento almacenado?
- A) CREATE FUNCTION
- B) CREATE TRIGGER
- C) CREATE PROCEDURE
- D) CREATE VIEW
La sentencia CREATE PROCEDURE se utiliza para crear un procedimiento almacenado en la base de datos.
Pregunta 8: ¿Cuál es la principal diferencia entre una función y un procedimiento almacenado en SQL?
- A) Las funciones no pueden tener parámetros de entrada.
- B) Los procedimientos no pueden ejecutar consultas SELECT.
- C) Las funciones se llaman con la sentencia CALL.
- D) Las funciones siempre devuelven un valor, mientras que los procedimientos pueden no hacerlo.
En SQL, una función debe devolver un valor, mientras que un procedimiento almacenado puede no devolverlo o devolver múltiples valores a través de parámetros OUT.
Pregunta 9: En un trigger, ¿qué palabras clave se utilizan para referirse a los valores antiguos y nuevos de una fila en MySQL/PostgreSQL?
- A) OLD y NEW
- B) BEFORE y AFTER
- C) THEN y ELSE
- D) TRIGGER y EVENT
En triggers de MySQL y PostgreSQL, OLD y NEW son pseudo-registros que contienen los valores de la fila antes y después del evento que activa el trigger.
Pregunta 10: En PL/SQL, ¿cuál de las siguientes sentencias se utiliza para abrir un cursor declarado?
- A) FETCH
- B) OPEN
- C) DECLARE
- D) LOOP
La sentencia OPEN se utiliza para abrir un cursor, permitiendo posteriormente la recuperación de filas con FETCH.
Pregunta 11: ¿Qué sentencia se utiliza para confirmar permanentemente los cambios realizados en una transacción?
- A) ROLLBACK
- B) SAVEPOINT
- C) COMMIT
- D) END TRANSACTION
La sentencia COMMIT confirma todos los cambios realizados en la transacción actual, haciéndolos permanentes.
Pregunta 12: ¿Cuál es la sintaxis correcta para agregar una nueva columna 'telefono' de tipo VARCHAR(20) a una tabla 'clientes'?
- A) ALTER TABLE clientes INSERT COLUMN telefono VARCHAR(20);
- B) MODIFY TABLE clientes ADD telefono VARCHAR(20);
- C) CHANGE TABLE clientes ADD telefono VARCHAR(20);
- D) ALTER TABLE clientes ADD telefono VARCHAR(20);
La sentencia ALTER TABLE se utiliza para modificar la estructura de una tabla; para agregar una columna se utiliza la cláusula ADD seguida del nombre y tipo de dato.
Pregunta 13: ¿Cuál de las siguientes es una sintaxis válida para actualizar una tabla 'empleados' usando un JOIN con 'departamentos' en SQL Server?
- A) UPDATE empleados SET salario = d.presupuesto FROM empleados e INNER JOIN departamentos d ON e.dep_id = d.id;
- B) UPDATE empleados e SET e.salario = d.presupuesto JOIN departamentos d ON e.dep_id = d.id;
- C) UPDATE FROM empleados e JOIN departamentos d ON e.dep_id = d.id SET e.salario = d.presupuesto;
- D) UPDATE empleados SET salario = presupuesto WHERE empleados.dep_id = departamentos.id;
En SQL Server, se puede realizar un UPDATE con JOIN utilizando la sintaxis UPDATE ... SET ... FROM ... JOIN ... ON.
Pregunta 14: ¿Es posible conceder permisos GRANT sobre columnas específicas de una tabla?
- A) No, solo se pueden conceder permisos a nivel de tabla.
- B) Sí, usando GRANT SELECT(columna) ON tabla TO usuario;
- C) Sí, pero solo para el privilegio UPDATE.
- D) Sí, pero solo a través de vistas.
El estándar SQL permite conceder privilegios a nivel de columna especificando la columna entre paréntesis después del privilegio, por ejemplo: GRANT SELECT (columna) ON tabla TO usuario.
Pregunta 15: ¿Qué tipo de JOIN devuelve únicamente los registros que tienen coincidencias en ambas tablas?
- A) LEFT JOIN
- B) RIGHT JOIN
- C) INNER JOIN
- D) FULL JOIN
Un INNER JOIN devuelve solo los registros que tienen coincidencias en ambas tablas involucradas.
Pregunta 16: Una subconsulta correlacionada es aquella que:
- A) Se ejecuta una sola vez independientemente de la consulta externa.
- B) No referencia columnas de la consulta externa.
- C) Siempre devuelve un solo valor escalar.
- D) Se ejecuta una vez para cada fila de la consulta externa.
Una subconsulta correlacionada referencia columnas de la consulta externa y se ejecuta una vez por cada fila procesada por la consulta externa.
Pregunta 17: ¿Qué tipo de vista almacena físicamente los datos de la consulta y se puede actualizar periódicamente?
- A) Vista materializada
- B) Vista indexada
- C) Vista temporal
- D) Vista en línea
Una vista materializada almacena el resultado de la consulta como datos físicos, que pueden ser actualizados mediante refresco.
Pregunta 18: En un procedimiento almacenado, ¿qué tipo de parámetro permite pasar un valor al procedimiento y también recibir un valor modificado desde el mismo?
- A) IN
- B) INOUT
- C) OUT
- D) RETURN
Los parámetros INOUT permiten pasar un valor al procedimiento y recibir un valor modificado desde él, a diferencia de IN (solo entrada) y OUT (solo salida).
Pregunta 19: Una función determinística en SQL es aquella que:
- A) Puede devolver resultados diferentes en cada llamada incluso con los mismos argumentos.
- B) Solo puede ser utilizada en procedimientos almacenados.
- C) Siempre devuelve el mismo resultado para los mismos argumentos.
- D) No puede contener sentencias SQL.
Una función determinística devuelve siempre el mismo resultado para los mismos valores de entrada, lo que permite su uso en índices y optimizaciones.
Pregunta 20: En un trigger que se ejecuta antes de una actualización (BEFORE UPDATE), ¿es posible modificar el valor de NEW.columna?
- A) No, nunca se pueden modificar los valores en un trigger.
- B) Solo se puede modificar OLD.columna.
- C) Solo en triggers AFTER UPDATE.
- D) Sí, en algunos SGBD como MySQL se puede modificar NEW.columna.
En triggers BEFORE UPDATE de MySQL y PostgreSQL, se puede modificar el valor de NEW.columna para cambiar el valor que se almacenará.
Pregunta 21: En PL/SQL, ¿qué atributo de un cursor devuelve TRUE si la última operación FETCH recuperó una fila?
- A) %FOUND
- B) %NOTFOUND
- C) %ROWCOUNT
- D) %ISOPEN
El atributo %FOUND de un cursor devuelve TRUE si la última operación FETCH recuperó una fila; en caso contrario, devuelve FALSE.
Pregunta 22: ¿Qué sentencia se utiliza para crear un punto de guardado dentro de una transacción al que se puede deshacer posteriormente?
- A) SAVE TRANSACTION
- B) SAVEPOINT
- C) CHECKPOINT
- D) ROLLBACK TO
La sentencia SAVEPOINT define un punto dentro de la transacción al que se puede volver mediante ROLLBACK TO SAVEPOINT.
Pregunta 23: ¿Cuál de las siguientes sentencias elimina todos los registros de una tabla pero mantiene su estructura, y no se puede deshacer?
- A) DELETE FROM tabla;
- B) DROP TABLE tabla;
- C) TRUNCATE TABLE tabla;
- D) REMOVE TABLE tabla;
TRUNCATE TABLE elimina todos los registros de una tabla de forma eficiente, liberando espacio, y no se puede deshacer con ROLLBACK en la mayoría de los SGBD (aunque depende de la implementación).
Pregunta 24: ¿Es posible insertar múltiples filas en una tabla utilizando el resultado de una consulta SELECT?
- A) No, INSERT solo permite valores explícitos con VALUES.
- B) Sí, pero solo si la consulta devuelve una única fila.
- C) Sí, pero solo en tablas temporales.
- D) Sí, con la sintaxis INSERT INTO tabla SELECT ...;
La sentencia INSERT INTO ... SELECT permite insertar en una tabla los resultados de una consulta SELECT, pudiendo ser múltiples filas.
Pregunta 25: ¿Qué comando DCL se utiliza para crear un rol en la base de datos?
- A) CREATE ROLE
- B) CREATE USER
- C) GRANT ROLE
- D) DEFINE ROLE
El comando CREATE ROLE se utiliza para crear un rol, al que posteriormente se le pueden asignar privilegios y usuarios.
Pregunta 26: Un self join es:
- A) Una join de una tabla consigo misma.
- B) Una join entre dos tablas con la misma estructura.
- C) Una join que usa la misma columna en ambas tablas.
- D) Una join automática que no requiere condición ON.
Un self join es una operación de join donde una tabla se une consigo misma, típicamente usando alias para diferenciar las instancias.
Pregunta 27: ¿En qué cláusula de una consulta SELECT se puede utilizar una subconsulta como si fuera una tabla?
- A) WHERE
- B) SELECT
- C) FROM
- D) HAVING
Una subconsulta se puede utilizar en la cláusula FROM como una tabla derivada, siempre que se le asigne un alias.
Pregunta 28: ¿Cuál es la principal desventaja de una vista materializada frente a una vista estándar?
- A) No se puede consultar con SELECT.
- B) No admite actualizaciones directas.
- C) Es más lenta de consultar porque recalcula cada vez.
- D) Ocupa espacio de almacenamiento.
Una vista materializada almacena físicamente los datos, por lo que consume espacio de almacenamiento, a diferencia de una vista estándar que solo almacena la definición.
Pregunta 29: En PL/SQL, ¿qué bloque se utiliza para capturar y manejar errores dentro de un procedimiento almacenado?
- A) EXCEPTION
- B) ERROR
- C) CATCH
- D) FAIL
En PL/SQL, el bloque EXCEPTION dentro de un procedimiento almacenado permite capturar y manejar errores que ocurran durante la ejecución.
Pregunta 30: Si hay múltiples triggers definidos para el mismo evento en una tabla, ¿se puede especificar el orden de ejecución?
- A) No, se ejecutan en orden aleatorio.
- B) Depende del SGBD; algunos permiten especificar prioridades.
- C) Siempre se ejecutan en orden de creación.
- D) Solo se permite un trigger por evento.
Algunos SGBD como MySQL permiten especificar el orden de ejecución de múltiples triggers para el mismo evento usando cláusulas como FOLLOWS o PRECEDES.