Linguaggio SQL: fondamenti Struttura di base Clausola WHEE Ordinamento del risultato Join unzioni aggregate Operatore GOU BY Istruzione SELECT: esempio Trovare il codice e il numero di soci dei fornitori di Milano BD forniture prodotti Istruzione SELECT: esempio 1 Maglia osso 40 Torino 3 Camicia Blu 48 oma 5 Gonna Blu 40 Milano 6 Bermuda osso 42 Torino Cod Nome NSoci Sede 1 Andrea 2 Torino 2 Luca 1 Milano 3 Antonio 3 Milano 4 Gabriele 2 Torino 5 Matteo 3 Venezia 1 6 100 2 1 300 4 3 200 4 4 300 4 5 400 Trovare il codice e il numero di soci dei fornitori di Milano Cod Nome NSoci Sede 1 Andrea 2 Torino 2 Luca 1 Milano 3 Antonio 3 Milano 4 Gabriele 2 Torino 5 Matteo 3 Venezia p Cod, NSoci s Sede='Milano' 2007 olitecnico di Torino 1
Istruzione SELECT: esempio SELECT base (n.1) Trovare il codice e il numero di soci dei fornitori di Milano SELECT Cod, NSoci OM WHEE Sede='Milano'; Cod Nome NSoci Sede 1 Andrea 2 Torino 2 Luca 1 Milano 3 Antonio 3 Milano 4 Gabriele 2 Torino 5 Matteo 3 Venezia Cod NSoci 2 1 3 3 Trovare il codice di tutti i prodotti SELECT Cod OM ; 1 Maglia osso 40 Torino 3 Camicia Blu 48 oma 5 Gonna Blu 40 Milano 6 Bermuda osso 42 Torino p Cod Cod 1 2 3 4 5 6 SELECT base (n.2) SELECT base (n.2) Trovare il codice dei prodotti forniti da almeno un fornitore 1 6 100 2 1 300 4 3 200 4 4 300 SELECT Cod OM ; Cod 1 2 3 4 5 6 1 2 2 3 4 5 4 5 400 Trovare il codice dei prodotti forniti da almeno un fornitore SELECT Cod OM ; p Cod Non effettua la rimozione dei duplicati arola chiave DISTINCT eliminazione dei duplicati Eliminazione dei duplicati Trovare il codice dei prodotti diversi forniti da almeno un fornitore SELECT base (n.2) Trovare il codice dei prodotti diversi forniti da almeno un fornitore 1 6 100 2 1 300 4 3 200 4 4 300 4 5 400 SELECT DISTINCT Cod OM ; Cod 1 2 3 4 5 6 2007 olitecnico di Torino 2
Selezione di tutte le informazioni Selezione con espressione (1/3) Trovare tutte le informazioni sui prodotti SELECT Cod, Nome, Colore, Taglia, Magazzino OM ; oppure SELECT * OM ; 1 Maglia osso 40 Torino 3 Camicia Blu 48 oma 5 Gonna Blu 40 Milano 6 Bermuda osso 42 Torino D M BG Trovare il codice dei prodotti e la taglia espressa con la misura americana SELECT Cod, Taglia-14 OM ; 1 Maglia osso 40 Torino 3 Camicia Blu 48 oma 5 Gonna Blu 40 Milano 6 Bermuda osso 42 Torino Cod 1 26 2 34 3 34 4 30 5 26 6 38 Selezione con espressione (2/3) Selezione con espressione (3/3) Definizione di una nuova colonna temporanea per l espressione calcolata il nome della colonna temporanea può essere definito con la parola chiave AS Trovare il codice dei prodotti e la taglia espressa con la misura americana SELECT Cod, Taglia-14 AS TagliaUSA OM ; Cod TagliaUSA 1 26 2 34 3 34 4 30 5 26 6 38 Struttura dell istruzione SELECT (1) SELECT [DISTINCT] ElencoAttributiDaVisualizzare OM ElencoTabelleDaUtilizzare; 2007 olitecnico di Torino 3
Clausola WHEE ermette di esprimere condizioni di selezione applicate singolarmente ad ogni tupla Espressione booleana di predicati redicati semplici espressioni di confronto tra attributi e costanti ricerca testuale valori NULL Trovare il codice dei fornitori di Milano SELECT Cod OM WHEE Sede='Milano'; Cod Nome NSoci Sede 1 Andrea 2 Torino 2 Luca 1 Milano 3 Antonio 3 Milano 4 Gabriele 2 Torino 5 Matteo 3 Venezia Clausola WHEE (n.1) Cod 2 3 Clausola WHEE (n.2) Espressioni booleane (n.1) Trovare il codice e il numero di soci dei fornitori che non hanno sede a Milano SELECT Cod, NSoci OM WHEE Sede<>'Milano'; Trovare il codice dei fornitori di Milano con più di 2 soci SELECT Cod OM WHEE Sede='Milano' AND NSoci>2; Cod Nome NSoci Sede 1 Andrea 2 Torino 2 Luca 1 Milano 3 Antonio 3 Milano 4 Gabriele 2 Torino 5 Matteo 3 Venezia Cod NSoci 1 2 4 2 5 3 Cod Nome NSoci Sede 1 Andrea 2 Torino 2 Luca 1 Milano 3 Antonio 3 Milano 4 Gabriele 2 Torino 5 Matteo 3 Venezia Cod 3 Espressioni booleane (n.2) Espressioni booleane (n.3) Trovare il codice e il numero di soci dei fornitori di Milano o di Torino SELECT Cod, NSoci OM WHEE Sede='Milano' O Sede='Torino'; Trovare il codice e il numero di soci dei fornitori che hanno sede a Milano e a Torino la richiesta non può essere soddisfatta ogni fornitore ha una sola sede Cod Nome NSoci Sede 1 Andrea 2 Torino 2 Luca 1 Milano 3 Antonio 3 Milano 4 Gabriele 2 Torino 5 Matteo 3 Venezia Cod NSoci 1 2 2 1 3 3 4 2 Cod Nome NSoci Sede 1 Andrea 2 Torino 2 Luca 1 Milano 3 Antonio 3 Milano 4 Gabriele 2 Torino 5 Matteo 3 Venezia 2007 olitecnico di Torino 4
Operatore LIKE NomeAttributo LIKE StringaDiCaratteri icerca testuale il carattere _ rappresenta un singolo carattere qualsiasi (obbligatoriamente presente) il carattere % rappresenta una sequenza qualsiasi di n caratteri (anche vuota) SELECT Cod, Nome OM WHEE Nome LIKE 'C%'; 1 Maglia osso 40 Torino 3 Camicia Blu 48 oma 5 Gonna Blu 40 Milano 6 Bermuda osso 42 Torino icerca testuale (n.1) Trovare il codice e il nome dei prodotti il cui nome inizia con la lettera C Cod 3 4 Nome Camicia Camicia icerca testuale (n.2) icerca testuale (n.3) L attributo Indirizzo contiene la stringa Torino Indirizzo LIKE '%Torino%' Il codice fornitore è pari a 2 e è preceduto da un carattere ignoto è costituito esattamente da 2 caratteri Cod LIKE '_2' Magazzino NOT LIKE '_e%' icerca testuale (n.4) L attributo magazzino non contiene una e in seconda posizione Gestione di valori NULL (n.1) Trovare il codice e il nome dei prodotti con taglia maggiore di 44 SELECT Cod, Nome OM WHEE Taglia>44; 1 Maglia osso 40 Torino 3 Camicia Blu 48 oma 5 Gonna Blu NULL Milano 6 Bermuda osso 42 Torino Cod 2 3 Nome Jeans Camicia 2007 olitecnico di Torino 5
Valore NULL icerca di valori NULL Le tuple per cui la taglia è NULL non sono selezionate il predicato Taglia>44 è falso In presenza di valori NULL qualsiasi predicato di confronto è falso Operatore speciale IS NomeAttributo IS [NOT] NULL SELECT Cod, Nome OM WHEE Taglia IS NULL; icerca di valori NULL (n.1) Trovare il codice e il nome dei prodotti per cui la taglia non è indicata 1 Maglia osso 40 Torino 3 Camicia Blu 48 oma 5 Gonna Blu NULL Milano 6 Bermuda osso 42 Torino Cod 5 Nome Gonna icerca di valori NULL (n.2) Trovare il codice e il nome dei prodotti con la taglia maggiore di 44 o che potrebbero avere taglia maggiore di 44 SELECT Cod, Nome OM WHEE Taglia>44 O Taglia IS NULL; 1 Maglia osso 40 Torino 3 Camicia Blu 48 oma 5 Gonna Blu NULL Milano 6 Bermuda osso 42 Torino Cod 2 3 5 Nome Jeans Camicia Gonna Struttura dell istruzione SELECT (2) SELECT [DISTINCT] ElencoAttributiDaVisualizzare OM ElencoTabelleDaUtilizzare [WHEE CondizioniDiTupla ]; 2007 olitecnico di Torino 6
Ordinamento del risultato (n.1) Ordinamento Trovare il codice dei prodotti e la loro taglia ordinando il risultato in ordine decrescente di taglia SELECT Cod, Taglia OM ODE BY Taglia DESC; 1 Maglia osso 40 Torino 3 Camicia Blu 48 oma 5 Gonna Blu 40 Milano 6 Bermuda osso 42 Torino Cod Taglia 2 48 3 48 4 44 6 42 1 40 5 40 Clausola ODE BY ODE BY NomeAttributo [ASC DESC] {, NomeAttributo [ASC DESC]} l ordinamento implicito è crescente senza DESC gli attributi di ordinamento devono comparire nella clausola SELECT anche implicitamente (come SELECT *) Ordinamento del risultato (n.2) Trovare tutte le informazioni sui prodotti ordinando il risultato in ordine crescente di nome e decrescente di taglia SELECT Cod, Nome, Colore, Taglia, Magazzino OM ODE BY Nome, Taglia DESC; 1 Maglia osso 40 Torino 3 Camicia Blu 48 oma 5 Gonna Blu 40 Milano 6 Bermuda osso 42 Torino Ordinamento del risultato (n.2) Trovare tutte le informazioni sui prodotti ordinando il risultato in ordine crescente di nome e decrescente di taglia SELECT Cod, Nome, Colore, Taglia, Magazzino OM ODE BY Nome, Taglia DESC; 6 Bermuda osso 42 Torino 3 Camicia Blu 48 oma 5 Gonna Blu 40 Milano 1 Maglia osso 40 Torino Ordinamento del risultato (n.2) Trovare tutte le informazioni sui prodotti ordinando il risultato in ordine crescente di nome e decrescente di taglia SELECT * OM ODE BY Nome, Taglia DESC; 6 Bermuda osso 42 Torino 3 Camicia Blu 48 oma 5 Gonna Blu 40 Milano 1 Maglia osso 40 Torino Ordinamento del risultato (n.3) Trovare il codice dei prodotti e la taglia espressa come taglia americana, ordinando il risultato in ordine crescente di taglia SELECT Cod, Taglia-14 AS TagliaUSA OM ODE BY TagliaUSA; 1 Maglia osso 40 Torino 3 Camicia Blu 48 oma 5 Gonna Blu 40 Milano 6 Bermuda osso 42 Torino Cod TagliaUSA 5 26 1 28 6 28 4 30 2 34 3 34 2007 olitecnico di Torino 7
Struttura dell istruzione SELECT (3) SELECT [DISTINCT] ElencoAttributiDaVisualizzare OM ElencoTabelleDaUtilizzare [WHEE CondizioniDiTupla ] [ODE BY ElencoAttributiDiOrdinamento ]; Trovare il nome dei fornitori che forniscono il prodotto 2 Cod Nome NSoci Sede 1 Andrea 2 Torino 2 Luca 1 Milano 3 Antonio 3 Milano 4 Gabriele 2 Torino 5 Matteo 3 Venezia DB forniture prodotti DB forniture prodotti rodotto cartesiano Cod Nome NSoci Sede 1 Andrea 2 Torino 2 Luca 1 Milano 3 Antonio 3 Milano 4 Gabriele 2 Torino 5 Matteo 3 Venezia 1 6 100 2 1 300 4 3 200 4 4 300 4 5 400 Trovare il nome dei fornitori che forniscono il prodotto 2 SELECT Nome OM, ; 2007 olitecnico di Torino 8
rodotto cartesiano.cod.nome.nsoci.sede.cod.cod.qta 1 Andrea 2 Torino 1 Andrea 2 Torino 1 Andrea 2 Torino 1 Andrea 2 Torino 1 Andrea 2 Torino 1 Andrea 2 Torino 1 6 100 1 Andrea 2 Torino 2 1 300 2 Luca 1 Milano 2 Luca 1 Milano 2 1 300 =.Cod.Nome.NSoci.Sede.Cod.Cod.Qta 1 Andrea 2 Torino 1 Andrea 2 Torino 1 Andrea 2 Torino 1 Andrea 2 Torino 1 Andrea 2 Torino 1 Andrea 2 Torino 1 6 100 1 Andrea 2 Torino 2 1 300 2 Luca 1 Milano 2 Luca 1 Milano 2 1 300 Trovare il nome dei fornitori che forniscono il prodotto 2 SELECT Nome OM, WHEE.Cod=.Cod Trovare il nome dei fornitori che forniscono il prodotto 2 SELECT Nome OM, WHEE.Cod=.Cod Condizione di join NomeTabella.NomeAttributo =.Cod.Nome.NSoci.Sede.Cod.Cod.Qta 1 Andrea 2 Torino 1 Andrea 2 Torino 1 Andrea 2 Torino 1 Andrea 2 Torino 1 Andrea 2 Torino 1 Andrea 2 Torino 1 6 100 1 Andrea 2 Torino 2 1 300 2 Luca 1 Milano 2 Luca 1 Milano 2 1 300.Cod.Nome.NSoci.Sede.Cod.Cod.Qta 1 Andrea 2 Torino 1 Andrea 2 Torino 1 Andrea 2 Torino 1 Andrea 2 Torino 1 Andrea 2 Torino 1 Andrea 2 Torino 1 6 100 2 Luca 1 Milano 2 1 300 2 Luca 1 Milano 3 Antonio 3 Milano 4 Gabriele 2 Torino 4 3 200 4 Gabriele 2 Torino 4 4 300 4 Gabriele 2 Torino 4 5 400 2007 olitecnico di Torino 9
Trovare il nome dei fornitori che forniscono il prodotto 2 SELECT Nome OM, WHEE.Cod=.Cod AND Cod='2';.Cod='2'.Cod.Nome.NSoci.Sede.Cod.Cod.Qta 1 Andrea 2 Torino 1 Andrea 2 Torino 1 Andrea 2 Torino 1 Andrea 2 Torino 1 Andrea 2 Torino 1 Andrea 2 Torino 1 6 100 2 Luca 1 Milano 2 1 300 2 Luca 1 Milano 3 Antonio 3 Milano 4 Gabriele 2 Torino 4 3 200 4 Gabriele 2 Torino 4 4 300 4 Gabriele 2 Torino 4 5 400.Cod.Nome.NSoci.Sede.Cod.Cod.Qta 1 Andrea 2 Torino 2 Luca 1 Milano 3 Antonio 3 Milano Trovare il nome dei fornitori che forniscono il prodotto 2 Nome Andrea Luca Antonio Trovare il nome dei fornitori che forniscono il prodotto 2 in algebra relazionale Trovare il nome dei fornitori che forniscono il prodotto 2 p.nome s Cod= 2 p.nome s Cod= 2 SELECT Nome OM, WHEE.Cod=.Cod AND Cod='2'; SELECT Nome OM, WHEE Cod='2' AND.Cod=.Cod; Il risultato e l efficienza sono indipendenti dall ordine dei predicati nella clausola WHEE 2007 olitecnico di Torino 10
Trovare il nome dei fornitori che forniscono il prodotto 2 SELECT Nome OM, WHEE.Cod=.Cod AND Cod='2'; SELECT Nome OM, WHEE.Cod=.Cod AND Cod='2'; Dichiaratività del linguaggio SQL in algebra relazionale si definisce l ordine in cui sono applicati gli operatori in SQL l ordine migliore è scelto dall ottimizzatore indipendentemente dall ordine delle condizioni nella clausola WHEE dall ordine delle tabelle nella clausola OM Il risultato e l efficienza sono indipendenti dall ordine delle tabelle nella clausola OM Trovare il nome dei fornitori che forniscono almeno un prodotto rosso SELECT Nome OM,, WHEE.Cod=.Cod AND.Cod=.Cod AND Colore='osso'; Clausola OM con N tabelle almeno N-1 condizioni di join nella clausola WHEE Join (n.2) AS X Cod Nome NSoci Sede 1 Andrea 2 Torino 2 Luca 1 Milano 3 Antonio 3 Milano 4 Gabriele 2 Torino 5 Matteo 3 Venezia D M BG Join (n.3) Trovare le coppie di codici dei fornitori tali che entrambi i fornitori abbiano sede nella stessa città SELECT X.Cod, Y.Cod OM AS X, AS Y WHEE X.Sede=Y.Sede; AS Y Cod Nome NSoci Sede 1 Andrea 2 Torino 2 Luca 1 Milano 3 Antonio 3 Milano 4 Gabriele 2 Torino 5 Matteo 3 Venezia Join (n.3) Trovare le coppie di codici dei fornitori tali che entrambi i fornitori abbiano sede nella stessa città Join (n.3) Trovare le coppie di codici dei fornitori tali che entrambi i fornitori abbiano sede nella stessa città SELECT X.Cod, Y.Cod OM AS X, AS Y WHEE X.Sede=Y.Sede; Sono presenti coppie di valori uguali permutazioni della stessa coppia di valori X.Cod 1 1 2 2 3 3 4 4 5 Y.Cod 1 4 2 3 2 3 1 4 5 SELECT X.Cod, Y.Cod OM AS X, AS Y WHEE X.Sede=Y.Sede AND X.Cod <> Y.Cod; Elimina le coppie di valori uguali X.Cod 1 1 2 2 3 3 4 4 5 Y.Cod 1 4 2 3 2 3 1 4 5 2007 olitecnico di Torino 11
Join (n.3) Trovare le coppie di codici dei fornitori tali che entrambi i fornitori abbiano sede nella stessa città Join (n.3) Trovare le coppie di codici dei fornitori tali che entrambi i fornitori abbiano sede nella stessa città SELECT X.Cod, Y.Cod OM AS X, AS Y WHEE X.Sede=Y.Sede AND X.Cod < Y.Cod; Elimina le permutazioni della stessa coppia di valori X.Cod 1 1 2 2 3 3 4 4 5 Y.Cod 1 4 2 3 2 3 1 4 5 SELECT X.Cod, Y.Cod OM AS X, AS Y WHEE X.Sede=Y.Sede AND X.Cod < Y.Cod; X.Cod 1 2 Y.Cod 4 3 Join: sintassi alternativa Join: sintassi alternativa ermette di specificare diversi tipi di join outer join ermette di distinguere condizioni di join condizioni di selezione sulle tuple Introdotta in SQL-2 recepita solo parzialmente nei prodotti commerciali SELECT [DISTINCT] Attributi OM Tabella TipoJoin JOIN Tabella ON CondizioneDiJoin [WHEE CondizioniDiTupla]; TipoJoin = < INNE [ULL LET IGHT] OUTE > INNE join OUTE join Trovare il nome dei fornitori che forniscono almeno un prodotto rosso SELECT Nome OM INNE JOIN ON.Cod=.Cod INNE JOIN ON.Cod=.Cod WHEE.Colore='osso'; Trovare il codice e il nome dei fornitori insieme al codice dei relativi prodotti forniti, visualizzando anche i fornitori che non hanno forniture SELECT.Cod, Nome, Cod OM LET OUTE JOIN ON.Cod=.Cod; 2007 olitecnico di Torino 12
OUTE join.cod.nome.cod 1 Andrea 1 1 Andrea 2 1 Andrea 3 1 Andrea 4 1 Andrea 5 1 Andrea 6 2 Luca 1 2 Luca 2 3 Antonio 2 4 Gabriele 3 4 Gabriele 4 4 Gabriele 5 5 Matteo NULL unzioni aggregate unzioni aggregate Una funzione aggregata opera su un insieme di valori produce come risultato un unico valore (aggregato) unzioni aggregate disponibili in SQL-2 COUNT: conteggio degli elementi in un attributo SUM: somma dei valori di un attributo AVG: media dei valori di un attributo MAX: massimo valore di un attributo MIN: minimo valore di un attributo unzioni aggregate Struttura dell istruzione SELECT (4) Una funzione aggregata opera su un insieme di valori produce come risultato un unico valore (aggregato) è indicata nella clausola SELECT SELECT ElencounzioniAggregateDaVisualizzare OM ElencoTabelleDaUtilizzare [WHEE Condizioni DiTupla ] [ODE BY ElencoAttributiDiOrdinamento ]; 2007 olitecnico di Torino 13
unzioni aggregate unzione COUNT Una funzione aggregata opera su un insieme di valori produce come risultato un unico valore (aggregato) è indicata nella clausola SELECT non si possono indicare anche attributi non aggregati possono essere richieste più funzioni aggregate contemporaneamente Conteggio del numero di elementi di un insieme righe di una tabella valori (eventualmente distinti) di uno o più attributi COUNT (<* [DISTINCT ALL] ListaAttributi >) unzione COUNT (n.1) unzione COUNT (n.2) Trovare il numero di fornitori SELECT COUNT(*) OM ; Cod Nome NSoci Sede 1 Andrea 2 Torino 2 Luca 1 Milano 3 Antonio 3 Milano 4 Gabriele 2 Torino 5 Matteo 3 Venezia 5 Trovare il numero di fornitori che hanno almeno una fornitura 1 6 100 2 1 300 4 3 200 4 4 300 4 5 400 SELECT COUNT(*) OM ; Conta il numero di forniture, non di fornitori 12 unzione COUNT (n.2) Trovare il numero di fornitori che hanno almeno una fornitura 1 6 100 2 1 300 4 3 200 4 4 300 4 5 400 SELECT COUNT(Cod) OM ; Conta il numero di forniture, non di fornitori 12 unzione COUNT (n.2) Trovare il numero di fornitori che hanno almeno una fornitura 1 6 100 2 1 300 4 3 200 4 4 300 4 5 400 SELECT COUNT(DISTINCT Cod) OM ; Conta il numero di fornitori diversi 4 2007 olitecnico di Torino 14
unzione COUNT unzioni aggregate e WHEE Conteggio del numero di elementi di un insieme righe di una tabella valori (eventualmente distinti) di uno o più attributi COUNT (<* [DISTINCT ALL] ListaAttributi >) Se l argomento della funzione è preceduto da DISTINCT, conta il numero di valori distinti dell argomento Trovare il numero di fornitori che forniscono il prodotto 2 1 6 100 2 1 300 4 3 200 4 4 300 4 5 400 SELECT COUNT(*) OM WHEE Cod='2'; 3 unzioni aggregate e WHEE Le funzioni aggregate sono valutate solo dopo l applicazione di tutti i predicati nella clausola WHEE unzioni SUM, MAX, MIN, AVG SUM, MAX, MIN e AVG ammettono come argomento un attributo o un espressione SUM e AVG ammettono solo attributi di tipo numerico o intervallo di tempo MAX e MIN richiedono che l espressione sia ordinabile possono essere applicate anche su stringhe di caratteri e istanti di tempo unzione SUM 1 6 100 2 1 300 4 3 200 4 4 300 4 5 400 Trovare la quantità totale di pezzi forniti per il prodotto 2 SELECT SUM(Qta) OM WHEE Cod='2'; 800 2007 olitecnico di Torino 15
aggruppamento aggruppamento er ogni prodotto, trovare la quantità totale di pezzi forniti 1 6 100 2 1 300 4 3 200 4 4 300 4 5 400 2 1 300 4 3 200 4 4 300 4 5 400 1 6 100 Cod 1 600 2 800 3 600 4 500 5 500 6 100 er ogni prodotto, trovare la quantità totale di pezzi forniti SELECT Cod, SUM(Qta) OM GOU BY Cod; Clausola di raggruppamento GOU BY GOU BY ElencoAttributiDiaggruppamento l ordine degli attributi di raggruppamento è ininfluente Nella clausola SELECT possono comparire solo attributi presenti nella clausola GOU BY funzioni aggregate GOU BY e WHEE er ogni prodotto, trovare la quantità totale di pezzi forniti da fornitori con sede a Milano Cod Nome NSoci Sede 1 Andrea 2 Torino 2 Luca 1 Milano 3 Antonio 3 Milano 4 Gabriele 2 Torino 5 Matteo 3 Venezia 1 6 100 2 1 300 4 3 200 4 4 300 4 5 400 GOU BY e WHEE er ogni prodotto, trovare la quantità totale di pezzi forniti da fornitori con sede a Milano SELECT... OM, WHEE.Cod=.Cod AND Sede='Milano'... GOU BY e WHEE er ogni prodotto, trovare la quantità totale di pezzi forniti da fornitori con sede a Milano.Cod.Nome.NSoci.Sede.Cod.Cod.Qta 1 Andrea 2 Torino 1 Andrea 2 Torino 1 Andrea 2 Torino 1 Andrea 2 Torino 1 Andrea 2 Torino 1 Andrea 2 Torino 1 6 100 2 Luca 1 Milano 2 1 300 2 Luca 1 Milano 3 Antonio 3 Milano 4 Gabriele 2 Torino 4 3 200 4 Gabriele 2 Torino 4 4 300 4 Gabriele 2 Torino 4 5 400 2007 olitecnico di Torino 16
GOU BY e WHEE er ogni prodotto, trovare la quantità totale di pezzi forniti da fornitori con sede a Milano GOU BY e WHEE er ogni prodotto, trovare la quantità totale di pezzi forniti da fornitori con sede a Milano SELECT Cod, SUM(Qta) OM, WHEE.Cod=.Cod AND Sede='Milano' GOU BY Cod;.Cod.Qta 1 300 2 400 2 200.Cod 1 300 2 600 I prodotti senza forniture non sono inclusi nel risultato SELECT.Cod, Nome, SUM(Qta) OM, WHEE.Cod=.Cod GOU BY.Cod, Nome GOU BY e SELECT er ogni prodotto, trovare il codice, il nome e la quantità totale fornita Artificio sintattico gli attributi univocamente determinati da attributi già presenti nella clausola GOU BY possono essere aggiunti senza alterare il risultato Struttura dell istruzione SELECT (5) SELECT [DISTINCT] ElencoAttributiDaVisualizzare OM ElencoTabelleDaUtilizzare [WHEE CondizioniDiTupla ] [GOU BY ElencoAttributiDiaggruppamento ] [ODE BY ElencoAttributiDiOrdinamento ]; Condizione di selezione sui gruppi Trovare la quantità totale di pezzi forniti per i prodotti per cui sono forniti in totale almeno 600 pezzi la condizione è definita su valori aggregati Non è possibile utilizzare la clausola WHEE Trovare la quantità totale di pezzi forniti per i prodotti per cui sono forniti in totale almeno 600 pezzi 1 6 100 2 1 300 4 3 200 4 4 300 4 5 400 Condizione di selezione sui gruppi (n.1) 2 1 300 4 3 200 4 4 300 4 5 400 1 6 100 Cod 1 600 2 800 3 600 2007 olitecnico di Torino 17
Condizione di selezione sui gruppi (n.1) Condizione di selezione sui gruppi (n.2) Trovare la quantità totale di pezzi forniti per i prodotti per cui sono forniti in totale almeno 600 pezzi SELECT Cod, SUM(Qta) OM GOU BY Cod HAVING SUM(Qta)>=600; La clausola HAVING permette di specificare condizioni su funzioni aggregate Trovare il codice dei prodotti rossi forniti da più di un fornitore 1 Maglia osso 40 Torino 3 Camicia Blu 48 oma 5 Gonna Blu 40 Milano 6 Bermuda osso 42 Torino 1 6 100 2 1 300 4 3 200 4 4 300 4 5 400 Condizione di selezione sui gruppi (n.2) Trovare il codice dei prodotti rossi forniti da più di un fornitore SELECT.Cod OM, WHEE.Cod=.Cod AND Colore='osso' GOU BY.Cod HAVING COUNT(*)>1; Condizione di selezione sui gruppi (n.2) Trovare il codice dei prodotti rossi forniti da più di un fornitore.cod.cod.qta.cod.nome.colore.taglia.magazzino 1 Maglia osso 40 Torino 2 1 300 1 Maglia osso 40 Torino 1 6 100 6 Bermuda osso 42 Torino Cod 1 Struttura dell istruzione SELECT SELECT [DISTINCT] ElencoAttributiDaVisualizzare OM ElencoTabelleDaUtilizzare [WHEE CondizioniDiTupla ] [GOU BY ElencoAttributiDiaggruppamento ] [HAVING CondizioniSuAggregati ] [ODE BY ElencoAttributiDiOrdinamento ]; 2007 olitecnico di Torino 18