interrogazioni complesse - db&kb group @ disi, … · 2008-12-02 · sql avanzato 36 ( select...
TRANSCRIPT
![Page 1: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/1.jpg)
SQL avanzato 1
Interrogazionicomplesse
![Page 2: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/2.jpg)
SQL avanzato 2
Classificazione delleinterrogazioni complesse
• Query con ordinamento• Query con aggregazione• Query con raggruppamento• Query binarie• Query annidate
![Page 3: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/3.jpg)
SQL avanzato 3
Esempio : gestione ordinicliente COD-CLI NOME INDIRIZZO P-IVA
COD-ORD COD-CLI DATA IMPORTO
COD-ORD COD-PROD QTA
COD-PROD NOME PREZZOprodotto
dettaglio
ordine
![Page 4: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/4.jpg)
SQL avanzato 4
Istanza di ordineordineCOD-ORD123456
COD-CLI343113
DATA1997-06-011997-08-031997-09-011997-07-011997-08-011997-09-03
IMPORTO50.000.000 8.000.000 5.500.00012.000.000 1.500.00027.000.000
![Page 5: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/5.jpg)
SQL avanzato 5
Query con ordinamentoSELECT * FROM ORDINEWHERE IMPORTO > 100.000 ORDER BY DATA
COD-ORD145236
COD-CLI311433
DATA1997-06-011997-07-011997-08-011997-08-031997-09-011997-09-03
IMPORTO50.000.00012.000.000 1.500.000 8.000.000 5.500.00027.000.000
![Page 6: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/6.jpg)
SQL avanzato 6
Order by
COD-ORD451632
COD-CLI113334
DATA1997-07-011997-08-011997-06-011997-09-031997-09-011997-08-03
IMPORTO12.000.000 1.500.00050.000.000 5.500.00027.000.000 8.000.000
SELECT * FROM ORDINEWHERE IMPORTO > 100.000ORDER BY COD-CLI
![Page 7: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/7.jpg)
SQL avanzato 7
Order by
SELECT COD-CLI, IMPORTO/1.000.000FROM ORDINEWHERE IMPORTO > 100.000ORDER BY 2
(ordina sulla SECONDA colonna)
Nel caso si voglia ordinare sui valoridi una colonna risultato di una espressionesi usa una notazione “posizionale”
![Page 8: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/8.jpg)
SQL avanzato 8
Order by
COD-ORD546312
COD-CLI113334
DATA1997-08-011997-07-011997-09-031997-09-011997-06-011997-08-03
IMPORTO 1.500.00012.000.00027.000.000 5.500.00050.000.000 8.000.000
.......ORDER BY COD-CLI ASC, DATA DESC
![Page 9: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/9.jpg)
SQL avanzato 9
Query aggregate
Utilizzano le funzioni aggregate:
SUM sommatoriaAVG mediaMIN minimoMAX massimoCOUNT cardinalità
(I NULL sono esclusi)
![Page 10: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/10.jpg)
SQL avanzato 10
Query con massimo
SELECT MAX(IMPORTO) AS MAX-IMPFROM ORDINE
MAX-IMP 50.000.000
• Selezionare l’importo massimo degliordini.
![Page 11: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/11.jpg)
SQL avanzato 11
Query con sommatoria
SELECT SUM(IMPORTO) AS SOMMA-IMPFROM ORDINEWHERE COD-CLIENTE = 1
SOMMA-IMP 13.500.000
• Selezionare la somma degli importi degliordini relativi al cliente numero 1.
![Page 12: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/12.jpg)
SQL avanzato 12
Query con raggruppamentosi aggiungono le clausoleGROUP-BY (raggruppamento)HAVING (selezione dei gruppi)
SELECT …..FROM …..WHERE …..GROUP BY …..HAVING …..
![Page 13: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/13.jpg)
SQL avanzato 13
Query con raggruppamento• Selezionare la somma degli importi degli
ordini successivi al 10-6-97 per quei clientiche hanno emesso almeno 2 ordini.
SELECT COD-CLI, SUM (IMPORTO)FROM ORDINEWHERE DATA > '1997-06-10'GROUP BY COD-CLIHAVING COUNT (IMPORTO) >= 2
![Page 14: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/14.jpg)
SQL avanzato 14
Passo 1: Valutazione WHERE
COD-ORD23456
COD-CLI43113
DATA1997-08-031997-09-011997-07-011997-08-011997-09-03
IMPORTO 8.000.000 5.500.00012.000.000 1.500.00027.000.000
( WHERE DATA > '1997-06-10’ )
![Page 15: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/15.jpg)
SQL avanzato 15
Passo 2 : Raggruppamento
COD-ORD45362
COD-CLI11334
DATA1997-07-011997-08-011997-09-011997-09-031997-08-03
IMPORTO12.000.000 1.500.000 5.500.00027.000.000 8.000.000
si valuta la clausola GROUP-BY
(GROUP BY COD-CLI)
![Page 16: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/16.jpg)
SQL avanzato 16
Passo 3 : Calcolo degli aggregati
per ciascun gruppo si calcolanoSUM (IMPORTO) e COUNT (IMPORTO)
COD-CLI
134
SUM (IMPORTO)13.500.00032.500.000 8.000.000
COUNT (IMPORTO)221
![Page 17: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/17.jpg)
SQL avanzato 17
Passo 4 : Selezione dei gruppisi valuta il predicatoCOUNT (IMPORTO) >=2
COD-CLI
134
SUM (IMPORTO)13.500.00032.500.000 8.000.000
COUNT (IMPORTO)221
![Page 18: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/18.jpg)
SQL avanzato 18
Passo 5 : Produzione del risultato
COD-CLI
13
SUM (IMPORTO)13.500.00032.500.000
![Page 19: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/19.jpg)
SQL avanzato 19
Doppio raggruppamento
SELECT COD-CLI, COD-PROD, SUM(QTA)FROM ORDINE AS O, DETTAGLIO AS DWHERE O.COD-ORD = D.COD-ORDGROUP BY COD-CLI, COD-PRODHAVING SUM(QTA) > 50
• Selezionare la somma delle quantità deidettagli degli ordini emessi da ciascuncliente per ciascun prodotto, purché lasomma superi 50.
![Page 20: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/20.jpg)
SQL avanzato 20
Situazione dopo il join e il raggruppamentoordine
ORDINE.COD-ORD34353126
COD-CLI
11112333
DETTAGLIO.COD-ORD34353126
COD-PROD
11221111
dettaglio
QTA
gruppo 1,1
gruppo 1,2
gruppo 2,1
gruppo 3,1
3020301060403025
![Page 21: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/21.jpg)
SQL avanzato 21
Estrazione del risultatosi valuta la funzione aggregataSUM(QTA) e il predicato HAVING
SUM(QTA)
50406095
COD-PROD
1211
COD-CLI
1123
![Page 22: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/22.jpg)
SQL avanzato 22
Query con raggruppamento eordinamento
• E’ possibile ordinare il risultato anchedelle query con raggruppamento
SELECT …..FROM …..[ WHERE ….. ]GROUP BY …..[ HAVING ….. ]ORDER BY ….
![Page 23: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/23.jpg)
SQL avanzato 23
Raggruppamento e ordinamento• Selezionare la somma degli importi degli ordini
successivi al 10/6/97 per quei clienti che hannoemesso almeno 2 ordini dopo quella data, inordine di cliente.
SELECT COD-CLI, SUM (IMPORTO)FROM ORDINEWHERE DATA > 1997-06-10GROUP BY COD-CLIHAVING COUNT (IMPORTO) >= 2ORDER BY COD-CLI
![Page 24: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/24.jpg)
SQL avanzato 24
ESERCIZI SUL GROUP BY
1 SELECT ART-NO, SPED-NO, NUMFROM SPEDIZIONIGROUP BY ART-NO
OPPURE
2 SELECT ART-NO, SPED-NO, NUMFROM SPEDIZIONIGROUP BY ART-NO,SPED-NO
![Page 25: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/25.jpg)
SQL avanzato 25
ESERCIZI SUL GROUP BYSU:
ART-NO SPED-NO NUM (SPEDIZIONI)1 2 1001 2 251 3 752 2 1002 4 1002 4 751 4 25
![Page 26: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/26.jpg)
SQL avanzato 26
ESERCIZI SUL GROUP BY1 ….GROUP BY ART-NO
ART-NO SPED-NO NUM1 2,2,3,4 100,25,75,252 2,4,4 100,100,75
1 ….GROUP BY ART-NO, SPED-NO
ART-NO SPED-NO NUM1 2 100,251 3 751 4 252 2 1002 4 100,75
![Page 27: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/27.jpg)
SQL avanzato 27
ESERCIZI SUL GROUP BYSELECT ARTICOLOFROM VENDITE GROUP BY ARTICOLOHAVING COUNT(DISTINCT DATA)
SU
ARTICOLO DATA NUM
PENNA 1997-12-13 2MATITA 1997-12-08 1GOMMA 1997-12-10 1MATITA 1997-12-08 2PENNA 1997-12-08 1
![Page 28: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/28.jpg)
SQL avanzato 28
ESERCIZI SUL GROUP BYGROUP BY ARTICOLO
SU
ARTICOLO DATAPENNA 1997-12-13, 1997-12-08 MATITA 1997-12-08, 1997-12-08 GOMMA 1997-12-10
HAVING COUNT(DISTINCT DATA)ARTICOLO
PENNA
![Page 29: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/29.jpg)
SQL avanzato 29
Query binarie
Costruite concatenando due query SQLtramite operatori insiemistici:
UNION unioneINTERSECT intersezioneEXCEPT (MINUS) differenza
(si eliminano i duplicati)
![Page 30: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/30.jpg)
SQL avanzato 30
Unione
SELECT COD-ORDFROM ORDINEWHERE IMPORTO > 500.000 UNIONSELECT COD-ORDFROM DETTAGLIOWHERE QTA > 1000
• Selezionare i codici degli ordini i cui importisuperano 500.000 lire oppure presenti in qualchedettaglio con quantità superiore a 1000.
![Page 31: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/31.jpg)
SQL avanzato 31
Differenza
SELECT COD-ORDFROM ORDINEWHERE IMPORTO > 500.000 EXCEPTSELECT COD-ORDFROM DETTAGLIOWHERE QTA > 1000
• Selezionare i codici degli ordini i cui importisuperano 500.000 lire ma non presenti in nessundettaglio con quantità superiore a 1000.
![Page 32: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/32.jpg)
SQL avanzato 32
Intersezione
SELECT COD-ORDFROM ORDINEWHERE IMPORTO > 500.000 INTERSECTSELECT COD-ORDFROM DETTAGLIOWHERE QTA > 1000
• Selezionare i codici degli ordini i cui importisuperano 500.000 lire e che sono presenti inqualche dettaglio con quantità superiore a 1000.
![Page 33: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/33.jpg)
SQL avanzato 33
Query annidate
Costruite concatenando due query SQLnel predicato where:
[NOT] IN appartenenza[DOES NOT] EXISTS esistenzaANY, ALL quantificatori
comparatore: =, !=, <, <=, >, >=
![Page 34: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/34.jpg)
SQL avanzato 34
Query nidificate (nested)
( SELECT COD-CLI FROM ORDINE WHERE IMPORTO > 10.000.000 )
• Selezionare nome e indirizzo dei clienti chehanno emesso qualche ordine di importosuperiore a 10.000.000.
SELECT NOME, INDIRIZZOFROM CLIENTEWHERE COD-CLI IN
![Page 35: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/35.jpg)
SQL avanzato 35
Equivalenza fra IN e query sempliciSELECT NOME, INDIRIZZOFROM CLIENTEWHERE COD-CLI IN ( SELECT COD-CLI FROM ORDINE WHERE IMPORTO > 10.000.000 )equivale (a meno di duplicati) a:SELECT NOME, INDIRIZZOFROM CLIENTE JOIN ORDINE ON CLIENTE.COD-CLI = ORDINE.COD-CLIWHERE IMPORTO > 10.000.000
![Page 36: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/36.jpg)
SQL avanzato 36
( SELECT COD-ORD FROM DETTAGLIO WHERE COD-PROD IN
• Selezionare nome e indirizzo dei clienti chehanno emesso qualche ordine i cui dettaglicomprendono il prodotto “Pneumatico”.
( SELECT COD-PROD FROM PRODOTTO WHERE NOME = 'Pneumatico' ) ) )
( SELECT COD-CLI FROM ORDINE WHERE COD-ORD IN
SELECT NOME, INDIRIZZO FROM CLIENTEWHERE COD-CLI IN
Nested Query complesse (fino a 8 livelli)
![Page 37: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/37.jpg)
SQL avanzato 37
La query equivalente
equivale (a meno di duplicati) a:
SELECT NOME, INDIRIZZOFROM CLIENTE AS C, ORDINE AS O,
DETTAGLIO AS D, PRODOTTO AS PWHERE C.COD-CLI = O.COD-CLI
AND O.COD-ORD = D.COD-ORD AND D.COD-PROD = P.COD-PROD AND NOME= 'Pneumatico'
![Page 38: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/38.jpg)
SQL avanzato 38
Nested query correlate (con variabile)SELECT NOMEFROM IMPIEGATI AS X,
WHERE SALARIO> ( SELECT SALARIO FROM IMPIEGATI WHERE MATRICOLA= X.MANAGER ) sulla relazione IMPIEGATI (matricola, nome, manager…) equivale al JOIN
SELECT X.NOMEFROM IMPIEGATI AS X, IMPIEGATI AS Y WHERE X.SALARIO > Y.SALARIO
AND Y.MATRICOLA= X.MANAGER
![Page 39: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/39.jpg)
SQL avanzato 39
Uso di IN nelle modifiche• aumentare di L. 5000 l’importo di tutti gli ordini che comprendono il prodotto 456
UPDATE ORDINE SET IMPORTO = IMPORTO + 5000 WHERE COD-ORD IN
( SELECT COD-ORD FROM DETTAGLIO WHERE COD-PROD = '456’ )
![Page 40: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/40.jpg)
SQL avanzato 40
Query con NOT IN
( SELECT COD-CLI FROM ORDINE WHERE IMPORTO > 10.000.000 )
• Selezionare nome e indirizzo dei clienti che nonhanno emesso nessun ordine di importosuperiore a 10.000.000.
SELECT NOME, INDIRIZZOFROM CLIENTEWHERE COD-CLI NOT IN
![Page 41: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/41.jpg)
SQL avanzato 41
La query con ANY e ALL
SELECT COD-ORDFROM ORDINEWHERE IMPORTO > ANY ( SELECT IMPORTO FROM ORDINE )
SELECT COD-ORDFROM ORDINEWHERE IMPORTO >= ALL ( SELECT IMPORTO FROM ORDINE )
COD-ORD123
IMPORTO 50.000 300.000 90.000
ANYFVV
ALLFVF
![Page 42: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/42.jpg)
SQL avanzato 42
Esercizi• Riprendere le basi di dati per la gestione del personale e degli ordini ed esprimere in SQL le interrogazioni : - quale impiegati lavorano in un progetto in cui non lavora il loro manager? - quanti ordini ha emesso Paolo? - quante candele sono state ordinate il 5/7/97? - calcolare per ciascun cliente la somma degli importi di tutti gli ordini - estrarre l'ordine di importo più alto
![Page 43: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/43.jpg)
SQL avanzato 43
Esercizi (lezione precedente)• in quali tipi di progetti lavora Giovanni?
SELECT TIPO FROM PROGETTO WHERE NUM-PROG IN ( SELECT NUM-PROG FROM ASSEGNAMENTO WHERE MATR IN
( SELECT MATR FROM IMPIEGATO WHERE NOME='Giovanni’ ) )
• chi è il manager di Piero? SELECT NOME FROM IMPIEGATO WHERE MATR IN ( SELECT MATR -MGR FROM IMPIEGATO
WHERE NOME='Piero’ )
![Page 44: Interrogazioni complesse - DB&KB Group @ DISI, … · 2008-12-02 · sql avanzato 36 ( select cod-ord from dettaglio where cod-prod in](https://reader031.vdocuments.pub/reader031/viewer/2022022016/5b6391e57f8b9af5448c3153/html5/thumbnails/44.jpg)
SQL avanzato 44
Query annidate (nested)
( SELECT * FROM ORDINE WHERE IMPORTO > 10.000.000
AND COD_CLI=C.COD_CLI )
• Selezionare nome e indirizzo dei clienti chehanno emesso qualche[o non hanno emesso nessun]ordine di importo superiore a 10.000.000.
SELECT NOME, INDIRIZZOFROM CLIENTE CWHERE [NOT] EXISTS