No es un bug, es una característica no documentada

martes, 9 de diciembre de 2014

Bases de datos. Consultas SQL (I)

12:25 Posted by Inazio , 1 comment
Vamos a realizar ejercicios de consultas SQL. Para poder realizarlas, usa el siguiente código SQL para cargar las tablas necesarias:



O descárgalo desde aquí


EJERCICIOS. CONSULTAS SENCILLAS

Tablas utilizadas: EMPLEADOS y DEPARTAMENTOS

1. Escribir los apellidos de los empleados junto con sus fechas de alta en formato: <<numero del día>> de <<nombre del mes>> de <<año con 4 dígitos>>

SELECT APELLIDO, CONCAT(DAY(FECHA_ALTA)," del ",MONTH(FECHA_ALTA)," de ",YEAR(FECHA_ALTA)) as 'Fecha de alta'
FROM EMPLEADOS;

2. Hallar por orden alfabético los apellidos de los empleados, suprimiendo las tres últimas letras, mostrando solo aquellos cuyo apellido tenga más de seis caracteres

SELECT SUBSTR(APELLIDO, 1, 3) AS APELLIDOS
FROM empleados
WHERE length(APELLIDO)>6;

3. Se desea hacer un regalo de un 3% del salario a los empleados que no tienen comisión. Obtener el listado ordenado por orden alfabético con los apellidos y el importe de los regalos

SELECT APELLIDO, SALARIO*0.03 AS 'Regalo de salario'
FROM empleados
WHERE COMISION IS NULL;

4. Obtener los datos de los empleados cuyo salario total (salario+comision) supere los 2.000 euros, siempre que además su salario supere los 1800 euros o su comisión supere los 500 euros

SELECT *
FROM EMPLEADOS
WHERE SALARIO+IFNULL(COMISION,0)>2000 AND (SALARIO>1800 OR COMISION>500);

5. Visualizar los datos del empleado de oficio DIRECTOR más antiguo en la empresa.

SELECT *
FROM EMPLEADOS
WHERE OFICIO LIKE 'DIRECTOR'
ORDER BY FECHA_ALTA
LIMIT 1;

6. Visualizar los datos de los dos empleados que ganan más salario entre los empleados de los departamento 20 y 30

SELECT *
FROM EMPLEADOS
WHERE DEP_NO=20 OR DEP_NO=30
ORDER BY SALARIO DESC
LIMIT 2;



Tablas utilizadas: EMPLEADOS y DEPARTAMENTOS


1. Seleccionar todos los empleados cuya fecha de alta fuese posterior al 1 de mayo de 1981
SELECT *
FROM EMPLEADOS
WHERE FECHA_ALTA>'1981-05-01';

2. Visualizar para cada empleado su apellido junto con los días que lleva en la empresa desde su alta hasta el final del 2004

SELECT APELLIDO, DATEDIFF('2004-12-31',FECHA_ALTA) AS 'DIAS TRABAJADOS HASTA 31-12-2004'
FROM EMPLEADOS;

3. Visualizar los apellidos de los empleados de la empresa, su fecha de ingreso y el día de la semana que era.

SELECT APELLIDO, FECHA_ALTA, DAYNAME(FECHA_ALTA)
FROM EMPLEADOS;

4. Obtener el importe total (salario + comisión) a cobrar por los empleados de la empresa que tienen el ocio de VENDEDOR

SELECT APELLIDO, SALARIO+ifnull(COMISION,0) AS 'IMPORTE TOTAL'
FROM empleados
WHERE OFICIO LIKE 'VENDEDOR';

5. Visualizar los números de los empleados, sus apellidos y sus oficios, de aquellos empleados cuyo apellido termine por la letra "O" y de aquellos empleados cuyo oficio empiece por 'V'

SELECT EMP_NO, APELLIDO, OFICIO
FROM EMPLEADOS
WHERE APELLIDO LIKE '%O' OR OFICIO LIKE 'V%';

6. Visualizar los nombres de los departamentos con longitud hasta 36 caracteres, rellenando con "*" por la derecha.

SELECT RPAD(DNOMBRE,36,'*') AS DEPARTAMENTO
FROM departamentos
WHERE LENGTH(DNOMBRE)<=36;

7. Visualizar los nombres de los empleados sustituyendo las apariciones de la letra 'A' por '*'

SELECT REPLACE(APELLIDO, 'A','*')
FROM EMPLEADOS;

8. Obtener el nombre de los departamentos mostrando la mitad de sus caracteres

SELECT SUBSTR(DNOMBRE, 1, LENGTH(DNOMBRE)/2)
FROM departamentos;

9. Visualizar los datos de los empleados ordenado por departamento, oficio y apellido, y mostrando los datos con las columna de ordenación en ese orden (de cada empleado mostrar primero el departamento, luego el oficio, luego el apellido y después el resto).

SELECT DEP_NO, OFICIO, APELLIDO, FECHA_ALTA, SALARIO, COMISION, DIRECTOR
FROM EMPLEADOS
ORDER BY DEP_NO, OFICIO, APELLIDO;

10. Visualizar el número de departamento, el apellido y el salario total (salario+comisión), de todos los empleados de la empresa, ordenados por departamento primero y después por salario total en orden ascendente

SELECT DEP_NO, APELLIDO, SALARIO+ifnull(COMISION,0) AS 'SALARIO TOTAL'
FROM EMPLEADOS
ORDER BY DEP_NO, SALARIO+ifnull(COMISION,0);

11. Para los empleados del departamento 30, visualizar apellido y salario total (salario+comisión) por orden decreciente de salario total y por orden alfabético a igual salario total.
SELECT APELLIDO, SALARIO+ifnull(COMISION,0) AS 'SALARIO TOTAL'
FROM EMPLEADOS
WHERE DEP_NO=30
ORDER BY SALARIO+ifnull(COMISION,0) DESC, APELLIDO ASC;

12. Obtener los apellidos de los empleados que no tienen comisión, clasificados de manera que aparezcan primero aquellos cuyos apellidos sean más cortos

SELECT APELLIDO
FROM empleados
WHERE COMISION IS NULL
ORDER BY LENGTH(APELLIDO);

13. Visualizar el departamento, mostrando el nombre y su longitud, con el nombre más largo.

SELECT DNOMBRE, length(DNOMBRE) AS LONGITUD
FROM DEPARTAMENTOS
ORDER BY LENGTH(DNOMBRE) DESC
LIMIT 1;

14. Visualizar los apellidos de los empelados, su fecha de alta y su departamento de los 4 empleados con las fecha de alta más recientes.

SELECT EMPLEADOS.APELLIDO, EMPLEADOS.FECHA_ALTA, DEPARTAMENTOS.DNOMBRE AS DEPARTAMENTO
FROM EMPLEADOS, departamentos
ORDER BY FECHA_ALTA DESC

LIMIT 4;

1 comentario:

  1. Interesantes ejercicios, gracias por compartirlos porque nos van a venir genial para un futuro, gracias!

    ResponderEliminar