330 likes | 486 Views
OPERACIONES DE RECUPERACIÓN. Obtener los codigos y la situacion de aquellos suministradores que esten en Las Palmas. SELECT sn, situacion FROM s WHERE ciudad=‘Las Palmas’;. 1 RECUPERACIÓN SIMPLE. Obtener el codigo de partes de cada parte suministrada. SELECT pn FROM sp;.
E N D
OPERACIONES DE RECUPERACIÓN. Obtener los codigos y la situacion de aquellos suministradores que esten en Las Palmas. SELECT sn, situacion FROM s WHERE ciudad=‘Las Palmas’;
1 RECUPERACIÓN SIMPLE. Obtener el codigo de partes de cada parte suministrada. SELECT pn FROM sp;
2.1 RECUPERACIÓN SIMPLE. Obtener los codigos de las partes suministradas. SELECT DISTINCT pn FROM sp;
2.2 RECUPERACIÓN SIMPLE. Obtener los detalles completos de todos los suministradores. SELECT sn, snombre, situacion, ciudad FROM s; ../.. SELECT * FROM s;
2.3 RECUPERACIÓN CUALIFICADA. Obtener los codigos de los suministradores en Las Palmas con situacion mayor que 20. SELECT sn FROM s WHERE ciudad=‘Las Palmas’ AND situacion>20;
2.4 RECUPERACIÓN CON ORDENACIÓN. Obtener el codigo y la situacion de los suministradores de Las Palmas, en orden descendente de situacion. SELECT sn, situacion FROM s WHERE ciudad=‘Las Palmas’ ORDERBY situacion DESC;
2.5 RECUPERACIÓN DESDE MÁS DE UNA TABLA. Obtener, para cada parte suministrada, el codigo de parte y los nombres de las ciudades que suministran la parte. SELECT DISTINCT pn, ciudad FROM sp, s WHERE sp.sn=s.sn;
2.6 RECUPERACIÓN IMPLICANDO EL JOIN DE UNA TABLA CONSIGO MISMA. Obtener todos los pares de codigos de suministradores de froma que dos de ellos esten localizados en la misma ciudad. SELECT sX.sn sY.sn FROM s sX, s sY WHERE sX.ciudad=sY.ciudad AND sX.sn<sY.sn;
2.7 RECUPERACIÓN USANDO ANY. Obtener los nombres de los suministradores que suministran la parte ‘P2’. SELECT DISTINCT snombre FROM s, sp WHERE s.sn=sp.sn AND sp.pn=‘P2’; ../.. SELECT snombre FROM s WHERE sn = ANY (SELECT sn FROM sp WHERE pn=‘P2’);
2.8 RECUPERACIÓN USANDO <ANY. Obtener los codigos de los suministradores que tengan un valor de situacion menor que el maximo valor de situacion de la tabla s. SELECT sn FROM s WHERE situacion < ANY (SELECT situacion FROM s);
2.9 RECUPERACIÓN USANDO IN. Obtener los nombres de los suministradores que suministran la parte ‘P2’. SELECT snombre FROM s WHERE sn IN (SELECT sn FROM sp WHERE pn=‘P2’); SELECT DISTINCT snombre FROM s, sp WHERE s.sn=sp.sn AND sp.pn=‘P2’; ../..
2.10 RECUPERACIÓN CON MULTIPLES NIVELES DE ANIDAMIENTO. Obtener los nombres de los suministradores que suministran, al menos, una parte roja. SELECT snombre FROM s WHERE sn IN (SELECT sn FROM sp WHERE pn IN (SELECT pn FROM p WHERE color=‘rojo’));
2.11 RECUPERACIÓN CON SUBQUERY, CON REFERENCIA ENTRE BLOQUES. Obtener los nombres de los suministradores que suministran la parte ‘P2’. SELECT snombre FROM s WHERE sn IN (SELECT sn FROM sp WHERE pn=‘P2’); ../.. SELECT DISTINCT snombre FROM s, sp WHERE s.sn=sp.sn AND sp.pn=‘P2’; ../.. SELECT snombre FROM s WHERE ‘P2’ IN (SELECT pn FROM sp WHERE sn=s.sn);
2.12 RECUPERACIÓN CON SUBQUERY, CON LA MISMA TABLA IMPLICADA EN AMBOS BLOQUES. Obtener los códigos de los suministradores que suministren al menos una parte suministrada por ‘S2’. SELECT DISTINCT sn FROM sp WHERE pn IN (SELECT pn FROM sp WHERE sn=‘S2’);
2.13 RECUPERACIÓN CON SUBQUERY, CON REFERENCIA ENTRE BLOQUES Y LA MISMA TABLA IMPLICADA EN AMBOS BLOQUES. Obtener los codigos de las partes suministradas por mas de un suministrador. SELECT DISTINCT pn FROM sp spX WHERE pn IN (SELECT pn FROM sp WHERE sn <> spX.sn);
2.14 RECUPERACIÓN USANDO ALL. Obtener los nombres de los suministradores que NO suministran la parte ‘P2’. SELECT snombre FROM s WHERE ‘P2’ <> ALL (SELECT pn FROM sp WHERE sn=s.sn);
2.15 RECUPERACIÓN CON SUBQUERY Y OPERADOR DE COMPARACIÓN SIN CUALIFICAR. Obtener los codigos de los suministradores que están en la misma ciudad que el suministrador con codigo ‘S1’. SELECT sn FROM s WHERE ciudad = (SELECT ciudad FROM s WHERE sn=‘S1’);
2.16 RECUPERACIÓN USANDO EXISTS. Obtener los nombres de los suministradores que suministran la parte ‘P2’. SELECT snombre FROM s WHERE sn IN (SELECT sn FROM sp WHERE pn=‘P2’); ../.. SELECT DISTINCT snombre FROM s, sp WHERE s.sn=sp.sn AND sp.pn=‘P2’; ../.. SELECT snombre FROM s WHERE ‘P2’ IN (SELECT pn FROM sp WHERE sn=s.sn); ../.. SELECT snombre FROM s WHERE EXISTS (SELECT * FROM sp WHERE sn=s.sn AND pn=‘P2’);
2.17 RECUPERACIÓN USANDO NOT EXISTS. Obtener los nombres de los suministradores que NO suministran la parte ‘P2’. SELECT snombre FROM s WHERE NOT EXISTS (SELECT * FROM sp WHERE sn=s.sn AND pn=‘P2’); SELECT snombre FROM s WHERE ‘P2’ <> ALL (SELECT pn FROM sp WHERE sn=s.sn); ../..
2.18 RECUPERACIÓN USANDO NOT EXISTS. Obtener los nombres de los suministradores que suministran todas las partes. SELECT snombre FROM s WHERE NOT EXISTS (SELECT * FROM p WHERE NOT EXISTS (SELECT * FROM sp WHERE sn = s.sn AND pn=p.pn));
2.19 RECUPERACION USANDO NOT EXISTS. Obtener los codigos de los suministradores que suministran al menos todas las partes suministradas por el suministrador con codigo ‘S2’. SELECT DISTINCT sn FROM sp spX WHERE NOT EXISTS (SELECT * FROM sp spY WHERE sn=‘S2’ AND NOT EXISTS (SELECT * FROM sp WHERE sn=spX.sn AND pn=spY.pn)); (esta solución pasaría por la creación previa de una tabla ‘temp’, en la que sólo estarían los códigos de las partes suministradas por ‘S2’) SELECT DISTINCT sn FROM sp spX WHERE NOT EXISTS (SELECT * FROM temp WHERE NOT EXISTS (SELECT * FROM sp WHERE sn=spX.sn AND pn=temp.pn)); ..\..
2.20 RECUPERACION USANDO UNION. Obtener los codigos de las partes que o bien pesan mas de 18 kilos o bien son suministradas por ‘S2’ (o ambas cosas a la vez). SELECT pn FROM p WHERE peso > 18 UNION SELECT pn FROM sp WHERE sn=‘S2’;
2.21 RECUPERACION DE VALORES CALCULADOS. Obtener los codigos de parte y el peso en gramos de cada una de las partes. Los pesos de la tabla p estan en kilogramos. SELECT pn, peso*1000 FROM p;
2.22a RECUPERACION IMPLICANDO NULL. Obtener los codigos de los suministradores con un valor de situacion mayor de 30. SELECT sn FROM s WHERE situacion > 30;
2.22b RECUPERACION IMPLICANDO NULL. Obtener los codigos de los suministradores con un valor de situacion mayor de 30 o es nulo. SELECT sn FROM s WHERE situacion > 30 OR situacion ISNULL;
3.1 FUNCION COUNT EN LA CLAUSULA SELECT. Obtener el numero total de suministradores. SELECT COUNT (*) FROM s;
3.2 FUNCION COUNT EN LA CLAUSULA SELECT. Obtener el numero total de suministradores que suministren realmente alguna parte. SELECT COUNT (DISTINCT sn) FROM sp;
3.3 FUNCION COUNT EN LA CLAUSULA SELECT CON UN PREDICADO. Obtener el numero de ventas de la parte ‘P2’. SELECT COUNT (*) FROM sp WHERE pn=‘P2’;
3.4 FUNCION SUM EN LA CLAUSULA SELECT CON UN PREDICADO. Obtener la cantidad total suministrada de la parte ‘P2’. SELECT SUM(cantidad) FROM sp WHERE pn=‘P2’;
3.5 FUNCION MAX EN UN SUBQUERY. Obtener los códigos de los suministradores con situacion menor que el maximo valor de situacion de la tabla s. SELECT sn FROM s WHERE situacion < (SELECT MAX(situacion) FROM s);
3.6 USO DE GROUP BY. Obtener para cada parte suministrada el codigo de parte y el total de la cantidad suministrada. SELECT pn, SUM(cantidad) FROM sp GROUPBY pn;
3.7 USO DE GROUP BY CON HAVING. Obtener los codigos de las partes suministradas por mas de un suministrador. SELECT DISTINCT pn FROM sp spX WHERE pn IN (SELECT pn FROM sp WHERE sn <> spX.sn); ../.. SELECT pn FROM sp GROUP BY pn HAVING COUNT (*) > 1;
3.8 EJEMPLO RESUMEN. Obtener el codigo de parte y la cantidad maxima suministrada de esa parte para todas las partes tales que la cantidad suministrada es mayor a 300 (excluyendo del total las ventas cuya cantidad sea menor o igual a 200), ordenando el resultado en orden descendente del codigo de parte dentro del orden ascendente de la cantidad maxima SELECT pn MAX(cantidad) FROM sp WHERE cantidad > 200 GROUP BY pn HAVING SUM(cantidad) > 300 ORDER BY 2, pn DESC;