Diferència entre revisions de la pàgina «M2 - Bases de dades / Exercicis UF2: Llenguatges SQL / Solucions T7-1»

De wikiserver
Dreceres ràpides: navegació, cerca
(Es crea la pàgina amb «1.Empleats que tinguin algun empleat al seu càrrec (EXISTS). <pre> SELECT employee_id, first_name FROM employees e WHERE EXISTS ( …».)
 
 
(Hi ha 5 revisions intermèdies del mateix usuari que no es mostren)
Línia 1: Línia 1:
 +
'''ESQUEMA HR'''
 +
 
1.Empleats que tinguin algun empleat al seu càrrec (EXISTS).
 
1.Empleats que tinguin algun empleat al seu càrrec (EXISTS).
 
<pre>
 
<pre>
Línia 4: Línia 6:
 
           FROM employees e  
 
           FROM employees e  
 
           WHERE EXISTS (
 
           WHERE EXISTS (
                                          SELECT *
+
                        SELECT *
                                          FROM employees
+
                        FROM employees
                                          WHERE manager_id = e.employee_id);
+
                        WHERE manager_id = e.employee_id);
<pre>
+
</pre>
 +
 
 
2.Departaments que no tinguin empleats (NOT EXISTS).
 
2.Departaments que no tinguin empleats (NOT EXISTS).
 
<pre>
 
<pre>
Línia 13: Línia 16:
 
             FROM departments dept  
 
             FROM departments dept  
 
             WHERE NOT EXISTS (
 
             WHERE NOT EXISTS (
                            SELECT *
+
                              SELECT *
 
                               FROM employees
 
                               FROM employees
 
                               WHERE employees.department_id = dept.department_id);
 
                               WHERE employees.department_id = dept.department_id);
 +
</pre>
  
 
3.Empleats que no tenen cap empleat al seu càrrec (NOT EXISTS).
 
3.Empleats que no tenen cap empleat al seu càrrec (NOT EXISTS).
 
+
<pre>
 
           SELECT employee_id, first_name
 
           SELECT employee_id, first_name
 
           FROM employees e  
 
           FROM employees e  
 
           WHERE  NOT EXISTS (
 
           WHERE  NOT EXISTS (
                                          SELECT *
+
                              SELECT *
                                          FROM employees
+
                              FROM employees
                                          WHERE manager_id = e.employee_id);
+
                              WHERE manager_id = e.employee_id);
 
              
 
              
 
+
</pre>
 
4.Cognoms dels empleats que tinguin un o més companys de feina en els seus departaments amb dates de contractació posteriors però salaris més alts (EXISTS).
 
4.Cognoms dels empleats que tinguin un o més companys de feina en els seus departaments amb dates de contractació posteriors però salaris més alts (EXISTS).
 
+
<pre>
 
           SELECT last_name
 
           SELECT last_name
 
           FROM employees e1  
 
           FROM employees e1  
Línia 37: Línia 41:
 
                                         e2.salary > e1.salary AND
 
                                         e2.salary > e1.salary AND
 
                                         e2.department_id = e1.department_id);
 
                                         e2.department_id = e1.department_id);
 +
</pre>
  
 
5.Mostreu l'identificador dels empleats i l'identificador de totes les feines que han tingut (UNION).
 
5.Mostreu l'identificador dels empleats i l'identificador de totes les feines que han tingut (UNION).
 
+
<pre>
 
           SELECT employee_id, job_id
 
           SELECT employee_id, job_id
 
           FROM employees
 
           FROM employees
Línia 46: Línia 51:
 
           FROM job_history
 
           FROM job_history
 
           ORDER BY employee_id;
 
           ORDER BY employee_id;
 
+
</pre>
 
6.El mateix que la 5, però considerant també el departament on han desenvolupat les feines (UNION).
 
6.El mateix que la 5, però considerant també el departament on han desenvolupat les feines (UNION).
 
+
<pre>
 
           SELECT employee_id, job_id, department_id
 
           SELECT employee_id, job_id, department_id
 
           FROM employees
 
           FROM employees
Línia 54: Línia 59:
 
           SELECT employee_id, job_id, department_id
 
           SELECT employee_id, job_id, department_id
 
           FROM job_history;
 
           FROM job_history;
 
+
</pre>
 
7.Mostreu l'identificador dels empleats i l'identificador de totes les feines que han tingut en cada departament (UNION ALL).
 
7.Mostreu l'identificador dels empleats i l'identificador de totes les feines que han tingut en cada departament (UNION ALL).
     
+
<pre>     
 
           SELECT employee_id, job_id
 
           SELECT employee_id, job_id
 
           FROM employees
 
           FROM employees
Línia 62: Línia 67:
 
           SELECT employee_id, job_id
 
           SELECT employee_id, job_id
 
           FROM job_history;
 
           FROM job_history;
 +
</pre>
  
 
8.Mostreu els identificadors dels empleats i del càrrec dels empleats que actualment tinguin un càrrec que varen ocupar en un altre període en la companyia (INTERSECT).  
 
8.Mostreu els identificadors dels empleats i del càrrec dels empleats que actualment tinguin un càrrec que varen ocupar en un altre període en la companyia (INTERSECT).  
 
+
<pre>
SELECT employee_id, job_id
+
  SELECT employee_id, job_id
 
           FROM employees
 
           FROM employees
 
           INTERSECT
 
           INTERSECT
 
           SELECT employee_id, job_id
 
           SELECT employee_id, job_id
 
           FROM job_history;
 
           FROM job_history;
 
+
</pre>
 
9.Igual que la 8, però considerant també el departament on han treballat (INTERSECT).
 
9.Igual que la 8, però considerant també el departament on han treballat (INTERSECT).
 
+
<pre>
SELECT employee_id, job_id, department_id
+
  SELECT employee_id, job_id, department_id
 
           FROM employees
 
           FROM employees
 
           INTERSECT
 
           INTERSECT
 
           SELECT employee_id, job_id, department_id
 
           SELECT employee_id, job_id, department_id
 
           FROM job_history;
 
           FROM job_history;
 
+
</pre>
 
10.Mostreu els identificadors dels empleats i del càrrec dels empleats que no han canviat mai de càrrec (MINUS).  
 
10.Mostreu els identificadors dels empleats i del càrrec dels empleats que no han canviat mai de càrrec (MINUS).  
 
+
<pre>
 
No és pot fer directament amb el MINUS!. El que si podem fer és mostrar només  els identificadors dels empleats.
 
No és pot fer directament amb el MINUS!. El que si podem fer és mostrar només  els identificadors dels empleats.
  
SELECT employee_id
+
  SELECT employee_id
 
           FROM employees
 
           FROM employees
 
           MINUS
 
           MINUS
 
           SELECT employee_id
 
           SELECT employee_id
 
           FROM job_history;
 
           FROM job_history;
 
+
</pre>
  
 
11.Mostreu els identificadors dels departaments per a departaments que no continguin l'ID de càrrec ST_CLERK (MINUS).
 
11.Mostreu els identificadors dels departaments per a departaments que no continguin l'ID de càrrec ST_CLERK (MINUS).
 
+
<pre>
SELECT department_id
+
  SELECT department_id
 
           FROM departments
 
           FROM departments
 
           MINUS
 
           MINUS
 
           SELECT department_id
 
           SELECT department_id
 
           FROM employees
 
           FROM employees
WHERE job_id ='ST_CLERK';
+
  WHERE job_id ='ST_CLERK';
 
+
</pre>
 
 
 
12.Mostreu l'identificador de país i el nom dels països que no tenen departaments ubicats en ells (MINUS).
 
12.Mostreu l'identificador de país i el nom dels països que no tenen departaments ubicats en ells (MINUS).
  
SELECT country_id, country_name
+
<pre>
 +
    SELECT country_id, country_name
 +
            FROM countries
 +
            MINUS
 +
            SELECT country_id, c.country_name
 +
            FROM departments d NATURAL JOIN locations l NATURAL JOIN countries c;           
 +
</pre>
 +
<!--
 +
<pre>
 +
    SELECT country_id, country_name
 
             FROM countries
 
             FROM countries
 
             MINUS
 
             MINUS
Línia 108: Línia 122:
 
             FROM departments d, locations l, countries c
 
             FROM departments d, locations l, countries c
 
             WHERE d.location_id = l.location_id AND l.country_id = c.country_id;
 
             WHERE d.location_id = l.location_id AND l.country_id = c.country_id;
 
+
</pre>
 +
-->
 
13.Mostreu els identificadors dels departaments i dels càrrecs dels departaments 10, 50 i 20 (UNION).
 
13.Mostreu els identificadors dels departaments i dels càrrecs dels departaments 10, 50 i 20 (UNION).
 
+
<pre>
 +
          SELECT department_id, job_id
 +
          FROM employees
 +
          WHERE department_id = 10
 +
          UNION
 +
          SELECT department_id, job_id
 +
          FROM employees
 +
          WHERE department_id = 20
 +
          UNION
 
           SELECT department_id, job_id
 
           SELECT department_id, job_id
FROM employees
+
          FROM employees
WHERE department_id = 10
+
          WHERE department_id = 50;
UNION
+
</pre>
SELECT department_id, job_id
+
<!---->
FROM employees
 
WHERE department_id = 20
 
UNION
 
SELECT department_id, job_id
 
FROM employees
 
WHERE department_id = 50;
 

Revisió de 11:45, 16 nov 2022

ESQUEMA HR

1.Empleats que tinguin algun empleat al seu càrrec (EXISTS).

           SELECT employee_id, first_name
           FROM employees e 
           WHERE EXISTS (
                         SELECT *
                         FROM employees
                         WHERE manager_id = e.employee_id);

2.Departaments que no tinguin empleats (NOT EXISTS).

            SELECT department_name
            FROM departments dept 
            WHERE NOT EXISTS (
                              SELECT *
                              FROM employees
                              WHERE employees.department_id = dept.department_id);

3.Empleats que no tenen cap empleat al seu càrrec (NOT EXISTS).

           SELECT employee_id, first_name
           FROM employees e 
           WHERE  NOT EXISTS (
                               SELECT *
                               FROM employees
                               WHERE manager_id = e.employee_id);
            

4.Cognoms dels empleats que tinguin un o més companys de feina en els seus departaments amb dates de contractació posteriors però salaris més alts (EXISTS).

           SELECT last_name
           FROM employees e1 
           WHERE EXISTS (
                         SELECT *
                         FROM employees e2
                         WHERE e2.hire_date > e1.hire_date AND
                                         e2.salary > e1.salary AND
                                         e2.department_id = e1.department_id);

5.Mostreu l'identificador dels empleats i l'identificador de totes les feines que han tingut (UNION).

           SELECT employee_id, job_id
           FROM employees
           UNION
           SELECT employee_id, job_id
           FROM job_history
           ORDER BY employee_id;

6.El mateix que la 5, però considerant també el departament on han desenvolupat les feines (UNION).

           SELECT employee_id, job_id, department_id
           FROM employees
           UNION
           SELECT employee_id, job_id, department_id
           FROM job_history;

7.Mostreu l'identificador dels empleats i l'identificador de totes les feines que han tingut en cada departament (UNION ALL).

      
           SELECT employee_id, job_id
           FROM employees
           UNION ALL
           SELECT employee_id, job_id
           FROM job_history;

8.Mostreu els identificadors dels empleats i del càrrec dels empleats que actualment tinguin un càrrec que varen ocupar en un altre període en la companyia (INTERSECT).

	   SELECT employee_id, job_id
           FROM employees
           INTERSECT
           SELECT employee_id, job_id
           FROM job_history;

9.Igual que la 8, però considerant també el departament on han treballat (INTERSECT).

	   SELECT employee_id, job_id, department_id
           FROM employees
           INTERSECT
           SELECT employee_id, job_id, department_id
           FROM job_history;

10.Mostreu els identificadors dels empleats i del càrrec dels empleats que no han canviat mai de càrrec (MINUS).

	No és pot fer directament amb el MINUS!. El que si podem fer és mostrar només  els identificadors dels empleats.

	   SELECT employee_id
           FROM employees
           MINUS
           SELECT employee_id
           FROM job_history;

11.Mostreu els identificadors dels departaments per a departaments que no continguin l'ID de càrrec ST_CLERK (MINUS).

	   SELECT department_id
           FROM departments
           MINUS
           SELECT department_id
           FROM employees
 	   WHERE job_id ='ST_CLERK';

12.Mostreu l'identificador de país i el nom dels països que no tenen departaments ubicats en ells (MINUS).

	    SELECT country_id, country_name
            FROM countries
            MINUS
            SELECT country_id, c.country_name
            FROM departments d NATURAL JOIN locations l NATURAL JOIN countries c;            

13.Mostreu els identificadors dels departaments i dels càrrecs dels departaments 10, 50 i 20 (UNION).

           SELECT department_id, job_id
           FROM employees
           WHERE department_id = 10
           UNION
           SELECT department_id, job_id
           FROM employees
           WHERE department_id = 20
           UNION
           SELECT department_id, job_id
           FROM employees
           WHERE department_id = 50;