Advertisement
Bunich

Lab2 - commenti

Apr 10th, 2018
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
SQL 4.28 KB | None | 0 0
  1. SELECT delivererid,name,initials
  2. FROM deliverers
  3. WHERE delivererid NOT IN (SELECT delivererid
  4.             FROM penalties);
  5. SELECT delivererid
  6. FROM deliverers
  7. WHERE delivererid IN (SELECT delivererid
  8.                       FROM penalties
  9.                       WHERE AMOUNT=25)
  10.       AND delivererid IN(SELECT delivererid /*10*/
  11.                           FROM penalties
  12.                           WHERE amount=30);
  13. SELECT d.delivererid, name
  14. FROM penalties p1, deliverers d
  15. WHERE p1.delivererid=d.delivererid
  16.       AND d.delivererid IN (SELECT delivererid
  17.                             FROM penalties p2
  18.                             WHERE p1.DATA=p2.DATA AND p1.paymentid <>p2.PAYMENTID);
  19. SELECT delivererid
  20. FROM companydel /*20*/
  21. GROUP BY delivererid
  22. HAVING COUNT(*)=(SELECT COUNT(*)
  23.                  FROM companies);      
  24. SELECT delivererid
  25. FROM companydel
  26. WHERE companyid IN (SELECT companyid
  27.                     FROM companydel
  28.                     WHERE delivererid=57)
  29.       AND delivererid<>57;
  30. /*30*/    
  31.  
  32. SELECT d.delivererid,name
  33. FROM penalties p, deliverers d
  34. WHERE p.delivererid=d.delivererid AND DATA >= TO_DATE('1980-01-01', 'YYYY-MM-DD') AND DATA <=TO_DATE('1980-12-31', 'YYYY-MM-DD')
  35. GROUP BY d.delivererid,name
  36. HAVING COUNT(*)>(SELECT COUNT(*)
  37.                  FROM penalties p2
  38.                  WHERE p2.delivererid=d.delivererid AND DATA >= TO_DATE('1981-01-01', 'YYYY-MM-DD') AND DATA <=TO_DATE('1981-12-31', 'YYYY-MM-DD'));
  39.  
  40. /*es. 7*/
  41. /*Function table*/
  42. SELECT delivererid                                                              /*40*/
  43. FROM penalties
  44. GROUP BY delivererid
  45. HAVING COUNT(*)= (SELECT MAX(cont)
  46.                   FROM (SELECT COUNT(*) cont
  47.                         FROM penalties
  48.                         GROUP BY delivererid));
  49.  
  50. /*es. 8*/
  51. /*Richiesta: tutti i deliverers che hanno consegnato in ALMENO le stesse aziende del delivere 57*/
  52. SELECT delivererid
  53. FROM companydel
  54. WHERE companyid IN(                 /*In questo punto sto filtrando solo le aziende in comune col deliverer 57. Potrebbero essere anche di più quelle in cui
  55.                                       il deliverer in questione effettua visite.
  56.                                       E' UN VINCOLO SUL DATO*/
  57.                   SELECT companyid
  58.                   FROM companydel
  59.                   WHERE delivererid=57)
  60.                  
  61.       AND delivererid <>57
  62. GROUP BY delivererid               /*La group by 'convalida' il filtro precedente mediante la COUNT(*) perchè le aziende in comune col deliverer 57 devono
  63.                                       essere tante quante le sue: sto escludendo quelli che hanno consegnato in aziende comuni al 57, ma in numero minore.
  64.                                       E' UN VINCOLO SUL NUMERO*/
  65. HAVING COUNT(*)=(SELECT COUNT(*)
  66.                 FROM companydel
  67.                 WHERE delivererid=57);
  68.                
  69. /*es. 9*/
  70. /*Richiesta: tutti i deliverers che hanno consegnato in ALMENO UNA azienda del deliverer 57, ma che NON HANNO consegnato in aziende diverse*/
  71. SELECT delivererid
  72. FROM companydel
  73. WHERE delivererid NOT IN( /*Cerco i deliverers che hanno consegnato in aziende diverse da quelle del 57 (e li escludo)*/
  74.                         SELECT delivererid
  75.                         FROM companydel
  76.                         WHERE companyid NOT IN(
  77.                                           SELECT companyid
  78.                                           FROM companydel
  79.                                           WHERE delivererid=57))
  80.       AND delivererid <>57;
  81.  
  82. /*es. 10*/
  83. /*Richiesta: tutti i deliverers che hanno consegnato in TUTTE le aziende del 57 e SOLO quelle*/
  84. SELECT delivererid
  85. FROM companydel
  86. WHERE delivererid NOT IN( /*Verifica sul 'SOLO'*/
  87.                     SELECT delivererid
  88.                     FROM companydel
  89.                     WHERE companyid NOT IN(
  90.                                       SELECT companyid
  91.                                       FROM companydel
  92.                                       WHERE delivererid=57))
  93.       AND delivererid <>57
  94. GROUP BY delivererid /*Mediante il COUNT rimuovo tutti i fattorini che hanno consegnato in meno aziende di 57, seppur comuni.
  95.                       Vincolo sul 'TUTTE'*/
  96. HAVING COUNT(*)=(SELECT COUNT(*)
  97.                 FROM companydel
  98.                 WHERE delivererid=57);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement