SQL – Nivel 3 – Test 1

SQL – Nivel 3 – Test 1

Test-1 SQL Nivel 3

¿Qué es una transacción en SQL?

¿Cuál es la diferencia entre UNION y UNION ALL en SQL?

¿Qué es un índice de cobertura (covering index) en SQL?

¿Qué hace la cláusula PARTITION BY en una función de ventana?

¿Qué es una función de ventana (window function) en SQL?

¿Qué es un "deadlock" en el contexto de las bases de datos?

Dada la siguiente consulta:

WITH salarios_departamento AS (
        SELECT departamento_id, AVG(salario) as salario_promedio,
             ROW_NUMBER() OVER (ORDER BY AVG(salario) DESC) as ranking
        FROM empleados
        GROUP BY departamento_id
)
SELECT d.nombre, sd.salario_promedio
FROM salarios_departamento sd
JOIN departamentos d ON sd.departamento_id = d.id
WHERE sd.ranking <= 3;

¿Qué hace esta consulta?

¿Cuál es el propósito de la cláusula MERGE en SQL?

¿Qué hace la cláusula OVER en SQL?

Considera la siguiente consulta:


SELECT e1.nombre, e1.salario
FROM empleados e1
WHERE 2 > (
     SELECT COUNT(DISTINCT e2.salario)
     FROM empleados e2
     WHERE e2.salario > e1.salario
);

¿Qué hace esta consulta?

Respuestas:


1. ¿Cuál es la diferencia entre UNION y UNION ALL en SQL?

Respuesta: UNION elimina duplicados, UNION ALL los mantiene

Explicación:

  • UNION: Combina los resultados de dos o más consultas y elimina duplicados.
  • UNION ALL: Combina los resultados pero conserva duplicados, lo que puede ser más rápido.

Ejemplo:

SELECT nombre FROM clientes_a 

UNION 

SELECT nombre FROM clientes_b; — Sin duplicados

SELECT nombre FROM clientes_a 

UNION ALL 

SELECT nombre FROM clientes_b; — Incluye duplicados


2. ¿Qué es una función de ventana (window function) en SQL?

Respuesta: Una función que opera en una partición de filas

Explicación:
Las funciones de ventana, como ROW_NUMBER o RANK, realizan cálculos sobre un conjunto definido de filas (ventana) mientras preservan los resultados fila por fila.

Ejemplo:

SELECT nombre, salario, 

       RANK() OVER (PARTITION BY departamento ORDER BY salario DESC) AS ranking 

FROM empleados;


3. ¿Qué hace la cláusula OVER en SQL?

Respuesta: Define una ventana de filas para funciones de ventana

Explicación:
OVER especifica cómo se agrupan o clasifican las filas para una función de ventana, como SUM, AVG, o RANK.

Ejemplo:

SELECT departamento, salario, 

       SUM(salario) OVER (PARTITION BY departamento) AS total_departamento 

FROM empleados;


4. Dada la consulta:

WITH salarios_departamento AS ( 

        SELECT departamento_id, AVG(salario) as salario_promedio, 

             ROW_NUMBER() OVER (ORDER BY AVG(salario) DESC) as ranking 

        FROM empleados 

        GROUP BY departamento_id 

SELECT d.nombre, sd.salario_promedio 

FROM salarios_departamento sd 

JOIN departamentos d ON sd.departamento_id = d.id 

WHERE sd.ranking <= 3; 

Respuesta: Lista los 3 departamentos con el salario promedio más alto

Explicación:

  • ROW_NUMBER genera un ranking de los departamentos basado en su salario promedio.
  • WHERE sd.ranking <= 3 filtra solo los 3 primeros departamentos.

5. ¿Cuál es el propósito de la cláusula MERGE en SQL?

Respuesta: Fusionar datos de una tabla origen en una tabla destino

Explicación:
MERGE combina operaciones INSERT, UPDATE, y DELETE en una sola instrucción, dependiendo de si las filas coinciden o no.

Ejemplo:

MERGE INTO inventario_destino AS destino 

USING inventario_origen AS origen 

ON destino.id = origen.id 

WHEN MATCHED THEN 

    UPDATE SET cantidad = origen.cantidad 

WHEN NOT MATCHED THEN 

    INSERT (id, cantidad) VALUES (origen.id, origen.cantidad);


6. ¿Qué es un «deadlock» en el contexto de las bases de datos?

Respuesta: Una situación donde dos transacciones se bloquean mutuamente

Explicación:
Un deadlock ocurre cuando dos o más transacciones esperan indefinidamente porque cada una tiene un recurso bloqueado que la otra necesita.


7. ¿Qué es un índice de cobertura (covering index) en SQL?

Respuesta: Un índice que puede satisfacer una consulta sin acceder a la tabla

Explicación:
Un índice de cobertura incluye todas las columnas necesarias para responder a una consulta, eliminando la necesidad de buscar datos adicionales en la tabla.

Ejemplo:

CREATE INDEX idx_empleados_nombre_salario ON empleados(nombre, salario);


8. Considera la consulta:

SELECT e1.nombre, e1.salario 

FROM empleados e1 

WHERE 2 > ( 

     SELECT COUNT(DISTINCT e2.salario) 

     FROM empleados e2 

     WHERE e2.salario > e1.salario 

);

Respuesta: Lista los empleados con los dos salarios más altos

Explicación:
La subconsulta cuenta cuántos salarios son mayores que el de e1. Si esta cantidad es menor que 2, significa que e1 tiene uno de los dos salarios más altos.


9. ¿Qué hace la cláusula PARTITION BY en una función de ventana?

Respuesta: Divide el resultado en particiones para cálculos separados

Explicación:
PARTITION BY divide las filas en grupos para que las funciones de ventana operen por partición en lugar de todo el conjunto de datos.

Ejemplo:

SELECT departamento, salario, 

       RANK() OVER (PARTITION BY departamento ORDER BY salario DESC) AS ranking  

FROM empleados;


10. ¿Qué es una transacción en SQL?

Respuesta: Una serie de operaciones que se ejecutan como una unidad atómica

Explicación:
Una transacción asegura que un conjunto de operaciones se complete en su totalidad o no se realice nada en absoluto, garantizando integridad y consistencia.

Ejemplo:

BEGIN TRANSACTION; 

UPDATE cuentas SET saldo = saldo – 100 WHERE id = 1; 

UPDATE cuentas SET saldo = saldo + 100 WHERE id = 2; 

COMMIT;

Deja un comentario