20 EJERCICIOS DE SQL PARA PRACTICAR
Estructura y esquema de la tabla:
Crea una tabla con una columna de clave primaria
CREAR TABLA departamentos
( department_id ENTERO CLAVE PRIMARIA
VARCHAR(30)
location_id ENTERO
) ;
Crea una tabla con una clave foránea
CREAR TABLA empleados
( id_empleado ENTERO
, nombre VARCHAR(20)
, apellido VARCHAR(25)
, correo electrónico VARCHAR(25)
, número_de_teléfono VARCHAR(20)
, fecha_de_contratación FECHA
, job_id VARCHAR(10)
, salario ENTERO
, commission_pct ENTERO
manager_id ENTERO
, department_id ENTERO
, restricción pk_emp clave primaria (employee_id)
, restricción fk_deptno clave foránea (department_id) referencias
departamentos(id_del_departamento)
) ;
Insertar registros en tablas
## Insertar en la tabla Departamentos
INSERTAR EN departamentos VALORES ( 20,'Marketing', 180);
INSERTAR EN departamentos VALORES ( 30,'Compras', 1700);
INSERTAR EN departamentos VALORES ( 40, 'Recursos Humanos', 2400);
INSERTAR EN departamentos VALORES ( 50, 'Envío', 1500);
INSERTAR EN departamentos VALORES (60, 'TI', 1400);
INSERTAR EN departamentos VALORES ( 70, 'Relaciones Públicas', 2700);
INSERTAR EN departamentos VALORES ( 80 , 'Ventas', 2500 );
INSERTAR EN departamentos VALORES (90, 'Ejecutivo', 1700);
INSERTAR EN departamentos VALORES ( 100 , 'Finanzas', 1700);
INSERTAR EN departamentos VALORES ( 110 , 'Contabilidad', 1700);
INSERTAR EN departamentos VALORES ( 120 , 'Tesorería' , 1700);
INSERT INTO departments VALUES ( 130 , 'Impuesto Corporativo' , 1700 );
INSERTAR EN departamentos VALORES ( 140, 'Control y Crédito' , 1700);
INSERT INTO departments VALUES ( 150 , 'Servicios a Accionistas', 1700);
INSERT INTO departments VALUES ( 160 , 'Beneficios', 1700);
INSERTAR EN departamentos VALORES ( 170 , 'Nómina' , 1700);
## Insertar en la tabla Empleados
INSERT INTO empleados VALORES (100, 'Steven', 'Rey', 'SKING', '515.123.4567',
1987-06-17
INSERTAR EN empleados VALORES (101, 'Neena', 'Kochhar', 'NKOCHHAR',
515.123.4568
INSERTAR EN empleados VALORES (102 , 'Lex' , 'De Haan' , 'LDEHAAN' ,
515.123.4569
INSERTAR EN empleados VALORES (103, 'Alexander', 'Hunold', 'AHUNOLD',
590.423.4567
INSERTAR EN empleados VALORES (104 , 'Bruce' , 'Ernst' , 'BERNST' ,
590.423.4568
INSERT INTO employees VALUES (105 , 'David' , 'Austin' , 'DAUSTIN' ,
590.423.4569
INSERT INTO employees VALUES (106, 'Valli', 'Pataballa', 'VPATABAL',
590.423.4560
INSERTAR EN empleados VALORES (107, 'Diana', 'Lorentz', 'DLORENTZ',
590.423.5567
INSERTAR EN empleados VALORES (108 , 'Nancy' , 'Greenberg' , 'NGREENBE' ,
515.124.4569
INSERT INTO empleados VALUES (109, 'Daniel', 'Faviet', 'DFAVIET',
515.124.4169
INSERTAR EN empleados VALORES (110, 'John', 'Chen', 'JCHEN',
'515.124.4269' , '1997-04-09', 'FI_ACCOUNT' , 8200 , NULL , 108 , 170);
INSERT INTO employees VALUES (111 , 'Ismael' , 'Sciarra' , 'ISCIARRA' ,
515.124.4369
INSERTAR EN empleados VALORES (112 , 'Jose Manuel' , 'Urman' , 'JMURMAN' ,
515.124.4469
INSERT INTO employees VALUES (113 , 'Luis' , 'Popp' , 'LPOPP' ,
515.124.4567
INSERTAR EN empleados VALORES (114 , 'Den' , 'Raphaely' , 'DRAPHEAL' ,
515.127.4561
INSERT INTO empleados VALORES (115 , 'Alexander' , 'Khoo' , 'AKHOO' ,
515.127.4562
INSERTAR EN empleados VALORES (116 , 'Shelli' , 'Baida' , 'SBAIDA' ,
515.127.4563
INSERTAR EN empleados VALORES (117 , 'Sigal' , 'Tobias' , 'STOBIAS' ,
515.127.4564
INSERTAR EN empleados VALORES (118, 'Guy', 'Himuro', 'GHIMURO'
515.127.4565
INSERTAR EN empleados VALORES (119 , 'Karen' , 'Colmenares' , 'KCOLMENA' ,
515.127.4566
INSERTAR EN empleados VALORES (120 , 'Matthew' , 'Weiss' , 'MWEISS' ,
650.123.1234
INSERTAR EN empleados VALORES (121 , 'Adam' , 'Fripp' , 'AFRIPP' ,
650.123.2234
INSERT INTO empleados VALUES (122 , 'Payam' , 'Kaufling' , 'PKAUFLIN' ,
650.123.3234
INSERTAR EN empleados VALORES (123, 'Shanta', 'Vollman', 'SVOLLMAN',
650.123.4234
INSERTAR EN empleados VALORES (124, 'Kevin', 'Mourgos', 'KMOURGOS',
650.123.5234
INSERTAR EN empleados VALORES (125, 'Julia', 'Nayer', 'JNAYER',
650.124.1214
INSERTAR EN empleados VALORES (126, 'Irene', 'Mikkilineni', 'IMIKKILI'
650.124.1224
INSERTAR EN empleados VALORES (127, 'James', 'Landry', 'JLANDRY',
650.124.1334
INSERTAR EN empleados VALORES (128, 'Steven', 'Markle', 'SMARKLE',
650.124.1434
INSERTAR EN empleados VALORES (129, 'Laura', 'Bissot', 'LBISSOT',
650.124.5234
INSERT INTO employees VALUES (130, 'Mozhe', 'Atkinson', 'MATKINSO',
650.124.6234
Entonces, ahora tenemos 2 tablas y algunos datos listos para ejecutar nuestro SQL. Es hora de
algunos ejercicios.
Resolver Ejercicios de SQL
1. Seleccione el nombre, apellido, id_trabajo y salario de los empleados cuyo
el primer nombre comienza con la letra S
seleccionar nombre
apellido
id_de_trabajo
salario
de empleados
donde upper(first_name) like 'S%';
2. Escribe una consulta para seleccionar al empleado con el salario más alto
seleccionar id_empleado
nombre
apellido
identificación_del_trabajo
salario
de empleados
donde salario = (seleccionar máximo(sueldo) de empleados);
3. Seleccionar al empleado con el segundo salario más alto
seleccionar id_empleado
nombre
apellido
identificador_de_trabajo
salario
de empleados
donde salario != (seleccionar max(salario) de empleados)
ordenar por salario desc
límite 1;
La consulta anterior selecciona solo a una persona con el segundo salario más alto. Pero
¿Qué pasa si hay más de una persona con el mismo salario? O, ¿qué pasa si queremos
¿Seleccionar el tercer o cuarto salario más alto? Entonces, intentemos un enfoque genérico.
4. Obtener empleados con el segundo o tercer salario más alto
#cambia la entrada para el segundo, tercero o cuarto salario más alto
establecer @entrada:=3;
seleccionar id_empleado
nombre
apellido
id_de_trabajo
salario
de empleados e
donde @input =(seleccionar CONTAR(DISTINTO Salario)
de empleados p
donde [Link]<=[Link]);
5. Escriba una consulta para seleccionar empleados y su correspondiente
gerentes y sus salarios
Ahora, este es un ejemplo clásico de AUTO JOIN en ejercicios de SQL. También, soy
utilizando la función CONCAT para concatenar el primer nombre y el apellido de
cada empleado y gerente.
seleccionar concat(emp.first_name, ' ', emp.last_name) empleado,
[Link] emp_sal,
concat(mgr.first_name,' ',mgr.last_name) gerente,
salario del gerente
de empleados emp
unir empleados mgr en emp.manager_id = mgr.employee_id;
6. Escriba una consulta para mostrar el conteo de empleados bajo cada gerente
en orden descendente
seleccionar
sup.id_empleado id_empleado
concat(sup.first_name,' ', sup.last_name)nombre_gerente,
CONTAR (sub.employee_id) COMO número_de_reportes
de empleados sub
unir empleados sup
en sub.manager_id = sup.employee_id
agrupado por sup.employee_id, sup.first_name, sup.last_name
ordenar por 3 desc;
7. Encuentra el número de empleados en cada departamento
selecciona dept.nombre_del_departamento
count(emp.employee_id) emp_count
de empleados emp
unir departamentos dept en emp.department_id = dept.department_id
agrupar por dept.department_name
ordenar por 2 desc;
8. Obtén el conteo de empleados contratados por año
año_contratación
de empleados
agrupado por año(hire_date)
ordenar por 2 descendente;
9. Encuentra el rango salarial de los empleados
seleccionar min(salario) min_sal,
max(salario)
redondear(promedio(salario)) avg_sal
de empleados;
10. Escribe una consulta para dividir a las personas en tres grupos según su
salarios
seleccionar concat(nombre,' ',apellido) empleado,
salario
caso
cuando el salario >=2000 y el salario < 5000 entonces "bajo"
cuando el salario >=5000 y el salario < 10000 entonces "medio"
sino
alto
fin como nivel_sueldo
de empleados
ordenar por 1;
11. Seleccione a los empleados cuyo primer_nombre contiene "an"
seleccionar (nombre)
de empleados
donde lower(first_name) como '%an%';
12. Seleccione el nombre de pila del empleado y el número de teléfono correspondiente
número en el formato (_ _ _)-(_ _ _)-(_ _ _ _)
seleccionar concat(nombre, ' ', apellido) empleado,
reemplazar(número_de_teléfono,'.','-') número_de_teléfono
de empleados;
13. Encuentra los empleados que se unieron en agosto de 1994.
seleccionar concat(nombre, ' ', apellido) empleado,
fecha_de_contratación
de empleados
donde año(hire_date) = '1994'
y mes(hire_date) = '08';
14. Escribe una consulta SQL para mostrar a los empleados que ganan más de
el salario promedio en esa empresa
seleccionar
concat(emp.first_name, last_name) nombre
emp.id_empleado
departamento.nombre_del_departamento departamento,
dept.department_id,
[Link]
de los departamentos dept
UNIR empleados emp en dept.department_id = emp.department_id
donde [Link] > (seleccionar avg(salary) de empleados)
ordenar por dept.department_id;
15. Encuentra el salario máximo de cada departamento.
seleccionar
dept.department_id,
departamento.nombre_del_departamento departamento,
máximo([Link])
desde departamentos dept
UNIR empleados emp en dept.department_id = emp.department_id
agrupar por dept.department_name,
dept.department_id
ordenar por dept.department_id ;
16. Escribe una consulta SQL para mostrar los 5 empleados con menores ingresos.
seleccionar
nombre
id_empleado
salario
de empleados
ordenar por salario
límite 5;
17. Encuentra a los empleados contratados en los años 80
seleccionar id_empleado,
concat(first_name,' ' , last_name) empleado,
fecha de contratación
de empleados
donde año(hire_date) entre 1980 y 1989;
18. Mostrar el nombre y el apellido de los empleados en orden inverso
seleccionar lower(first_name) nombre
min_reves(lower(primer_nombre))
de empleados;
19. Encuentra a los empleados que se unieron a la empresa después del 15 de
mes
seleccionar employee_id
concat(first_name, ' ', last_name) empleado,
fecha de contratación
de empleados
donde día(hire_date)> 15;
20. Mostrar los gerentes y los empleados que reportan que trabajan en
diferentes departamentos
seleccionar
concat(mgr.first_name,' ',mgr.last_name) gerente,
concat(emp.first_name,' ',emp.last_name) empleado,
mgr.department_id mgr_dept,
emp.departamento_id
de empleados emp
unir empleados mgr en emp.manager_id = mgr.employee_id
donde emp.department_id != mgr.department_id
ordenar por 1;
Fuente: [Link]