Consultas SQL Fundamentales para Gestión de Datos
Enviado por Programa Chuletas y clasificado en Formación y Orientación Laboral
Escrito el en español con un tamaño de 9,26 KB
Este documento presenta una colección de ejercicios prácticos de SQL, diseñados para fortalecer las habilidades en la manipulación y consulta de datos en bases de datos relacionales. Cada ejercicio incluye una descripción clara del problema y su correspondiente solución en SQL, abarcando desde selecciones básicas hasta operaciones más complejas como subconsultas, uniones y modificaciones de datos.
Consulta de Trabajadores por Rango Salarial
Crear una consulta para visualizar todos los datos de los trabajadores cuyo salario no esté entre 1500 y 2000. Ordenar la salida de datos por fecha de alta en orden descendente.
SELECT * FROM emple WHERE salario NOT BETWEEN 1500 AND 2000 ORDER BY fecha_alt DESC;
Filtrado de Trabajadores por Apellido y Oficio
Visualizar los datos de los trabajadores cuyo apellido empiece por 'A' o el oficio contenga una 'T' en cualquier posición. Ordenar la salida de datos por apellido en orden ascendente.
SELECT * FROM emple WHERE apellido LIKE 'A%' UNION SELECT * FROM emple WHERE oficio LIKE '%T%' ORDER BY apellido ASC;
Listado Único de Oficios por Departamento
Crear un listado único de todos los oficios existentes en el departamento 30. Incluir la información completa del departamento 30 en la consulta.
SELECT DISTINCT e.oficio, d.* FROM emple e JOIN depart d ON e.dept_no = d.dept_no WHERE e.dept_no = 30;
Trabajadores con Mismo Oficio y Salario
Listar los datos de los trabajadores que tienen el mismo oficio y salario que el empleado de apellido ARROYO.
SELECT * FROM emple WHERE oficio = (SELECT oficio FROM emple WHERE apellido = 'ARROYO') AND salario = (SELECT salario FROM emple WHERE apellido = 'ARROYO');
Empleado Mejor Pagado por Departamento
Mostrar el apellido, salario y número de departamento del empleado mejor pagado por cada departamento. Ordenar el resultado de forma descendente por salario.
SELECT apellido, salario, dept_no FROM emple WHERE (salario, dept_no) IN (SELECT MAX(salario), dept_no FROM emple GROUP BY dept_no) ORDER BY salario DESC;
Departamentos con Salario Medio Superior a la Media Global
Visualizar los departamentos en los que el salario medio es mayor o igual que la media global de todos los salarios.
SELECT * FROM depart WHERE dept_no IN (SELECT dept_no FROM emple GROUP BY dept_no HAVING AVG(salario) >= (SELECT AVG(salario) FROM emple));
Departamento con Mayor Número de Trabajadores
Mostrar el número y nombre del departamento, y el número de trabajadores del departamento con la mayor cantidad de empleados. Renombrar las columnas de salida.
SELECT d.dept_no, d.dnombre AS NombreDepartamento, COUNT(e.emp_no) AS NumeroTrabajadores FROM emple e JOIN depart d ON e.dept_no = d.dept_no GROUP BY d.dept_no, d.dnombre ORDER BY NumeroTrabajadores DESC LIMIT 1;
Conteo de Trabajadores por Oficio y Departamento
Calcular el número de trabajadores por cada oficio y departamento. Renombrar la columna de salida.
SELECT dept_no, oficio, COUNT(emp_no) AS "Numero de Trabajadores" FROM emple GROUP BY dept_no, oficio;
Eliminación de Departamentos con Pocos Empleados
Eliminar los departamentos (de la tabla
depart
) que tienen menos de cuatro empleados.DELETE FROM depart WHERE dept_no IN (SELECT dept_no FROM emple GROUP BY dept_no HAVING COUNT(emp_no) < 4);
Creación de Vista 'NUEVA'
Crear una vista, denominada
NUEVA
, que contenga el número de empleado, apellido y oficio de la tablaemple
, junto con el número de departamento y la localidad de la tabladepart
para cada empleado.CREATE VIEW NUEVA AS SELECT e.emp_no, e.apellido, e.oficio, d.dept_no, d.localidad FROM emple e JOIN depart d ON e.dept_no = d.dept_no;
Modificación de Atributos de Trabajadores del Departamento 20
Modificar en la tabla
emple
los siguientes atributos para los trabajadores del departamento 20: reducir el salario a la mitad, establecer la comisión a cero y convertir el apellido a minúsculas.UPDATE emple SET salario = salario / 2, comision = 0, apellido = LOWER(apellido) WHERE dept_no = 20;
Creación de Vista 'Dept30'
Crear una vista
Dept30
que contenga el apellido, oficio y salario de los trabajadores de la tablaemple
pertenecientes al departamento 30.CREATE VIEW Dept30 AS SELECT apellido, oficio, salario FROM emple WHERE dept_no = 30;
Conteo de Vendedores en Departamento 'VENTAS'
Mostrar el número de empleados con oficio 'VENDEDOR' del departamento 'VENTAS'. Renombrar la columna de salida como 'Nº Empleados Departamento Ventas'.
SELECT COUNT(e.emp_no) AS "Nº Empleados Departamento Ventas" FROM emple e JOIN depart d ON e.dept_no = d.dept_no WHERE d.dnombre = 'VENTAS' AND e.oficio = 'VENDEDOR';
Suma de Salarios por Oficio en Departamento 'VENTAS'
Mostrar la suma de salarios por cada oficio para los empleados del departamento 'VENTAS'.
SELECT e.oficio, SUM(e.salario) AS SumaSalarios FROM emple e JOIN depart d ON e.dept_no = d.dept_no WHERE d.dnombre = 'VENTAS' GROUP BY e.oficio;
Departamento con Más Vendedores
Mostrar los datos del departamento que posee la mayor cantidad de empleados con oficio 'VENDEDOR', incluyendo el número de dichos empleados.
SELECT d.*, COUNT(e.emp_no) AS NumeroVendedores FROM emple e JOIN depart d ON e.dept_no = d.dept_no WHERE e.oficio = 'VENDEDOR' GROUP BY d.dept_no, d.dnombre, d.localidad ORDER BY NumeroVendedores DESC LIMIT 1;
Departamentos con Múltiples Empleados en el Mismo Oficio
Encontrar los departamentos que tienen más de dos personas trabajando en el mismo oficio.
SELECT d.dept_no, d.dnombre, e.oficio, COUNT(e.emp_no) AS NumeroEmpleadosPorOficio FROM emple e JOIN depart d ON e.dept_no = d.dept_no GROUP BY d.dept_no, d.dnombre, e.oficio HAVING COUNT(e.emp_no) > 2;
Salario Medio por Departamento (Detallado)
Visualizar el número de departamento y el salario medio para aquellos departamentos donde el salario medio es mayor o igual que la media global de todos los salarios.
SELECT dept_no, AVG(salario) AS SalarioMedioDepartamento FROM emple GROUP BY dept_no HAVING AVG(salario) >= (SELECT AVG(salario) FROM emple);
Suma de Salarios por Oficio en Departamento 'INVESTIGACIÓN'
Partiendo de la tabla
emple
, visualizar por cada oficio de los empleados del departamento 'INVESTIGACIÓN', la suma de salarios.SELECT e.oficio, SUM(e.salario) AS SumaSalarios FROM emple e JOIN depart d ON e.dept_no = d.dept_no WHERE d.dnombre = 'INVESTIGACIÓN' GROUP BY e.oficio;
Conteo de Empleados por Departamento con Oficio 'EMPLEADO'
A partir de la tabla
emple
, visualizar el número de empleados de cada departamento cuyo oficio sea 'EMPLEADO'.SELECT dept_no, COUNT(*) AS "Nº Empleados" FROM emple WHERE oficio = 'EMPLEADO' GROUP BY dept_no;
Filtrado de Empleados por Apellido y Oficio (AND)
Visualizar los empleados cuyo apellido empiece por 'A' y el oficio contenga una 'E' en cualquier posición. Ordenar la salida de datos por oficio.
SELECT apellido, oficio FROM emple WHERE apellido LIKE 'A%' AND oficio LIKE '%E%' ORDER BY oficio;
Datos de Vendedores y su Localidad
Visualizar apellido, oficio y localidad de los departamentos donde trabajan los 'VENDEDORes'. Renombrar la columna 'oficio' con 'Datos de los Vendedores'.
SELECT e.apellido, e.oficio AS "Datos de los Vendedores", d.localidad FROM emple e JOIN depart d ON e.dept_no = d.dept_no WHERE e.oficio = 'VENDEDOR';
Empleados con Oficio Similar o Salario Superior
Mostrar los empleados que desempeñan el mismo oficio que SALA o que tengan un salario mayor o igual que FERNÁNDEZ.
SELECT apellido, oficio, salario FROM emple WHERE oficio = (SELECT oficio FROM emple WHERE apellido = 'SALA') OR salario >= (SELECT salario FROM emple WHERE apellido = 'FERNANDEZ');
Empleados del Departamento de SÁNCHEZ con Mismo Salario
Mostrar el apellido, oficio y salario de los empleados del departamento de SÁNCHEZ que tengan su mismo salario.
SELECT apellido, oficio, salario FROM emple WHERE (dept_no, salario) IN (SELECT dept_no, salario FROM emple WHERE apellido = 'SANCHEZ');