0% encontró este documento útil (0 votos)
3 vistas9 páginas

Examen SQL

El documento explica conceptos fundamentales de SQL, incluyendo su naturaleza declarativa y las diferencias entre DDL y DML. Se abordan operaciones como CRUD, tipos de JOIN, cláusulas HAVING, subconsultas, funciones de agregación, y el uso de campos JSON. También se discuten vulnerabilidades como SQL Injection y se comparan operadores como UNION y INTERSECT.

Cargado por

makcy22
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como ODT, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
3 vistas9 páginas

Examen SQL

El documento explica conceptos fundamentales de SQL, incluyendo su naturaleza declarativa y las diferencias entre DDL y DML. Se abordan operaciones como CRUD, tipos de JOIN, cláusulas HAVING, subconsultas, funciones de agregación, y el uso de campos JSON. También se discuten vulnerabilidades como SQL Injection y se comparan operadores como UNION y INTERSECT.

Cargado por

makcy22
Derechos de autor
© All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como ODT, PDF, TXT o lee en línea desde Scribd

¿Qué tipo de lenguaje es SQL? 1/18 a. Declarativo b. Imperativo c. Funcional d.

Orientado a
objetos

La respuesta correcta es:


a. Declarativo
SQL (Structured Query Language) es un lenguaje declarativo porque describe qué datos se quieren
obtener o modificar, pero no especifica cómo hacerlo paso a paso.
Por ejemplo, cuando escribes:
SELECT * FROM usuarios WHERE edad > 18;
Indicas el resultado deseado, y el motor de base de datos decide cómo ejecutarlo internamente.
¿Cuál de las siguientes instrucciones pertenece al DDL (Data Definition Language)? 2/18 a.
UPDATE b. INSERT c. DELETE d. CREATE
La respuesta correcta es:
d. CREATE
CREATE pertenece al DDL (Data Definition Language) porque se utiliza para definir o modificar
la estructura de la base de datos (por ejemplo, crear tablas, índices o bases de datos).
Ejemplos de instrucciones DDL:
• CREATE
• ALTER
• DROP
• TRUNCATE
En cambio, INSERT, UPDATE y DELETE pertenecen al DML (Data Manipulation Language), ya
que manipulan los datos dentro de las tablas.
¿Qué instrucción SQL se usa para eliminar registros de una tabla? DELETE FROM empleados
WHERE id = 5; 3/18 a. DELETE — elimina registros que cumplan la condición WHERE b.
ERASE — borra registros de forma permanente c. REMOVE — elimina registros por condición d.
DROP — elimina la tabla completa
La respuesta correcta es:
a. DELETE — elimina registros que cumplan la condición WHERE
La instrucción DELETE se utiliza para eliminar registros de una tabla, normalmente especificando
una condición con WHERE.

Ejemplo:
DELETE FROM empleados WHERE id = 5;
Esto elimina únicamente el registro cuyo id sea 5.

⚠️Importante:
• Si se usa DELETE sin WHERE, se eliminan todos los registros de la tabla.
• DROP elimina la tabla completa, no solo los registros.

¿Qué resultado produce la consulta con precio > 100 y categoria IN (‘Electrónica’,’Hogar’)?
SELECT * FROM productos WHERE precio > 100 AND categoria IN ('Electrónica', 'Hogar'); 4/18
a. Genera un error porque IN no se puede combinar con AND b. Productos de categoría Electrónica
y Hogar sin importar el precio c. Todos los productos con precio mayor a 100 d. Productos con
precio mayor a 100 que sean de categoría Electrónica u Hogar
La respuesta correcta es:
d. Productos con precio mayor a 100 que sean de categoría Electrónica u Hogar
La consulta:
SELECT * FROM productos
WHERE precio > 100 AND categoria IN ('Electrónica', 'Hogar');
Filtra los productos que cumplen ambas condiciones:
1. precio > 100

2. categoria sea 'Electrónica' o 'Hogar'

El operador IN funciona como un OR interno, y sí se puede combinar perfectamente con AND.

¿Qué significa CRUD en el contexto de bases de datos? 5/18 a. Connect, Read, Upload, Download
b. Create, Read, Update, Delete c. Copy, Replace, Undo, Drop d. Create, Replace, Update, Destroy
La respuesta correcta es:
b. Create, Read, Update, Delete
CRUD es un acrónimo que representa las operaciones básicas que se pueden realizar en una base
de datos:
• Create: Crear nuevos registros.
• Read: Leer o consultar los registros.
• Update: Actualizar registros existentes.
• Delete: Eliminar registros.
Estas son las operaciones fundamentales que permiten gestionar los datos en una base de datos.
¿Cuál es la función principal de una llave primaria (PRIMARY KEY)? 6/18 a. Permitir valores
duplicados en una columna b. Encriptar los datos de la tabla c. Establecer una relación con otra
tabla d. Identificar de forma única cada registro en una tabla
La respuesta correcta es:
d. Identificar de forma única cada registro en una tabla
La llave primaria (PRIMARY KEY) se utiliza para garantizar que cada registro en una tabla sea
único. No permite valores duplicados ni valores nulos en la columna o combinación de columnas
que la componen.
Su principal función es identificar de manera única cada fila de la tabla, lo que facilita la
integridad de los datos y las relaciones entre tablas.
¿Qué tipo de JOIN devuelve únicamente los registros que tienen coincidencia en ambas tablas?
SELECT [Link], [Link] FROM ordenes o ??? clientes c ON o.cliente_id = [Link]; 7/18 a. FULL JOIN
b. INNER JOIN c. LEFT JOIN d. RIGHT JOIN
La respuesta correcta es:
b. INNER JOIN
El INNER JOIN devuelve únicamente los registros que tienen coincidencia en ambas tablas
según la condición de la cláusula ON.

En el ejemplo que proporcionas:


SELECT [Link], [Link]
FROM ordenes o
INNER JOIN clientes c
ON o.cliente_id = [Link];
Se seleccionarán solo las filas donde haya coincidencia entre ordenes.cliente_id y
[Link].

• FULL JOIN: Devuelve todos los registros de ambas tablas, con coincidencias o no.
• LEFT JOIN: Devuelve todos los registros de la tabla izquierda (ordenes) y las
coincidencias de la derecha (clientes).
• RIGHT JOIN: Devuelve todos los registros de la tabla derecha (clientes) y las
coincidencias de la izquierda (ordenes).
¿Para qué se utiliza la cláusula HAVING? SELECT departamento, COUNT(*) AS total FROM
empleados GROUP BY departamento HAVING COUNT(*) > 5; 8/18 a. Para filtrar grupos después
de aplicar funciones de agregación b. Para filtrar registros antes de agruparlos c. Para ordenar los
resultados d. Para limitar el número de registros
La respuesta correcta es:
a. Para filtrar grupos después de aplicar funciones de agregación
La cláusula HAVING se utiliza para filtrar los resultados después de aplicar funciones de
agregación como COUNT(), SUM(), AVG(), etc., sobre los datos agrupados.

En el ejemplo:
SELECT departamento, COUNT(*) AS total
FROM empleados
GROUP BY departamento
HAVING COUNT(*) > 5;
La cláusula HAVING COUNT(*) > 5 filtra los grupos de empleados que tienen más de 5
registros después de haber agrupado los empleados por departamento.

• WHERE se utiliza para filtrar los registros antes de agruparlos.

• HAVING filtra los resultados después de aplicar las funciones de agregación.

¿Qué es una subquery (subconsulta)? SELECT nombre FROM empleados WHERE salario >
(SELECT AVG(salario) FROM empleados); 9/18 a. Una consulta que solo funciona con INSERT b.
Una consulta anidada dentro de otra consulta c. Una consulta que elimina tablas automáticamente d.
Una consulta que se ejecuta después de un JOIN
La respuesta correcta es:
b. Una consulta anidada dentro de otra consulta
Una subquery o subconsulta es una consulta SQL que está anidada dentro de otra consulta. En el
ejemplo:
SELECT nombre FROM empleados
WHERE salario > (SELECT AVG(salario) FROM empleados);
La subconsulta (SELECT AVG(salario) FROM empleados) calcula el salario promedio de
todos los empleados, y la consulta principal selecciona los empleados cuyo salario es mayor que ese
promedio.
Las subconsultas pueden aparecer en diversas partes de una consulta, como en la cláusula WHERE,
SELECT o FROM.

¿Cuál de las siguientes NO es una función de agregación en SQL? 10/18 a. COUNT b. CONCAT c.
AVG d. SUM
La respuesta correcta es:
b. CONCAT
CONCAT no es una función de agregación. Es una función que se usa para concatenar cadenas de
texto.
Por otro lado, las funciones de agregación son:
• COUNT: Cuenta el número de filas.

• AVG: Calcula el promedio de una columna numérica.

• SUM: Suma los valores de una columna numérica.

Las funciones de agregación operan sobre grupos de registros (por ejemplo, cuando se usa con
GROUP BY).
consultas eliminando duplicados? 11/18 a. MERGE b. UNION c. INTERSECT d. JOIN
La respuesta correcta es:
b. UNION
El operador UNION se utiliza para combinar los resultados de dos o más consultas, eliminando
automáticamente los registros duplicados. Si quieres incluir los duplicados, puedes usar UNION
ALL.

Ejemplo:
SELECT columna1 FROM tabla1
UNION
SELECT columna1 FROM tabla2;
En este caso, solo se devolverán los valores únicos de columna1 de ambas tablas.

• MERGE: Se utiliza para realizar operaciones de actualización, inserción o eliminación


basadas en la comparación de dos conjuntos de datos.
• INTERSECT: Devuelve solo los registros comunes entre dos consultas.
• JOIN: Se utiliza para combinar filas de dos o más tablas basadas en una relación entre ellas,
pero no elimina duplicados.
¿Qué operación de conjuntos combina los resultados de dos consultas eliminando duplicados? 11/18
a. MERGE b. UNION c. INTERSECT d. JOIN
La respuesta correcta es:
b. UNION
El operador UNION combina los resultados de dos o más consultas eliminando duplicados. Si
deseas mantener los duplicados, puedes usar UNION ALL.

Por ejemplo:
SELECT columna1 FROM tabla1
UNION
SELECT columna1 FROM tabla2;
Este código devolverá todos los valores únicos de columna1 de ambas tablas, eliminando
cualquier duplicado.
• MERGE: Es una operación que realiza inserciones, actualizaciones o eliminaciones basadas
en condiciones entre dos conjuntos de datos.
• INTERSECT: Devuelve solo los registros comunes entre las dos consultas.

• JOIN: Se utiliza para combinar filas de dos o más tablas basadas en una relación, pero no
está relacionado con la eliminación de duplicados.
¿Qué es SQL Injection? 12/18 a. Un tipo de respaldo de base de datos b. Una vulnerabilidad de
seguridad que permite ejecutar código SQL malicioso c. Una técnica para optimizar consultas d. Un
método para insertar datos masivamente
La respuesta correcta es:
b. Una vulnerabilidad de seguridad que permite ejecutar código SQL malicioso
SQL Injection (inyección de SQL) es una vulnerabilidad de seguridad que ocurre cuando un
atacante puede insertar o "inyectar" código SQL malicioso a través de una entrada en una aplicación
(por ejemplo, un formulario web), lo que permite manipular la base de datos de manera no
autorizada. Esto puede permitir acceder, modificar o eliminar datos, o incluso ejecutar comandos
del sistema operativo.
Un ejemplo común de SQL Injection sería algo como:
SELECT * FROM usuarios WHERE nombre = '' OR '1'='1';
Este tipo de ataque puede ser evitado usando prácticas como consultas preparadas y
parametrizadas.
¿Qué es un CTE (Common Table Expression)? WITH ventas_recientes AS ( SELECT * FROM
ventas WHERE fecha >= '2025-01-01' ) SELECT * FROM ventas_recientes; 13/18 a. Un tipo
especial de índice b. Un tipo de constraint para campos numéricos c. Una expresión temporal con
nombre que se usa dentro de una consulta d. Un comando para crear tablas temporales en disco
La respuesta correcta es:
c. Una expresión temporal con nombre que se usa dentro de una consulta
Un CTE (Common Table Expression) es una expresión temporal con nombre que se define
dentro de una consulta y se puede utilizar en otras partes de la misma consulta, como en la cláusula
SELECT, INSERT, UPDATE o DELETE. Es útil para hacer la consulta más legible y modular.

En el ejemplo:
WITH ventas_recientes AS (
SELECT * FROM ventas
WHERE fecha >= '2025-01-01'
)
SELECT * FROM ventas_recientes;
• Se crea un CTE llamado ventas_recientes que contiene los registros de ventas desde
el 1 de enero de 2025.
• Luego, en la consulta principal, se seleccionan todos los registros de
ventas_recientes.

Los CTE son útiles para simplificar consultas complejas, evitar subconsultas repetidas y mejorar la
legibilidad del código.
¿Qué instrucción DDL se usa para modificar la estructura de una tabla existente? ___ TABLE
empleados ADD COLUMN telefono VARCHAR(20); 14/18 a. ALTER b. UPDATE c. CHANGE d.
MODIFY
La respuesta correcta es:
a. ALTER
La instrucción ALTER se usa en SQL para modificar la estructura de una tabla existente, como
agregar, eliminar o modificar columnas. En el caso de la consulta que mencionas, se está usando
para agregar una nueva columna telefono a la tabla empleados.

El comando completo sería:


ALTER TABLE empleados ADD COLUMN telefono VARCHAR(20);
• UPDATE: Es una instrucción DML que se usa para modificar los datos de una tabla, no su
estructura.
• CHANGE y MODIFY: No son comandos estándar de SQL. Algunos sistemas de bases de
datos, como MySQL, pueden tener variantes de estos para modificar columnas, pero ALTER
es el estándar.
¿Cuál es una ventaja de usar campos JSON en una base de datos relacional? 15/18 a. Reemplaza la
necesidad de usar JOINs b. Siempre es más rápido que las columnas tradicionales c. Permite
almacenar datos no estructurados dentro de una tabla relacional d. Elimina la necesidad de llaves
primarias
La respuesta correcta es:
c. Permite almacenar datos no estructurados dentro de una tabla relacional
El uso de campos JSON en una base de datos relacional permite almacenar datos no estructurados
o semi-estructurados dentro de una tabla. Esto es útil cuando los datos no siguen una estructura
rígida, como en el caso de información con variabilidad o propiedades dinámicas, y aún así se desea
mantenerlos dentro de una base de datos relacional.
Ejemplo de un campo JSON:
CREATE TABLE empleados (
id INT PRIMARY KEY,
nombre VARCHAR(100),
detalles JSON
);
En este caso, el campo detalles podría contener información adicional como direcciones,
historial de empleo, o preferencias, y cada registro podría tener diferentes claves dentro de ese
JSON.
• a. Reemplaza la necesidad de usar JOINs: No es correcto. Los JOINs
siguen siendo necesarios para combinar datos de múltiples tablas.
• b. Siempre es más rápido que las columnas tradicionales: No es
cierto. El rendimiento depende de cómo se consulta el campo JSON, y no siempre es más
rápido.
• d. Elimina la necesidad de llaves primarias: No es cierto. Las llaves
primarias siguen siendo necesarias para garantizar la unicidad de los registros.
¿Qué devuelve la consulta con INTERSECT entre clientes_2024 y clientes_2025? SELECT nombre
FROM clientes_2024 INTERSECT SELECT nombre FROM clientes_2025; 16/18 a. Solo los
nombres que aparecen en ambas tablas b. Todos los nombres de ambas tablas sin duplicados c.
Genera un error porque INTERSECT no existe en SQL d. Los nombres de clientes_2024 que no
están en clientes_2025
La respuesta correcta es:
a. Solo los nombres que aparecen en ambas tablas
El operador INTERSECT devuelve los registros comunes entre las dos consultas. En este caso, la
consulta devolverá los nombres que están presentes tanto en la tabla clientes_2024 como en la
tabla clientes_2025.

Es decir, solo aquellos clientes que aparecen en ambas tablas.


Ejemplo:
SELECT nombre FROM clientes_2024
INTERSECT
SELECT nombre FROM clientes_2025;
• Si "Juan" está en ambas tablas, se incluirá en el resultado.
• Si "Pedro" solo está en clientes_2024 y no en clientes_2025, no aparecerá.

Otras opciones:
• b. Todos los nombres de ambas tablas sin duplicados: Esto sería el
comportamiento de un UNION, no de un INTERSECT.
• c. Genera un error porque INTERSECT no existe en SQL: INTERSECT
es válido en muchos sistemas de bases de datos SQL, como PostgreSQL, SQL Server,
Oracle, entre otros.
• d. Los nombres de clientes_2024 que no están en clientes_2025:
Esto sería el comportamiento de un EXCEPT o MINUS, no de un INTERSECT.

¿Cuál es la diferencia entre UNION y UNION ALL? -- Consulta A SELECT ciudad FROM
proveedores UNION SELECT ciudad FROM clientes; -- Consulta B SELECT ciudad FROM
proveedores UNION ALL SELECT ciudad FROM clientes; 17/18 a. UNION ALL es más lento
porque verifica tipos de datos b. UNION elimina duplicados y UNION ALL conserva todos los
registros c. UNION ordena los resultados y UNION ALL no d. No hay diferencia son sinónimos
La respuesta correcta es:
b. UNION elimina duplicados y UNION ALL conserva todos los registros
• UNION: Combina los resultados de dos consultas y elimina los duplicados. Solo se
devolverán registros únicos.
• UNION ALL: Combina los resultados de dos consultas pero conserva todos los registros,
incluidos los duplicados.
Por ejemplo, si en la tabla proveedores y en la tabla clientes hay la misma ciudad, UNION
eliminará ese valor duplicado en el resultado final, mientras que UNION ALL devolverá ambos
registros (el de proveedores y el de clientes).

Otras opciones:
• a. UNION ALL es más lento porque verifica tipos de datos: No es
cierto. UNION ALL generalmente es más rápido que UNION porque no realiza la operación
de eliminar duplicados.
• c. UNION ordena los resultados y UNION ALL no: No es cierto. Ninguno
de los dos garantiza un orden en los resultados a menos que se utilice explícitamente una
cláusula ORDER BY.

• d. No hay diferencia son sinónimos: No es cierto. La diferencia clave es que


UNION elimina duplicados, mientras que UNION ALL no lo hace.

¿Qué hace la función ROW_NUMBER() con PARTITION BY departamento ORDER BY salario


DESC? SELECT nombre, departamento, salario, ROW_NUMBER() OVER ( PARTITION BY
departamento ORDER BY salario DESC ) AS ranking FROM empleados; 18/18 a. Agrupa los
empleados por departamento y muestra solo el de mayor salario b. Asigna un número de fila
secuencial por departamento ordenado por salario descendente c. Calcula el salario promedio por
departamento d. Elimina los registros duplicados por departamento
La respuesta correcta es:
b. Asigna un número de fila secuencial por departamento ordenado por salario descendente
La función ROW_NUMBER() genera un número secuencial único para cada fila dentro de la
partición definida, en este caso, por departamento, y los números de fila se asignan según el
orden definido, que es por salario DESC (de mayor a menor salario).

En el ejemplo:
SELECT nombre, departamento, salario,
ROW_NUMBER() OVER (
PARTITION BY departamento
ORDER BY salario DESC
) AS ranking
FROM empleados;
• La consulta asigna un número secuencial (ranking) a cada empleado dentro de su
departamento, comenzando con 1 para el empleado con el salario más alto (ya que se
ordena de manera descendente).
• Así, el empleado con el salario más alto en cada departamento tendrá el número de fila 1, el
segundo el 2, y así sucesivamente.

Otras opciones:
• a. Agrupa los empleados por departamento y muestra solo el de
mayor salario: No es correcto, porque ROW_NUMBER() no agrupa, solo asigna un
número secuencial a cada fila.
• c. Calcula el salario promedio por departamento: Esto sería una tarea
para la función de agregación AVG(), no ROW_NUMBER().

• d. Elimina los registros duplicados por departamento:


ROW_NUMBER() no elimina duplicados; simplemente asigna números a las filas dentro de
cada partición.

También podría gustarte