SlideShare a Scribd company logo
1 of 26
Download to read offline
Basi di Dati
                Basi di Dati

Interrogazioni complesse (I parte)
Basi di Dati – Dove ci troviamo?
Basi di Dati Dove ci troviamo?
                                                 A) Introduzione
                                                     1    2

     B) Prog Concettuale (ER)
     B) Prog. Concettuale (ER)                                     C) Modello Relazionale, 
                                                                    )                     ,
                                                                   Algebra relazionale, SQL

      1   2    3       4       5       6     7                  1      2   3    4    5    6     7

          D) Prog. Logica e                                    E) Tecnologia di un DBMS
          Normalizzazione

           1       2       3       4                               1   2    3    4    5     6


                                           F) Programmazione DB


                                                      1   2

2                                                              Basi Di Dati ‐ Interrogazioni complesse (I parte)
Classificazione delle interrogazioni complesse
Classificazione delle interrogazioni complesse
    Query con ordinamento
    Query con aggregazioni
    Query con raggruppamento
        y        gg pp
    Query binarie
    Query nidificate




3                              Basi Di Dati ‐ Interrogazioni complesse (I parte)
Esempio : gestione ordini 
Esempio : gestione ordini
cliente    COD-CLI NOME      INDIRIZZO P-IVA



ordine     COD-ORD COD-CLI DATA IMPORTO



dettaglio COD-ORD COD-PROD QTA


prodotto   COD-PROD NOME PREZZO

 4                             Basi Di Dati ‐ Interrogazioni complesse (I parte)
Istanza di ordine 
Istanza di ordine
    ordine
    COD-ORD COD-CLI DATA                IMPORTO
    1          3     2004-06-01
                     2004 06 01                50.000
                                               50 000
    2          4     2004-08-03                   8.000
    3          3     2004-09-01                   5.500
    4          1     2004-07-01                12.000
    5          1     2004-08-01                   1.500
    6          3     2004-09-03
                     2004 09 03                27.000
                                               27 000



5                          Basi Di Dati ‐ Interrogazioni complesse (I parte)
Query con ordinamento 
Query con ordinamento
SELECT  *  FROM ORDINE
WHERE IMPORTO < 100.000
ORDER BY DATA
    COD-ORD COD-CLI DATA                   IMPORTO
    1       3        2004-06-01
                     2004 06 01                   50.000
                                                  50 000
    4       1        2004-07-01                   12.000
    5       1        2004-08-01                      1.500
    2       4        2004-08-03                      8.000
    3       3        2004-09-01                      5.500
    6       3        2004-09-03
                     2004 09 03                   27.000
                                                  27 000
6                           Basi Di Dati ‐ Interrogazioni complesse (I parte)
Order by
Order by
SELECT  * FROM ORDINE
WHERE IMPORTO < 100.000 
ORDER BY COD‐CLI
     COD-ORD COD-CLI DATA                    IMPORTO
     4         1           2004-07-01
                           2004 07 01               12.000
                                                    12 000
     5         1           2004-08-01                  1.500
     1         3           2004-06-01               50.000
     6         3           2004-09-03                  5.500
     3         3           2004-09-01               27.000
     2         4           2004-08-03
                           2004 08 03                  8.000
                                                       8 000
7                              Basi Di Dati ‐ Interrogazioni complesse (I parte)
Order by
Order by
.......
ORDER BY COD‐CLI ASC, DATA DESC

     COD-ORD CO C DATA
     CO O    COD-CLI                             IMPORTO
     5          1         2004-08-01                      1.500
     4          1         2004-07-01                    12.000
     6          3         2004 09 03
                          2004-09-03                    27.000
     3          3         2004-09-01                      5.500
     1          3         2004-06-01
                          2004 06 01                    50.000
                                                        50 000
     2          4         2004-08-03                      8.000

 8                            Basi Di Dati ‐ Interrogazioni complesse (I parte)
Query aggregate 
Query aggregate
    Utilizzano le funzioni aggregate:
      SUM      sommatoria
      AVG       media
      MIN        minimo
      MAX       massimo
      COUNT  cardinalità


    I NULL sono esclusi




9                                       Basi Di Dati ‐ Interrogazioni complesse (I parte)
Query con massimo
Query con massimo
 Selezionare l’importo massimo degli ordini. 

SELECT MAX(IMPORTO) AS MAX‐IMP
          (       )
FROM ORDINE


                 MAX-IMP
                    50.000



10                                Basi Di Dati ‐ Interrogazioni complesse (I parte)
Query con sommatoria
Query con sommatoria
 Selezionare la somma degli importi degli ordini relativi al 
 cliente numero 1.

SELECT SUM(IMPORTO) AS SOMMA‐IMP
FROM ORDINE
WHERE COD‐CLIENTE = 1


                  SOMMA-IMP
                  13.500

11                                 Basi Di Dati ‐ Interrogazioni complesse (I parte)
Query con raggruppamento 
Query con raggruppamento
 si aggiungono le clausole:
     GROUP‐BY (raggruppamento)
     HAVING (selezione dei gruppi)


                 SELECT  …..
                 FROM …..
                 WHERE …..
                 WHERE …..
                 GROUPBY …..
                 HAVING …..



12                                   Basi Di Dati ‐ Interrogazioni complesse (I parte)
Query con raggruppamento 
Query con raggruppamento
 Attenzione! 
 Utilizzando GROUP BY il risultato della SELECT è ununico 
 record per ciascun gruppo.
 Pertanto in SELECT (e in HAVING) possono comparire 
 solo:
     Uno o più attributi del raggruppamento (i campi specificati 
     nella GROUP BY)
     Funzioni aggregate: tali funzioni vengono valutate, e quindi 
     forniscono un valore unico, per ciascun gruppo




13                                      Basi Di Dati ‐ Interrogazioni complesse (I parte)
Query con raggruppamento 
Query con raggruppamento
 Selezionare la somma degli importi degli ordini successivi 
 al 10‐6‐04 per quei clienti che hanno emesso almeno 2 
 ordini.

            SELECT  COD‐CLI,  SUM (IMPORTO) 
            FROM ORDINE
            WHERE DATA > 2004‐06‐10
            GROUP BY COD‐CLI
            HAVING COUNT (IMPORTO) >= 2
                    COUNT (IMPORTO)  >= 2



14                                Basi Di Dati ‐ Interrogazioni complesse (I parte)
Passo 1: Valutazione WHERE
Passo 1: Valutazione WHERE

     COD-ORD COD-CLI DATA                 IMPORTO
     2       4       2004 08 03
                     2004-08-03                     8.000
     3       3       2004-09-01                     5.500
     4       1       2004-07-01
                     2004 07 01                  12.000
                                                 12 000
     5       1       2004-08-01                     1.500
     6       3       2004-09-03                  27.000


         (WHERE DATA > 2004-06-10)

15                           Basi Di Dati ‐ Interrogazioni complesse (I parte)
Passo 2 : Raggruppamento
Passo 2 : Raggruppamento
 si valuta la clausola GROUP‐BY

     COD-ORD COD-CLI DATA                         IMPORTO
     4         1         2004-07-01                      12.000
     5         1         2004 08 01
                         2004-08-01                         1.500
                                                            1 500
     3         3         2004-09-01                         5.500
     6         3         2004-09-03
                         2004 09 03                      27.000
     2         4         2004-08-03                         8.000

           (GROUP BYCOD-CLI)

16                                Basi Di Dati ‐ Interrogazioni complesse (I parte)
Passo 3 : Calcolo degli aggregati 
Passo 3 : Calcolo degli aggregati
 si calcolano SUM (IMPORTO) e COUNT(IMPORTO) per 
 ciascun gruppo


      COD-CLI     SUM            COUNT
                  (IMPORTO)      (IMPORTO)
      1           13.500         2
      3           32.500
                  32 500         2
      4           8.000          1




17                            Basi Di Dati ‐ Interrogazioni complesse (I parte)
Passo 4 : Estrazione dei gruppi 
Passo 4 : Estrazione dei gruppi
 si valuta il predicato COUNT (IMPORTO) >=2


      COD-CLI      SUM            COUNT
                   (IMPORTO)      (IMPORTO)
      1            13.500
                   13 500         2
      3            32.500         2
      4            8.000          1




18                              Basi Di Dati ‐ Interrogazioni complesse (I parte)
Passo 5 : Produzione del risultato 
Passo 5 : Produzione del risultato


             COD-CLI    SUM
                        (IMPORTO)
             1          13.500
             3          32.500
                        32 500




19                           Basi Di Dati ‐ Interrogazioni complesse (I parte)
Doppio raggruppamento 
Doppio raggruppamento
 Selezionare la somma delle quantità dei dettagli degli 
 ordini emessi da ciascun cliente per ciascun prodotto, 
 purché la somma superi 50.

         SELECT COD‐CLI, COD‐PROD, SUM(QTA)
         FROM ORDINE AS O, DETTAGLIO AS D
         WHERE  O.COD‐ORD = D.COD‐ORD
         GROUP BY COD‐CLI, COD‐PROD
         HAVING SUM(QTA) > 50
         HAVING SUM(QTA) > 50



20                                Basi Di Dati ‐ Interrogazioni complesse (I parte)
Situazione dopo il join e il raggruppamento
Situazione dopo il join e il raggruppamento
         ordine       dettaglio

COD-CLI ORDINE. DETTAGLIO. COD-PROD QTA
        COD-ORD COD-ORD
1       3       3          1         30
                                                               gruppo 1,1
1          4      4        1                          20
1          3      3        2                          30
                                                               gruppo 1,2
1          5      5        2                          10
2          3      3        1                          60       gruppo 2,1
3          1      1        1                          40
3          2      2        1                          30        gruppo 3,1
3          6      6        1                          25
    21                         Basi Di Dati ‐ Interrogazioni complesse (I parte)
Estrazione del risultato 
Estrazione del risultato
  si valuta la funzione aggregata SUM(QTA) e il predicato 
  HAVING


        COD-CLI     COD-PROD          SUM(QTA)

        1           1                 50
        1           2                 40
        2           1                 60
        3           1                 95



 22                                Basi Di Dati ‐ Interrogazioni complesse (I parte)
Query con raggruppamento e ordinamento 
Query con raggruppamento e ordinamento
 E’ possibile ordinare il risultato delle query con 
 raggruppamento

             SELECT  …..
             FROM …..
             [ WHERE ….. ]
             GROUP BY …..
             GROUP BY
             [ HAVING ….. ]
             ORDER BY ….
             ORDER BY


23                                  Basi Di Dati ‐ Interrogazioni complesse (I parte)
Raggruppamento e ordinamento 
Raggruppamento e ordinamento
 Selezionare la somma degli importi degli ordini successivi 
 al 10/6/04 per quei clienti che hanno emesso almeno 2 
 ordini dopo quella data, in ordine di cliente.

         SELECT  COD‐CLI,  SUM (IMPORTO) 
         FROM ORDINE
         WHERE DATA > 2004‐06‐10
         GROUP BY COD‐CLI
         HAVING COUNT (IMPORTO)  >= 2
         HAVING COUNT (IMPORTO) >= 2
         ORDER BY COD‐CLI

24                                Basi Di Dati ‐ Interrogazioni complesse (I parte)
ESERCIZI SUL GROUP BY
ESERCIZI SUL GROUP BY
SELECT ARTICOLO
FROM VENDITE GROUP BY ARTICOLO
HAVING COUNT(DISTINCT DATA)>1
              (           )

     ARTICOLO     DATA                NUM

      PENNA     2004-12-13                 2
      MATITA    2004-12-08
                2004 12 08                 1
      GOMMA     2004-12-10                 1
      MATITA    2004-12-08                 2
      PENNA     2004 12 08
                2004-12-08                 1
25                           Basi Di Dati ‐ Interrogazioni complesse (I parte)
ESERCIZI SUL GROUP BY
ESERCIZI SUL GROUP BY
 GROUP BY ARTICOLO
     ARTICOLO    DATA
       PENNA     2004-12-13,
                 2004-12-13 2004-12-08
       MATITA    2004-12-08, 2004-12-08
       GOMMA     2004-12-10
                 2004 12 10

 HAVING COUNT(DISTINCT DATA)>1
 HAVING COUNT(DISTINCT DATA)>1

     ARTICOLO
       PENNA


26                           Basi Di Dati ‐ Interrogazioni complesse (I parte)

More Related Content

Similar to C5 Sql2 (6)

Basi Dati C5
Basi Dati C5Basi Dati C5
Basi Dati C5
 
C3 Ddl1
C3 Ddl1C3 Ddl1
C3 Ddl1
 
F1 Vincoli Procedure Trigger
F1 Vincoli Procedure TriggerF1 Vincoli Procedure Trigger
F1 Vincoli Procedure Trigger
 
Oai Data Adapter
Oai Data AdapterOai Data Adapter
Oai Data Adapter
 
Optimizing dax
Optimizing daxOptimizing dax
Optimizing dax
 
Optimizing dax
Optimizing daxOptimizing dax
Optimizing dax
 

More from Majong DevJfu

9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud
Majong DevJfu
 
8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes
Majong DevJfu
 
7 - Architetture Software - Software product line
7 - Architetture Software - Software product line7 - Architetture Software - Software product line
7 - Architetture Software - Software product line
Majong DevJfu
 
6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation
Majong DevJfu
 
5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture
Majong DevJfu
 
4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio
Majong DevJfu
 
3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles
Majong DevJfu
 
2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture
Majong DevJfu
 
1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product
Majong DevJfu
 
10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles
Majong DevJfu
 

More from Majong DevJfu (20)

9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud9 - Architetture Software - SOA Cloud
9 - Architetture Software - SOA Cloud
 
8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes8 - Architetture Software - Architecture centric processes
8 - Architetture Software - Architecture centric processes
 
7 - Architetture Software - Software product line
7 - Architetture Software - Software product line7 - Architetture Software - Software product line
7 - Architetture Software - Software product line
 
6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation6 - Architetture Software - Model transformation
6 - Architetture Software - Model transformation
 
5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture5 - Architetture Software - Metamodelling and the Model Driven Architecture
5 - Architetture Software - Metamodelling and the Model Driven Architecture
 
4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio4 - Architetture Software - Architecture Portfolio
4 - Architetture Software - Architecture Portfolio
 
3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles3 - Architetture Software - Architectural styles
3 - Architetture Software - Architectural styles
 
2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture2 - Architetture Software - Software architecture
2 - Architetture Software - Software architecture
 
1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product1 - Architetture Software - Software as a product
1 - Architetture Software - Software as a product
 
10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles10 - Architetture Software - More architectural styles
10 - Architetture Software - More architectural styles
 
Uml3
Uml3Uml3
Uml3
 
Uml2
Uml2Uml2
Uml2
 
6
66
6
 
5
55
5
 
4 (uml basic)
4 (uml basic)4 (uml basic)
4 (uml basic)
 
3
33
3
 
2
22
2
 
1
11
1
 
Tmd template-sand
Tmd template-sandTmd template-sand
Tmd template-sand
 
26 standards
26 standards26 standards
26 standards
 

C5 Sql2

  • 1. Basi di Dati Basi di Dati Interrogazioni complesse (I parte)
  • 2. Basi di Dati – Dove ci troviamo? Basi di Dati Dove ci troviamo? A) Introduzione 1 2 B) Prog Concettuale (ER) B) Prog. Concettuale (ER) C) Modello Relazionale,  ) , Algebra relazionale, SQL 1 2 3 4 5 6 7 1 2 3 4 5 6 7 D) Prog. Logica e  E) Tecnologia di un DBMS Normalizzazione 1 2 3 4 1 2 3 4 5 6 F) Programmazione DB 1 2 2 Basi Di Dati ‐ Interrogazioni complesse (I parte)
  • 3. Classificazione delle interrogazioni complesse Classificazione delle interrogazioni complesse Query con ordinamento Query con aggregazioni Query con raggruppamento y gg pp Query binarie Query nidificate 3 Basi Di Dati ‐ Interrogazioni complesse (I parte)
  • 4. Esempio : gestione ordini  Esempio : gestione ordini cliente COD-CLI NOME INDIRIZZO P-IVA ordine COD-ORD COD-CLI DATA IMPORTO dettaglio COD-ORD COD-PROD QTA prodotto COD-PROD NOME PREZZO 4 Basi Di Dati ‐ Interrogazioni complesse (I parte)
  • 5. Istanza di ordine  Istanza di ordine ordine COD-ORD COD-CLI DATA IMPORTO 1 3 2004-06-01 2004 06 01 50.000 50 000 2 4 2004-08-03 8.000 3 3 2004-09-01 5.500 4 1 2004-07-01 12.000 5 1 2004-08-01 1.500 6 3 2004-09-03 2004 09 03 27.000 27 000 5 Basi Di Dati ‐ Interrogazioni complesse (I parte)
  • 6. Query con ordinamento  Query con ordinamento SELECT  *  FROM ORDINE WHERE IMPORTO < 100.000 ORDER BY DATA COD-ORD COD-CLI DATA IMPORTO 1 3 2004-06-01 2004 06 01 50.000 50 000 4 1 2004-07-01 12.000 5 1 2004-08-01 1.500 2 4 2004-08-03 8.000 3 3 2004-09-01 5.500 6 3 2004-09-03 2004 09 03 27.000 27 000 6 Basi Di Dati ‐ Interrogazioni complesse (I parte)
  • 7. Order by Order by SELECT  * FROM ORDINE WHERE IMPORTO < 100.000  ORDER BY COD‐CLI COD-ORD COD-CLI DATA IMPORTO 4 1 2004-07-01 2004 07 01 12.000 12 000 5 1 2004-08-01 1.500 1 3 2004-06-01 50.000 6 3 2004-09-03 5.500 3 3 2004-09-01 27.000 2 4 2004-08-03 2004 08 03 8.000 8 000 7 Basi Di Dati ‐ Interrogazioni complesse (I parte)
  • 8. Order by Order by ....... ORDER BY COD‐CLI ASC, DATA DESC COD-ORD CO C DATA CO O COD-CLI IMPORTO 5 1 2004-08-01 1.500 4 1 2004-07-01 12.000 6 3 2004 09 03 2004-09-03 27.000 3 3 2004-09-01 5.500 1 3 2004-06-01 2004 06 01 50.000 50 000 2 4 2004-08-03 8.000 8 Basi Di Dati ‐ Interrogazioni complesse (I parte)
  • 9. Query aggregate  Query aggregate Utilizzano le funzioni aggregate: SUM      sommatoria AVG       media MIN        minimo MAX       massimo COUNT  cardinalità I NULL sono esclusi 9 Basi Di Dati ‐ Interrogazioni complesse (I parte)
  • 10. Query con massimo Query con massimo Selezionare l’importo massimo degli ordini.  SELECT MAX(IMPORTO) AS MAX‐IMP ( ) FROM ORDINE MAX-IMP 50.000 10 Basi Di Dati ‐ Interrogazioni complesse (I parte)
  • 11. Query con sommatoria Query con sommatoria Selezionare la somma degli importi degli ordini relativi al  cliente numero 1. SELECT SUM(IMPORTO) AS SOMMA‐IMP FROM ORDINE WHERE COD‐CLIENTE = 1 SOMMA-IMP 13.500 11 Basi Di Dati ‐ Interrogazioni complesse (I parte)
  • 12. Query con raggruppamento  Query con raggruppamento si aggiungono le clausole: GROUP‐BY (raggruppamento) HAVING (selezione dei gruppi) SELECT  ….. FROM ….. WHERE ….. WHERE ….. GROUPBY ….. HAVING ….. 12 Basi Di Dati ‐ Interrogazioni complesse (I parte)
  • 13. Query con raggruppamento  Query con raggruppamento Attenzione!  Utilizzando GROUP BY il risultato della SELECT è ununico  record per ciascun gruppo. Pertanto in SELECT (e in HAVING) possono comparire  solo: Uno o più attributi del raggruppamento (i campi specificati  nella GROUP BY) Funzioni aggregate: tali funzioni vengono valutate, e quindi  forniscono un valore unico, per ciascun gruppo 13 Basi Di Dati ‐ Interrogazioni complesse (I parte)
  • 14. Query con raggruppamento  Query con raggruppamento Selezionare la somma degli importi degli ordini successivi  al 10‐6‐04 per quei clienti che hanno emesso almeno 2  ordini. SELECT  COD‐CLI,  SUM (IMPORTO)  FROM ORDINE WHERE DATA > 2004‐06‐10 GROUP BY COD‐CLI HAVING COUNT (IMPORTO) >= 2 COUNT (IMPORTO)  >= 2 14 Basi Di Dati ‐ Interrogazioni complesse (I parte)
  • 15. Passo 1: Valutazione WHERE Passo 1: Valutazione WHERE COD-ORD COD-CLI DATA IMPORTO 2 4 2004 08 03 2004-08-03 8.000 3 3 2004-09-01 5.500 4 1 2004-07-01 2004 07 01 12.000 12 000 5 1 2004-08-01 1.500 6 3 2004-09-03 27.000 (WHERE DATA > 2004-06-10) 15 Basi Di Dati ‐ Interrogazioni complesse (I parte)
  • 16. Passo 2 : Raggruppamento Passo 2 : Raggruppamento si valuta la clausola GROUP‐BY COD-ORD COD-CLI DATA IMPORTO 4 1 2004-07-01 12.000 5 1 2004 08 01 2004-08-01 1.500 1 500 3 3 2004-09-01 5.500 6 3 2004-09-03 2004 09 03 27.000 2 4 2004-08-03 8.000 (GROUP BYCOD-CLI) 16 Basi Di Dati ‐ Interrogazioni complesse (I parte)
  • 17. Passo 3 : Calcolo degli aggregati  Passo 3 : Calcolo degli aggregati si calcolano SUM (IMPORTO) e COUNT(IMPORTO) per  ciascun gruppo COD-CLI SUM COUNT (IMPORTO) (IMPORTO) 1 13.500 2 3 32.500 32 500 2 4 8.000 1 17 Basi Di Dati ‐ Interrogazioni complesse (I parte)
  • 18. Passo 4 : Estrazione dei gruppi  Passo 4 : Estrazione dei gruppi si valuta il predicato COUNT (IMPORTO) >=2 COD-CLI SUM COUNT (IMPORTO) (IMPORTO) 1 13.500 13 500 2 3 32.500 2 4 8.000 1 18 Basi Di Dati ‐ Interrogazioni complesse (I parte)
  • 19. Passo 5 : Produzione del risultato  Passo 5 : Produzione del risultato COD-CLI SUM (IMPORTO) 1 13.500 3 32.500 32 500 19 Basi Di Dati ‐ Interrogazioni complesse (I parte)
  • 20. Doppio raggruppamento  Doppio raggruppamento Selezionare la somma delle quantità dei dettagli degli  ordini emessi da ciascun cliente per ciascun prodotto,  purché la somma superi 50. SELECT COD‐CLI, COD‐PROD, SUM(QTA) FROM ORDINE AS O, DETTAGLIO AS D WHERE  O.COD‐ORD = D.COD‐ORD GROUP BY COD‐CLI, COD‐PROD HAVING SUM(QTA) > 50 HAVING SUM(QTA) > 50 20 Basi Di Dati ‐ Interrogazioni complesse (I parte)
  • 21. Situazione dopo il join e il raggruppamento Situazione dopo il join e il raggruppamento ordine dettaglio COD-CLI ORDINE. DETTAGLIO. COD-PROD QTA COD-ORD COD-ORD 1 3 3 1 30 gruppo 1,1 1 4 4 1 20 1 3 3 2 30 gruppo 1,2 1 5 5 2 10 2 3 3 1 60 gruppo 2,1 3 1 1 1 40 3 2 2 1 30 gruppo 3,1 3 6 6 1 25 21 Basi Di Dati ‐ Interrogazioni complesse (I parte)
  • 22. Estrazione del risultato  Estrazione del risultato si valuta la funzione aggregata SUM(QTA) e il predicato  HAVING COD-CLI COD-PROD SUM(QTA) 1 1 50 1 2 40 2 1 60 3 1 95 22 Basi Di Dati ‐ Interrogazioni complesse (I parte)
  • 23. Query con raggruppamento e ordinamento  Query con raggruppamento e ordinamento E’ possibile ordinare il risultato delle query con  raggruppamento SELECT  ….. FROM ….. [ WHERE ….. ] GROUP BY ….. GROUP BY [ HAVING ….. ] ORDER BY …. ORDER BY 23 Basi Di Dati ‐ Interrogazioni complesse (I parte)
  • 24. Raggruppamento e ordinamento  Raggruppamento e ordinamento Selezionare la somma degli importi degli ordini successivi  al 10/6/04 per quei clienti che hanno emesso almeno 2  ordini dopo quella data, in ordine di cliente. SELECT  COD‐CLI,  SUM (IMPORTO)  FROM ORDINE WHERE DATA > 2004‐06‐10 GROUP BY COD‐CLI HAVING COUNT (IMPORTO)  >= 2 HAVING COUNT (IMPORTO) >= 2 ORDER BY COD‐CLI 24 Basi Di Dati ‐ Interrogazioni complesse (I parte)
  • 25. ESERCIZI SUL GROUP BY ESERCIZI SUL GROUP BY SELECT ARTICOLO FROM VENDITE GROUP BY ARTICOLO HAVING COUNT(DISTINCT DATA)>1 ( ) ARTICOLO DATA NUM PENNA 2004-12-13 2 MATITA 2004-12-08 2004 12 08 1 GOMMA 2004-12-10 1 MATITA 2004-12-08 2 PENNA 2004 12 08 2004-12-08 1 25 Basi Di Dati ‐ Interrogazioni complesse (I parte)
  • 26. ESERCIZI SUL GROUP BY ESERCIZI SUL GROUP BY GROUP BY ARTICOLO ARTICOLO DATA PENNA 2004-12-13, 2004-12-13 2004-12-08 MATITA 2004-12-08, 2004-12-08 GOMMA 2004-12-10 2004 12 10 HAVING COUNT(DISTINCT DATA)>1 HAVING COUNT(DISTINCT DATA)>1 ARTICOLO PENNA 26 Basi Di Dati ‐ Interrogazioni complesse (I parte)