1.- Obtener los dueños que no tengan animales SELECT nombre_dueño FROM dueños WHERE NOT EXISTS(SELECT* FROM animales WHERE dueño_animal=dni_dueño) 2.- Numero de animales que tiene cada dueño SELECT nombre_dueño, COUNT(animales.cod_animal) as Num_animales FROM dueños, animales WHERE dni_dueño=dueño_animal GROUP BY nombre_dueño 3.- Lo mismo pero que salgan 0 en los dueños que no tiene animales SELECT nombre_dueño, COUNT(animales.cod_animal) as Num_animales FROM dueños left JOIN animales ON dni_dueño=dueño_animal GROUP BY nombre_dueño DESC 4.- El numero de animales que tiene cada dueño de cada tipo: SELECT nombre_dueño, tipo_animal, COUNT(animales.cod_animal) as Num_animales FROM dueños LEFT JOIN animales ON dni_dueño=dueño_animal GROUP BY dni_dueño, tipo_animal ORDER BY Num_animales Desc 5.- Todos los datos de los dueños que tengan perros y pajaros SELECT dueños.* FROM dueños INNER JOIN animales USING (dni_dueño) WHERE (tipo_animal='Perro') or (tipo_animal='pajaro') GROUP BY dni_dueño HAVING COUNT(DISTINCT tipo_animal)=2; 6.- Todos los datos de los dueños que tengan perros, pajaros y cangrejos SELECT dueños.* FROM dueños INNER JOIN animales USING (dni_dueño) WHERE (tipo_animal='Perro') or (tipo_animal='pajaro') or (tipo_animal='Cangrejo') GROUP BY dni_dueño HAVING COUNT(DISTINCT tipo_animal)=3; Ejercicio 1 unidadad 4 17.- SELECT apellido FROM `emple` WHERE salario+ifnull(comision,0)>2000 21.- SELECT apellido, salario, 12*salario AS salario_anual, 12*IFNULL(comision,0) AS comision_anual FROM `emple` WHERE dept_no=20 AND oficio IN('vendedor','analista') Ej2_unidad 4 1.- SELECT apellido, salario, oficio FROM `emple` WHERE salario IN(SELECT salario FROM emple WHERE apellido='jimenez') 2.3.- SELECT apellido, oficio FROM `emple` WHERE oficio not in(SELECT oficio FROM emple where apellido='fernandez') 4.- SELECT apellido FROM emple WHERE dept_no in(SELECT dept_no FROM depart WHERE d_nombre='ventas') 4.b.- SELECT e.apellido FROM emple e, depart d WHERE (e.dept_no=d.dept_no) and (d.d_nombre='ventas') 4.c.- SELECT e.apellido FROM emple e join depart d on (e.dept_no=d.dept_no) and (d.d_nombre='ventas') 4.d.- SELECT e.apellido FROM emple e natural join depart d WHERE(d.d_nombre='ventas') 5.- SELECT apellido FROM emple WHERE oficio in( SELECT oficio FROM emple WHERE dept_no=20) 5.b.- SELECT apellido FROM emple WHERE oficio in( SELECT oficio FROM emple WHERE dept_no in (SELECT dept_no FROM depart WHERE d_nombre='ventas')) 6.- SELECT apellido, dept_no FROM emple WHERE dept_no in(SELECT dept_no FROM depart WHERE loc='barcelona') 7.- SELECT apellido FROM emple WHERE dept_no in(SELECT dept_no FROM depart WHERE d_nombre='ventas' OR d_nombre='investigacion') 8.- SELECT * FROM emple WHERE salario >ANY(SELECT salario FROM emple WHERE apellido='arroyo') 9.10.- SELECT emple_no, apellido, oficio FROM emple WHERE dept_no=20 and dir in(SELECT emple_no FROM emple WHERE apellido='gil') 11.- SELECT * FROM emple WHERE (salario, oficio) in(SELECT salario, oficio FROM emple WHERE apellido='fernandez') Falta semana del 19 al 24 Ejercico 4 unidad 4 10.- SELECT dept_no, oficio, sum(salario) as suma_salario from emple GROUP BY dept_no, oficio 10b.- SELECT dept_no, oficio, sum(salario)+sum(ifnull(comision,0)) as suma_salario from emple GROUP BY dept_no, oficio 11.- SELECT dept_no, sum(salario) as suma_salario from emple GROUP BY dept_no HAVING SUM(salario) BETWEEN 6000 and 18000 12.- SELECT depart.dept_no, d_nombre, COUNT(emple_no) FROM depart, emple WHERE (depart.dept_no=emple.dept_no) GROUP BY dept_no HAVING COUNT(emple_no)>=4 (yo lo hice por subconsultas pero no lo copié, intentarlo, pero no podré sacar el count el el primer select pq es de otra tabla) 13.- SELECT depart.dept_no, d_nombre, loc from depart, emple WHERE (depart.dept_no=emple.dept_no) GROUP BY emple.dept_no having avg(salario)>=(SELECT avg(salario) FROM emple) 14.- SELECT depart.*, COUNT(emple.dept_no) AS NumEmple FROM depart NATURAL JOIN emple GROUP BY emple.dept_no HAVING COUNT(emple_no)>2 ORDER BY NumEmple DESC 15.- SELECT depart.*, oficio, COUNT(emple_no) FROM emple NATURAL JOIN depart GROUP BY emple.dept_no, oficio HAVING COUNT(emple_no)>2 16.- SELECT dept_no, AVG(salario) FROM emple GROUP BY dept_no HAVING AVG(salario) >= (SELECT MIN(salario) FROM emple) 17.- SELECT depart.d_nombre, emple.oficio, COUNT(emple.emple_no) FROM depart NATURAL JOIN emple WHERE oficio='vendedor'AND depart.d_nombre='ventas' 18.- SELECT d_nombre FROM emple NATURAL JOIN depart WHERE oficio='analista' GROUP BY emple.dept_no HAVING COUNT(dept_no)>1 18b.- sin where SELECT d_nombre FROM emple NATURAL JOIN depart GROUP BY emple.dept_no, oficio HAVING oficio='analista' AND COUNT(emple.dept_no)>1