1 / 17

Desarrollo de bases de datos

Desarrollo de bases de datos. SQL. Operaciones de conjuntos. UNION, INTERSECT, EXCEPT Compatibles con la unión *UNION: Todas las filas del primer operando y todas las del segundo sin permitir repeticiones.

yosefu
Download Presentation

Desarrollo de bases de datos

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Desarrollo de bases de datos SQL Ainhoa Álvarez

  2. Operaciones de conjuntos • UNION, INTERSECT, EXCEPT • Compatibles con la unión *UNION: Todas las filas del primer operando y todas las del segundo sin permitir repeticiones. *INTERSECT: Todas las filas que están tanto en un operando como en el otro, sin repeticiones. *EXCEPT(MINUS): Todas las filas del primer operando que no estén en el segundo.

  3. EXCEPT Empleados que no trabajan en ningún proyecto SELECT NOMBREP, APELLIDO FROM EMPLEADO EXCEPT SELECT NOMBREP, APELLIDO FROM (EMPLEADO INNER JOIN TRABAJA_EN ON NSS=NSSE);

  4. UNION • Números de proyecto donde participa Smith como trabajador o como gerente del dpto. controlador ( SELECT NUMEROP FROM PROYECTO, DEPARTAMENTO, EMPLEADO WHERE NÚMD=NÚMEROD AND NSS_JEFE=NSS AND APELLIDO=‘Smith’ UNION SELECT NUMEROP FROM PROYECTO, TRABAJA_EN, EMPLEADO WHERE NÚMEROP=NUMP AND NSSE=NSS AND APELLIDO=‘Smith’ );

  5. INTERSECT • Números de proyecto donde participa Smith como trabajador y como gerente del dpto. controlador ( SELECT NUMEROP FROM PROYECTO, DEPARTAMENTO, EMPLEADO WHERE NÚMD=NÚMEROD AND NSS_JEFE=NSS AND APELLIDO=‘Smith’ INTERSECT SELECT NUMEROP FROM PROYECTO, TRABAJA_EN, EMPLEADO WHERE NÚMEROP=NUMP AND NSSE=NSS AND APELLIDO=‘Smith’ );

  6. Predicados Cuantificados • Operadores de comparación = > < <= >= <> • ALL • SOME/ANY

  7. ALL Select s1 from t1 where s1>all (select s1 from t2) • Si s1=10 en t1 y en t2 tenemos (3,4,5) TRUE • Si s1=10 en t1 y en t2 tenemos (0,null,4) desconocido • Si s1=10 en t1 y en t2 tenemos vacío TRUE

  8. SOME/ANY Select s1 from t1 where s1>any (select s1 from t2) • Si s1=10 en t1 y en t2 tenemos (21,14,7) TRUE • Si s1=10 en t1 y en t2 tenemos (20,10) FALSE • Si s1=10 en t1 y en t2 tenemos vacío FALSE • Si s1=10 en t1 y en t2 tenemos null desconocido

  9. JEFES QUE NO TIENEN DEPENDIENTES select distinct nss_superv from empleado minus (select distinct nss_superv from empleado where nss_superv=some (select dependiente.nsse from dependiente where empleado.nss_superv=dependiente.nsse));

  10. IN / NOT IN • NOT IN es equivalente a <>ALL • Empleados que no trabajan en el proyecto 3 Select * from empleado where nss not in (select nss from trabaja_en where np=3)

  11. HAVING • Siempre ha de ir con group-by. Con el group by generamos unos grupos y el having lo que va a hacer será seleccionar entre los grupos que se han generado con cuales nos quedamos y con cuales no

  12. HAVING Cláusula que sirve para descartar grupos de filas. Se especifica escribiendo la palabra HAVING seguida de una condición. En la condición que sigue a la cláusula Having, se indican aquellas cosas que han de cumplirse para que cierto grupo se seleccione. Los grupos se determinan mediante cláusulas GROUP BY (antes del HAVING). Si no existe esta última, todas las filas estarán incluidas dentro de un único grupo.

  13. WHERE vs HAVING • Obtener por cada proyecto su número y nombre junto al número de empleados del departamento 5 que trabajan en él. SELECT NÚMEROP, NOMBREPR, COUNT(*) FROM (PROYECTO INNER JOIN TRABAJA_EN ON NÚMEROP=NÚMP) INNER JOIN EMPLEADO ON NSS=NSSE WHERE ND=5 GROUP BY NÚMEROP, NOMBREPR;

  14. Cuántos empleados hay con salario mayor que 30.000 por departamento. Sólo departamentos con más de 2 empleados con tal sueldo. SELECT NOMBRED, COUNT(*) FROM EMPLEADO INNER JOIN DEPARTAMENTO ON ND = NÚMEROD WHERE SALARIO>30.000 GROUP BY NOMBRED HAVING COUNT(*) > 2; Primero se ejecuta el where y luego el having

  15. JEFES CON MÁS DE DOS EMPLEADOS A SU CARGO select distinct nss_superv from empleado group by nss_superv having count(*)>2;

  16. WHERE vs HAVING • Obtener por cada proyecto su número y nombre junto al número de empleados del departamento 5 que trabajan para él. Select numerop, nombrep, count(*) From (proyecto inner join trabaja_en on numerop=np)inner join empleado on nss=nsse Where nd=5 Group by numerop, nombrep

  17. EXISTS • Empleados que no trabajan en ningún proyecto. Select * from empleado where Not exists(select * from TRABAJA_EN ON NSS=NSSE);

More Related