Dominando Consultas SQL en Oracle: Ejercicios Prácticos y Funciones Esenciales
Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones
Escrito el en español con un tamaño de 6,75 KB
Ejercicios Resueltos de Consultas SQL en Oracle
Este documento presenta una serie de ejercicios prácticos de SQL, enfocados en la manipulación y consulta de datos en entornos de Oracle Database. Cada ejercicio incluye una pregunta clara y su correspondiente solución en código SQL, abordando desde la visualización de la estructura de tablas hasta el uso de funciones avanzadas y la lógica condicional.
1. Visualización de la Estructura de una Tabla
Pregunta: ¿Con qué comando se puede ver la estructura de una tabla?
Respuesta: El comando DESCRIBE
(o su abreviatura DESC
) se utiliza para mostrar la estructura de una tabla, incluyendo los nombres de las columnas, sus tipos de datos y si aceptan valores nulos.
DESCRIBE nombre_de_la_tabla;
-- Ejemplo:
DESCRIBE employees;
2. La Tabla DUAL para Pruebas del Sistema
Pregunta: ¿Cuál es la tabla con la que se pueden hacer pruebas, como por ejemplo obtener la fecha del sistema?
Respuesta: La tabla DUAL
es una tabla especial en Oracle que se utiliza para realizar cálculos o ejecutar funciones que no requieren datos de una tabla real. Es útil para obtener valores del sistema o realizar operaciones aritméticas simples.
SELECT SYSDATE FROM DUAL;
SELECT LAST_DAY(SYSDATE) FROM DUAL;
3. Eliminación de Filas Duplicadas en Resultados
Pregunta: Escriba una consulta SELECT
que ejemplifique cómo eliminar filas duplicadas en su resultado.
Respuesta: La cláusula DISTINCT
se utiliza para eliminar filas duplicadas de un conjunto de resultados, mostrando solo los valores únicos de las columnas seleccionadas.
SELECT DISTINCT job_id FROM employees;
4. Cálculo de Ingresos Extra con Formato Específico
Pregunta: Genere una consulta SELECT
que muestre apellidos, salario, comisión y el resultado de multiplicar el salario por la comisión, etiquetando la columna como "Ingreso Extra". Esta columna debe tener el formato '$999,999.00' y solo debe mostrarse para empleados con comisión.
Respuesta: Se utiliza la función TO_CHAR
para aplicar un formato monetario específico y la cláusula WHERE
para filtrar solo a los empleados que tienen comisión.
SELECT
last_name,
salary,
commission_pct,
TO_CHAR(salary * commission_pct, '$999,999.00') AS "Ingreso Extra"
FROM
employees
WHERE
commission_pct IS NOT NULL;
5. Consulta de Fechas de Contratación con Formato de Día
Pregunta: Muestre el apellido, la fecha de contratación y el día de la semana en que fue contratado el empleado (formato 'DAY') para aquellos empleados cuyo job_id
contenga el texto "MAN".
Respuesta: La función TO_CHAR
permite extraer el día de la semana de una fecha, y el operador LIKE
con comodines se usa para buscar patrones en cadenas de texto.
SELECT
last_name,
hire_date,
TO_CHAR(hire_date, 'DAY') AS "Dia de Contratacion"
FROM
employees
WHERE
job_id LIKE '%MAN%';
6. Filtrado de Empleados por Salario y Departamento
Pregunta: Muestre el apellido y el salario de los empleados cuyo salario no esté en el rango de $6,000 a $10,000 y que pertenezcan a los departamentos 20, 30 o 60.
Respuesta: Se combinan las cláusulas NOT BETWEEN
para rangos numéricos y IN
para listas de valores, unidas por el operador lógico AND
.
SELECT
last_name,
salary
FROM
employees
WHERE
salary NOT BETWEEN 6000 AND 10000
AND department_id IN (20, 30, 60);
7. Búsqueda de Patrones en Nombres y Concatenación de Cadenas
Pregunta: Muestre los empleados cuya tercera letra de su nombre sea 'a', con el siguiente formato: '[nombre] [apellido] tiene en la tercera letra de su nombre la letra a'. Ordene el resultado de forma descendente por la columna apellido.
Respuesta: El operador LIKE
con el comodín de guion bajo (_
) permite especificar la posición de un carácter. La concatenación de cadenas se realiza con el operador ||
.
SELECT
first_name || ' ' || last_name || ' tiene en la tercera letra de su nombre la letra a' AS "Descripcion Empleado"
FROM
employees
WHERE
first_name LIKE '__a%'
ORDER BY
last_name DESC;
8. Aplicación de Funciones de Fecha: NEXT_DAY() y MONTHS_BETWEEN()
Pregunta: Escriba una consulta que demuestre el uso de las funciones NEXT_DAY()
y MONTHS_BETWEEN()
.
Respuesta:
NEXT_DAY(fecha, 'día_de_la_semana')
: Devuelve la fecha del primer día de la semana especificado que es posterior a la fecha dada.MONTHS_BETWEEN(fecha1, fecha2)
: Devuelve el número de meses entre dos fechas.
SELECT
last_name,
hire_date,
NEXT_DAY(hire_date, 'MONDAY') AS "Siguiente Lunes de Contratacion",
MONTHS_BETWEEN(SYSDATE, hire_date) AS "Meses Trabajados"
FROM
employees;
9. Clasificación de Empleados con la Función DECODE
Pregunta: Aplicando la lógica IF-THEN-ELSE con la función DECODE
, cree una consulta que muestre el apellido, el salario del empleado y una nueva columna llamada 'Grupo'. Esta columna se determinará según la letra inicial del apellido, siguiendo estas reglas:
- Apellidos con la letra inicial de A-C: Grupo A
- Apellidos con la letra inicial de H-J: Grupo B
- Apellidos con la letra inicial de P-R: Grupo C
- El resto de apellidos: Grupo X
Respuesta: La función DECODE
permite implementar lógica condicional similar a un IF-THEN-ELSE
o CASE
simple. Para rangos de letras, se debe especificar cada letra individualmente o anidar DECODE
s, aunque para este caso, una lista explícita es más directa.
SELECT
last_name,
salary,
DECODE(SUBSTR(UPPER(last_name), 1, 1),
'A', 'Grupo A',
'B', 'Grupo A',
'C', 'Grupo A',
'H', 'Grupo B',
'I', 'Grupo B',
'J', 'Grupo B',
'P', 'Grupo C',
'Q', 'Grupo C',
'R', 'Grupo C',
'Grupo X' -- Valor por defecto si no coincide con ninguno de los anteriores
) AS "Grupo"
FROM
employees;