Ejercicios SQL - Consultas #4 - Multitablas en empleados y departamentos (MySQL)
Vložit
- čas přidán 5. 09. 2024
- - ¿Necesitas que sea tu tutor personal? www.discodurod...
- Consigue cupones de descuento de mis cursos de udemy: cupones.discod...
- Sigue mis próximos eventos: eventos.discod...
- Visita nuestra web: www.discodurode...
- ¿Necesitas un servidor de calidad? Webempresa te lo da. clientes.webem...
- ¿Quieres seguir nuestros trabajos? Visita nuestro github. github.com/Dis...
- ¡Sé nuestro patrón! / discoduroderoer
- Síguenos en las redes sociales:
- Facebook: goo.gl/JcLshS
- Twitter: goo.gl/MU2Gbo
- Google+: goo.gl/8U8aXt
- CZcams: goo.gl/5vjkGP o suscribete
- Discord: / discord
- Twitch: / discoduroderoer_prog
- Si quieres contactar con nosotros para alguna consulta o enviarnos ejercicios: administrador@discoduroderoer.es
- Enunciado:
20. Obtener el nombre y el departamento de los empleados con cargo 'Secretaria' o 'Vendedor', que
no trabajan en el departamento de “PRODUCCION”, cuyo salario es superior a $1.000.000,
ordenados por fecha de incorporación.
21. Obtener información de los empleados cuyo nombre tiene exactamente 11 caracteres
22. Obtener información de los empleados cuyo nombre tiene al menos 11 caracteres
23. Listar los datos de los empleados cuyo nombre inicia por la letra 'M', su salario es mayor a $800.000
o reciben comisión y trabajan para el departamento de 'VENTAS'
24. Obtener los nombres, salarios y comisiones de los empleados que reciben un salario situado entre la
mitad de la comisión la propia comisión
- Descarga de los proyectos y enunciados: github.com/Dis...
- Recopilación de descargas de los videos de youtube: www.discodurod...
Muy buenas, estoy estudiando base de datos y me estoy repasando todos tus ejercicios y el número 20 a parte de que se te olvidó ejecutarlo, estaría mal, porque no sale ningún dato, aquí le dejo mi solución. Muchas gracias por los ejercicios me están sirviendo, eso que son un poco antiguos estos vídeos jejejej Un saludo :D
/*20. Obtener el nombre y el departamento de los empleados con cargo 'Secretaria' o 'Vendedor',
que no trabajan en el departamento de “PRODUCCION”, cuyo salario es superior a $1.000.000,
ordenados por fecha de incorporación.*/
SELECT e.nomEmp, d.nombreDpto, e.cargoE, e.salEmp, e.fecIncorporacion
from empleados e, departamentos d
where e.codDepto=d.codDepto and lower(e.cargoE) in ('secretaria','vendedor')
and lower(d.nombreDpto) not in ('producción')
and e.salEmp > '1000000'
order by fecIncorporacion;
Tienes razón, pero me da sin datos porque puse el and en lo de vendedor y secretaria, cuando deberia poner un (lower(e.cargoE)=''secretaria' or lower(e.cargoE)='vendedor'). Te fijo el comentario
select nomEmp, codDepto, fecIncorporacion from empleados where cargoE in('Vendedor','Secretaria') and codDepto 1500 and salEmp > 1000000 order by fecIncorporacion; ASI LO HICE YO.
Exacto. Yo lo probé y tampoco
2024 y sigo aprendiendo de estos videos, gracias
en el ejercicio 22 dice "al menos" no "menos". Lo que significa que seria >= porque te estaría dando un mínimo de caracteres
muchas gracias men, tenia dudas
Explicación muchísimo mejor que en la FP. Bravo!
En el ejercicio 21 también funciona la siguiente sentencia: SELECT nomEmp FROM EMPLEADOS WHERE nomEmp LIKE ("___________") . Saludos y gracias por los ejercicios.
select * from empleados e , departamentos d where e.codDepto=d.codDepto and lower(nomEmp) like ('m%')
and (salEmp > 800000 or comisionE > 0) and lower(d.nombreDpto)='ventas';
tengo una duda. Si tengo varias consultas guardadas (01_filtrar,02_crear,03_actualizar,04_crear_tabla_1,05_crear_tabla_2 y asi, etc.
Como puedo ejecutar de forma secuencial la tabla en Mysql cuando tenga las bases nuevas? pregunto, por que es un proceso que se debe correr a diario y con nuevos datos, pero con la misma estructura. O tendré que enlazar con algún ETL o similar?
Gracias de antemano.
Están de luuuuuuujoooooooooo
Saludos. Excelentes videos tutoriales. Soy un principiante del lenguaje SQL. y necedito ayuda, para crear una tabla. Tengo 3 tablas y cada tabla tiene 8 columnas, de las cuales quiero tomar los datos de solo 6 columnas, y esas luego sumarlos y que me genere una nueva tabla con el resultado de esa union o suma. Los datos son numericos, osea se puede sumar. Y que cumpla la condicion de sumarse, solo si la Columna 7 tenga el mismo valor en las 3 tablas.
en el ejercicio 23 es = 'ventas', y lo pusiste distinto
hola! esto se podria resolver con las funciones join?
se le sale un fantasma en el minuto 7:34
15:21 también
En la intersección de los datos seria correcto utilizar un INNER JOIN para ciflar?
osea lo pondria en el from
SELECT e.nombreEmp, d.nombreDpto
from empleados e INNER JOIN on departamentos d e.codDepto=d.codDepto
WHERE (e.cargoE='secretaria') OR (e.cargoE='vendedor') NOT (d.nombreDpto='producción') AND (e.salEmp > '1000000') ORDER BY e.fecIncorporacion
buenas, despues de un buen rato entendi que el problema del primer ejercicio es que le estamos diciendo a la base de datos que tiene dos cargos (vendedor y secretaria) y como ningun empleado tiene esa condición no trae nada, de todas maneras buscandole la vuelta aprendi a hacerlo igual que vos, me quedo asi:
select e.nomemp as 'Nombre', d.nombreDpto as 'Departamento'
from empleados e
inner join departamentos d
on e.codDepto=d.codDepto
where lower(cargoE)='vendedor' or lower(cargoE)='secretaria'
and lower(d.nombreDpto)'producción'
and salEmp>1000000
order by e.fecIncorporacion
saludos.
Un fantasma detrás en el minuto 19:17
En el ejercicio 20 pone secretaria o vendedor. Si pones AND, no tendría que cumplir las dos cosas? Lo cual creo que es imposible
Tienes razón es un or
Exacto. Yo lo probé con un OR , q sería lo mas logico. Pero tampoco me sale. Al final me decidí por la opcion que dieron mas arriba
El 4o tambien está mal. Dice que sí trabajan para ventas y pones que no trabajan para ventas
select * from empleados e join departamentos d
on d.codDepto = e.codDepto
where (upper(e.nomEmp) like ("M%")) and (e.salEmp > 800000) or (e.comisionE > 0) and
(upper(d.nombreDpto) like ("VENTAS"));
consulta nº20: (desde XAMP>mysql)
SELECT e.nomEmp, d.nombreDpto, e.cargoE, e.salEmp, e.fecIncorporacion
from empleados e, departamentos d
WHERE e.codDepto=d.codDepto AND e.cargoE='Vendedor' OR e.cargoE='Secretaria' AND d.nombreDpto NOT IN ('PRODUCCIÓN')
ORDER BY e.fecIncorporacion;
SELECT e.nomEmp, d.nombreDpto, e.cargoE, e.salEmp, e.fecIncorporacion from empleados e, departamentos d WHERE e.codDepto=d.codDepto AND e.cargoE='Vendedor' OR e.cargoE='Secretaria' AND d.nombreDpto NOT IN ('PRODUCCIÓN') AND e.salEmp > 1000000 ORDER BY e.fecIncorporacion; (falto añadir el salario superior a un millon)
gracias
soy nuevo con esto y no pude entender muy bien lo de enlazar las tablas con un mismo campo
Piensa que estas "uniendo" dos tablas, pero para ello tienen que tener algo en común, que en este caso es el campo
Para eso s eusan las llaves foranes para llamar columnas de tablas diferentes pero lo unico que las enlaza es esa llave foranea
First query is wrong
This is correct one:
select e.nomemp, d.nombreDpto
from empleados e, departamentos d
where e.codDepto=d.codDepto and (lower(e.cargoE)='secretaria' OR lower(e.cargoE)='vendedor')
and e.salEmp > 1000000 AND lower(d.nombreDpto)'producción'
order by e.fecIncorporacion
Ayuda como me puedes ayudar
donde puedo descargar tu base de datos que utilizas para los ejercicios, muchas gracias
En la descripción
SELECT * FROM empleados
WHERE nomEmp LIKE '___________';
OTRA FORMA DEL PUNTO 21, usando LIKE también puede pedírsele que busque una letra entre 5 caracteres ejemplo (LIKE '---u--')
20. Obtener el nombre y el departamento de los empleados con cargo 'Secretaria' o 'Vendedor', que
no trabajan en el departamento de “PRODUCCION”, cuyo salario es superior a $1.000.000,
ordenados por fecha de incorporación.*/
select e.cargoE as Cargo, e.nomEmp as Empleado, d.nombreDpto as Departamento, e.salEmp as Salario, e.fecIncorporacion as Ingreso
from empleados e join departamentos d
on d.codDepto = e.codDepto
where d.codDepto = e.codDepto and (lower(e.cargoE) = "secretaria" or lower(e.cargoE) = "vendedor") and ((lower(d.codDepto) not like ('15%'))) and (e.salEmp > "1000000")
order by e.fecIncorporacion;