Interrogazioni Semplici Le operazioni di interrogazione vengono specificate per mezzo dellistruzione...

Click here to load reader

download Interrogazioni Semplici Le operazioni di interrogazione vengono specificate per mezzo dellistruzione select select ListaAttributi from ListaTabelle [where

of 34

  • date post

    01-May-2015
  • Category

    Documents

  • view

    213
  • download

    0

Embed Size (px)

Transcript of Interrogazioni Semplici Le operazioni di interrogazione vengono specificate per mezzo dellistruzione...

  • Slide 1
  • Interrogazioni Semplici Le operazioni di interrogazione vengono specificate per mezzo dellistruzione select select ListaAttributi from ListaTabelle [where Condizione]
  • Slide 2
  • select ListaAttributi from ListaTabelle [where Condizione] Seleziona tra le righe che appartengono al prodotto cartesiano delle tabelle elencate nella clausola from quelle che soddisfano la clausola where, mostrando gli attributi indicati nella clausola select
  • Slide 3
  • impiegato +----------+---------+-----------------+---------+-----------+---------+ | nome | cognome | dipart | ufficio | stipendio | citt | +----------+---------+-----------------+---------+-----------+---------+ | Carlo | Bianchi | Produzione | 20 | 36 | Torino | | Carlo | Rossi | Direzione | 14 | 80 | Milano | | Franco | Neri | Distribuzione | 16 | 45 | Napoli | | Giuseppe | Verdi | Amministrazione | 20 | 40 | Roma | | Lorenzo | Galli | Direzione | 7 | 73 | Genova | | Marco | Franco | Produzione | 20 | 46 | Roma | | Mario | Rossi | Amministrazione | 10 | 45 | Milano | | Paola | Rosati | Amministrazione | 75 | 40 | Venezia | +----------+---------+-----------------+---------+-----------+---------+ Estrarre lo stipendio degli impiegati di cognome Rossi select Stipendio from Impiegato where Cognome = 'Rossi'; +-----------+ | Stipendio | +-----------+ | 80 | | 45 | +-----------+
  • Slide 4
  • Come argomento della clausola select pu comparire il carattere * (asterisco) che rappresenta la selezione di tutti gli attributi delle tabelle elencate nella clausola from select * from Impiegato where Cognome = 'Rossi' +-------+---------+-----------------+---------+-----------+--------+ | nome | cognome | dipart | ufficio | stipendio | citt | +-------+---------+-----------------+---------+-----------+--------+ | Carlo | Rossi | Direzione | 14 | 80 | Milano | | Mario | Rossi | Amministrazione | 10 | 45 | Milano | +-------+---------+-----------------+---------+-----------+--------+
  • Slide 5
  • Nella clausola select possono comparire generiche espressioni select Stipendio/12 as StipendioMensile from Impiegato where Cognome = 'Bianchi'; +------------------+ | StipendioMensile | +------------------+ | 3.0000 | +------------------+ Si pu notare che ogni colonna pu essere rinominata con lAlias ( as )
  • Slide 6
  • Quando linterrogazione coinvolge pi tabelle queste si pongono come argomento della clausola from dipartimento +-----------------+-----------------+--------+ | nome | Indirizzo | Citt | +-----------------+-----------------+--------+ | Amministrazione | Via Tito, 27 | Milano | | Direzione | Via Tito, 27 | Milano | | Distribuzione | Via segre, 9 | Roma | | Produzione | Piazza Terzi, 3 | Torino | | Ricerca | Via Larga, 12 | Milano | +-----------------+-----------------+--------+ Estrarre i nomi degli impiegati e le citt dove lavorano select Impiegato.Nome, Cognome, Dipartimento.Citta from Impiegato, Dipartimento where Impiegato.Dipart=Dipartimento.Nome; +----------+---------+--------+ | Nome | Cognome | Citta | +----------+---------+--------+ | Giuseppe | Verdi | Milano | | Mario | Rossi | Milano | | Paola | Rosati | Milano | | Carlo | Rossi | Milano | | Lorenzo | Galli | Milano | | Franco | Neri | Roma | | Carlo | Bianchi | Torino | | Marco | Franco | Torino | +----------+---------+--------+ impiegato +----------+---------+-----------------+---------+-----------+---------+ | nome | cognome | dipart | ufficio | stipendio | citt | +----------+---------+-----------------+---------+-----------+---------+ | Carlo | Bianchi | Produzione | 20 | 36 | Torino | | Carlo | Rossi | Direzione | 14 | 80 | Milano | | Franco | Neri | Distribuzione | 16 | 45 | Napoli | | Giuseppe | Verdi | Amministrazione | 20 | 40 | Roma | | Lorenzo | Galli | Direzione | 7 | 73 | Genova | | Marco | Franco | Produzione | 20 | 46 | Roma | | Mario | Rossi | Amministrazione | 10 | 45 | Milano | | Paola | Rosati | Amministrazione | 75 | 40 | Venezia | +----------+---------+-----------------+---------+-----------+---------+
  • Slide 7
  • Estrarre i nomi degli impiegati e le citt dove lavorano select Impiegato.Nome, Cognome, Dipartimento.Citta from Impiegato, Dipartimento where Impiegato.Dipart=Dipartimento.Nome; In questa interrogazione si noti luso delloperatore punto per identificare le tabelle da cui vengono estratti gli attributi. E obbligatorio specificare il nome della tabelle quando sono presenti attributi con lo stesso nome. Notare che la condizione della clausola where esprime in modo esplicito un join, cio il legame tra due tabelle.
  • Slide 8
  • La clausola where ammette come operando una espressione booleana costruita combinando predicati semplici con gli operatori and, or, not. Operatori : =, ,,
  • Estrarre i nomi e i cognomi degli impiegati che lavorano nel dipartimento amministrazione o nel dipartimento produzione mysql> select Nome, Cognome -> from Impiegato -> where Dipart='Amministrazione' or Dipart = 'Produzione'; +----------+---------+ | Nome | Cognome | +----------+---------+ | Carlo | Bianchi | | Giuseppe | Verdi | | Marco | Franco | | Mario | Rossi | | Paola | Rosati | +----------+---------+
  • Slide 11
  • Estrarre i nomi degli impiegati di cognome Rossi che lavorano nei dipartimenti Amministrazione o Produzione: select Nome from Impiegato where Cognome='Rossi' and (Dipart='Amministrazione' or Dipart='Produzione'); +-------+ | Nome | +-------+ | Mario | +-------+
  • Slide 12
  • Oltre ai normali predicati di confronto SQL mette a disposizione un operatore like per il confronto di stringhe, che permette confronti con stringhe in cui compaiono i caratteri _ (trattino sottolineato) e %(percentuale). _ un carattere arbitrario % una stringa di un numero arbitrario di caratteri arbitrari mysql> select * -> from Impiegato -> where Cognome like '_o%i'; +-------+---------+-----------------+---------+-----------+---------+ | nome | cognome | dipart | ufficio | stipendio | citta | +-------+---------+-----------------+---------+-----------+---------+ | Carlo | Rossi | Direzione | 14 | 80 | Milano | | Mario | Rossi | Amministrazione | 10 | 45 | Milano | | Paola | Rosati | Amministrazione | 75 | 40 | Venezia | +-------+---------+-----------------+---------+-----------+---------+
  • Slide 13
  • Gestione dei valori nulli SQL mette a disposizione due predicati: is null is not null da utilizzare nella clausola where
  • Slide 14
  • Gestione dei duplicati. Uninterrogazione pu produrre dei duplicati select citt from impiegato; +---------+ | citt | +---------+ | Torino | | Milano | | Napoli | | Roma | | Genova | | Roma | | Milano | | Venezia | +---------+ Per eliminarli si pu usare la parola chiave distinct select distinct citt from impiegato; +---------+ | citt | +---------+ | Torino | | Milano | | Napoli | | Roma | | Genova | | Venezia | +---------+
  • Slide 15
  • Join I join permettono di distinguere le condizioni che rappresentano le condizioni di join e quelle che rappresentano le condizioni di selezione sulle righe. select attributi from tabelle join tabella on CondizioneDiJoin where AltraCondizione Estrarre i nomi degli impiegati e le citt dove lavorano select Impiegato.Nome, Cognome, Dipartimento.Citta from Impiegato, Dipartimento where Dipart=Dipartimento.Nome; select Impiegato.Nome, Cognome, Dipartimento.Citta from Impiegato join Dipartimento on Dipart=Dipartimento.Nome
  • Slide 16
  • Join Il join visto precedentemente il natural join. Con questo join il risultato in generale un sottoinsieme delle righe di ciascuna tabella, quelle per le quali esiste una associazione tra le tabelle. Nel caso in cui si vogliano tutte le righe di una o di entrambe le tabelle si devono usare i left, right o full join
  • Slide 17
  • Consideriamo le seguenti tabelle: guidatore +------------+-------+---------+ | NroPatente | Nome | Cognome | +------------+-------+---------+ | AP4544442R | Marco | Neri | | PZ1012436B | Carlo | Bianchi | | VR2030020Y | Mario | Rossi | +------------+-------+---------+ automobile +---------+--------+---------+------------+ | Targa | Marca | Modello | NroPatente | +---------+--------+---------+------------+ | AA652FF | Fiat | Brava | VR2030020Y | | AB574WW | Fiat | Punto | VR2030020Y | | BB421JJ | Fiat | Panda | MI2020030U | | BJ747XX | Lancia | Delta | PZ1012436B | +---------+--------+---------+------------+ Estrarre i guidatori e le loro automobili, compresi i guidatori senza automobili select Nome,Cognome,guidatore.NroPatente,Targa,Modello from Guidatore left join automobile on Guidatore.NroPatente=Automobile.NroPatente; +-------+---------+------------+---------+---------+ | Nome | Cognome | NroPatente | Targa | Modello | +-------+---------+------------+---------+---------+ | Marco | Neri | AP4544442R | | | | Carlo | Bianchi | PZ1012436B | BJ747XX | Delta | | Mario | Rossi | VR2030020Y | AA652FF | Brava | | Mario | Rossi | VR2030020Y | AB574WW | Punto | +-------+---------+------------+---------+---------+ Estrarre i guidatori e le loro automobili, compresi le automobili senza guidatore select Nome,Cognome,guidatore.NroPatente,Targa,Modello from Guidatore right join automobile on Guidatore.NroPatente=Automobile.NroPatente; +-------+---------+------------+---------+---------+ | Nome | Cognome | NroPatente | Targa | Modello | +-------+---------+------------+---------+---------+ | Mario | Rossi | VR2030020Y | AA652FF | Brava | | Mario | Rossi | VR2030020Y | AB574WW | Punto | | | | | BB421JJ | Panda | | Carlo | Bianchi | PZ1012436B | BJ747XX | Delta | +-------+---------+------------+---------+---------+
  • Slide 18