Bases de Datos Andrew Salcedo Olivera
PRÁCTICA #2: CONSULTAS SQL Y SOLUCIONES
1. ¿Cuál es el matrimonio con mayor diferencia de edad, y cuál es el que tiene la menor
diferencia de edad?
A) Matrimonio con mayor diferencia
SELECT M.NOMBRE_HOMBRE,
H.EDAD_HOMBRE,
M.NOMBRE_MUJER,
MU.EDAD_MUJER,
ABS(H.EDAD_HOMBRE - MU.EDAD_MUJER) AS DIFERENCIA_EDAD
FROM T_MATRIMONIOS M
JOIN T_HOMBRES H ON M.NOMBRE_HOMBRE = H.NOMBRE_HOMBRE
JOIN T_MUJERES MU ON M.NOMBRE_MUJER = MU.NOMBRE_MUJER
ORDER BY DIFERENCIA_EDAD DESC
LIMIT 1;
B) Matrimonio con menor diferencia:
SELECT
M.NOMBRE_HOMBRE,
M.NOMBRE_MUJER,
ABS(H1.EDAD_HOMBRE - H2.EDAD_MUJER) AS DIFERENCIA_EDAD
FROM
T_MATRIMONIOS M
INNER JOIN
T_HOMBRES H1 ON M.NOMBRE_HOMBRE = H1.NOMBRE_HOMBRE
INNER JOIN
T_MUJERES H2 ON M.NOMBRE_MUJER = H2.NOMBRE_MUJER
ORDER BY
DIFERENCIA_EDAD ASC
LIMIT 1;
Bases de Datos Andrew Salcedo Olivera
2. Nombre de los hombres a los que les caen bien las mujeres que empiezan por c y
están en un matrimonio
SELECT thc.NOMBRE_HOMBRE,
thc.NOMBRE_MUJER
FROM t_hombre_cae_simpatico thc, t_hombres th, t_mujeres tm
WHERE th.NOMBRE_HOMBRE = thc.NOMBRE_HOMBRE
AND tm.NOMBRE_MUJER = thc.NOMBRE_MUJER
AND thc.NOMBRE_MUJER LIKE 'C%' AND EXISTS (
SELECT
tmat.NOMBRE_MUJER
FROM t_matrimonios
tmat
WHERE
tmat.NOMBRE_MUJER=thc.NOMBRE_MUJER
GROUP BY thc.NOMBRE_HOMBRE, thc.NOMBRE_MUJER
3. Consulta que devuelve los nombres de las parejas en las que la mujer tiene más de
25 años
SELECT tmat.NOMBRE_HOMBRE 'HOMBRE',
tmat.NOMBRE_MUJER 'MUJER',
tm.EDAD_MUJER 'EDAD DE MUJER'
FROM t_matrimonios tmat, t_mujeres tm, t_hombres th
WHERE tmat.NOMBRE_HOMBRE = th.NOMBRE_HOMBRE
AND tmat.NOMBRE_MUJER = tm.NOMBRE_MUJER
AND tm.EDAD_MUJER > 25
Bases de Datos Andrew Salcedo Olivera
4. Averiguar el matrimonio mas longevo según la suma de las dos edades del
matrimonio
SELECT tmat.NOMBRE_HOMBRE,
tmat.NOMBRE_MUJER,
SUM(tm.EDAD_MUJER + th.EDAD_HOMBRE) AS SUMA
FROM t_matrimonios tmat, t_mujeres tm, t_hombres th
WHERE tmat.NOMBRE_HOMBRE = th.NOMBRE_HOMBRE
AND tmat.NOMBRE_MUJER = tm.NOMBRE_MUJER
GROUP BY tmat.NOMBRE_HOMBRE, tmat.NOMBRE_MUJER
HAVING SUMA >= ALL (
SELECT MAX(tm2.EDAD_MUJER + th2.EDAD_HOMBRE)
FROM t_matrimonios tmat2, t_mujeres tm2, t_hombres
th2
WHERE tmat2.NOMBRE_HOMBRE = th2.NOMBRE_HOMBRE
AND tmat2.NOMBRE_MUJER = tm2.NOMBRE_MUJER
GROUP BY tmat2.NOMBRE_HOMBRE, tmat2.NOMBRE_MUJER
5. Hallar la persona casa a la que gusten más personas
SELECT
tmat.NOMBRE_HOMBRE,
(SELECT COUNT(DISTINCT ths.NOMBRE_MUJER)
FROM t_hombre_cae_simpatico ths
WHERE ths.NOMBRE_HOMBRE = tmat.NOMBRE_HOMBRE) AS SUB_N_HOMBRES,
tmat.NOMBRE_MUJER 'PAREJA',
(SELECT COUNT(DISTINCT tms.NOMBRE_HOMBRE)
FROM t_mujer_cae_simpatica tms
WHERE tms.NOMBRE_MUJER = tmat.NOMBRE_MUJER) AS SUB_N_MUJERES
FROM t_matrimonios tmat
GROUP BY tmat.NOMBRE_HOMBRE, tmat.NOMBRE_MUJER
ORDER BY 4 DESC, 2 DESC
LIMIT 1
Bases de Datos Andrew Salcedo Olivera
6. Averiguar la mujer más popular que supere la media de la edad media de las mujeres
SELECT
T_MUJER_CAE_SIMPATICA.NOMBRE_MUJER,
COUNT(*) AS Total_Gustos
FROM
T_MUJER_CAE_SIMPATICA
JOIN
T_MUJERES ON T_MUJER_CAE_SIMPATICA.NOMBRE_MUJER =
T_MUJERES.NOMBRE_MUJER
WHERE
T_MUJERES.EDAD_MUJER > (SELECT AVG(EDAD_MUJER) FROM T_MUJERES)
GROUP BY
T_MUJER_CAE_SIMPATICA.NOMBRE_MUJER
ORDER BY
Total_Gustos DESC
LIMIT 1;