Interrogazioni - PowerPoint PPT Presentation

1 / 24
About This Presentation
Title:

Interrogazioni

Description:

... zero). Es. select * from Impiegato where Cognome like _o%i La condizione soddisfatta da Rossi Borroni Poli Pollastri ecc. – PowerPoint PPT presentation

Number of Views:4
Avg rating:3.0/5.0
Slides: 25
Provided by: Stefano59
Category:

less

Transcript and Presenter's Notes

Title: Interrogazioni


1
Interrogazioni
  • Le interrogazioni in SQL sono formulate in modo
    dichiarativo specificando cioè cosa si vuole
    ottenere e non come lo si vuole ottenere.
  • Linterrogazione viene passata allottimizzatore
    di interrogazioni (query optimizer) che fa parte
    del DBMS. Questo la analizza e la traduce nel
    linguaggio di interrogazione interno al DBMS.
  • Per questo chi programma in SQL deve cercare di
    scrivere codice leggibile e facilmente
    modificabile, piuttosto che efficiente.

2
Interrogazioni
  • Listruzione base per le interrogazioni è select
  • select ListaAttributi (target list)
  • from ListaTabelle (clausola from)
  • where Condizione (clausola where)
  • Più in dettaglio
  • select AttrEspr as Alias, AttrEspr as
    Alias
  • from Tabella as Alias, Tabella as
    Alias
  • where Condizione
  • Seleziona le righe che soddisfano la condizione
    where fra quelle appartenenti al prodotto
    cartesiano delle tabelle in ListaTabelle.
  • Ogni colonna (tabella) può essere ridenominata
    con un alias.

3
Interrogazioni
  • Es.
  • Data una base di dati che contiene le tabelle
  • IMPIEGATO(Nome, Cognome, Dipart, Ufficio,
    Stipendio, Città)
  • DIPARTIMENTO(Nome, Indirizzo,Città)
  • select Stipendio/12 as SalarioMensile
  • from Impiegato
  • where Cognome Rossi
  • Il risultato è una tabella con una colonna
    rinominata SalarioMensile e tante righe quanti
    sono gli impiegati che si chiamano Rossi.
  • Se si usa dopo select si selezionano tutti gli
    attributi

4
(No Transcript)
5
Selezione e proiezione
Nome e reddito delle persone con meno di trenta
anni PROJNome, Reddito(SELEtalt30(Persone)) se
lect nome, reddito from persone where eta lt
30 select p.nome as nome, p.reddito as
reddito from persone p where p.eta lt 30
6
Interrogazioni su più tabelle
  • Se si vogliono estrarre informazioni da più
    tabelle, si pone come argomento della clausola
    from una lista delle tabelle.
  • Se si deve formulare un join, è possibile farlo
    esplicitando il collegamento fra le due tabelle
    nella clausola where.
  • Es.
  • Estrarre i nomi degli impiegati e le città dove
    lavorano.
  • select Impiegato.Nome, Impiegato.Cognome,
    Dipartimento.Città
  • from Impiegato, Dipartimento
  • where Impiegato.Dipart Dipartimento.Nome

7
Interrogazioni su più tabelle
  • E possibile omettere il nome della tabella per
    quegli attributi che non presentano ambiguità.
  • select Impiegato.Nome, Cognome,
    Dipartimento.Città
  • from Impiegato, Dipartimento
  • where Dipart Dipartimento.Nome
  • e abbreviare ulteriormente il codice utilizzando
    gli alias
  • select I.Nome, Cognome, D.Città
  • from Impiegato as I, Dipartimento as D
  • where Dipart D.Nome

8
Clausola where
  • Ammette come argomento una condizione logica.
  • Gli operatori ammessi per i predicati semplici
    (confronto attributo-costante o
    attributo-espressione) sono
  • , ltgt, lt, gt, lt, gt
  • I predicati semplici possono essere modificati
    tramite gli operatori logici and, or, not.
  • not ha precedenza su and e or, ma non è definita
    la precedenza fra and e or. Quando si coordinano
    più predicati con and e or è bene esplicitare le
    precedenze con le parentesi.
  • Es.
  • select Nome
  • from Impiegato
  • where Cognome Rossi and
  • (Dipart Amministraz or Dipart Produz)

9
Operatore like
  • Per i confronti fra stringhe è definito anche
    loperatore like.
  • Il confronto è effettuato con una stringa che può
    contenere i caratteri speciali e _ .
  • _ rappresenta un carattere arbitrario
  • rappresenta in numero arbitrario di caratteri
    (anche zero).
  • Es.
  • select
  • from Impiegato
  • where Cognome like _oi
  • La condizione è soddisfatta da Rossi Borroni Poli
    Pollastri ecc.

10
Gestione dei valori nulli
  • La gestione dei valori nulli, a seconda
    dellimplementazione, avviene attraverso una
    logica a due valori come nellSQL-89, o a tre
    valori (vero, falso, unknown) come nellSQL-2.
  • Le condizioni sui valori nulli possono essere
    definite attraverso i predicati is null o is not
    null.

11
Interpretazione algebrica delle interrogazioni
  • E possibile mettere in corrispondenza
    interrogazioni SQL ed espressioni equivalenti in
    algebra relazionale.
  • Es.
  • select T1.Attributo11, . Th.Attributohm
  • from Tabella1 as T1, .... Tabellah as Th
  • where Condizione
  • equivale a
  • P T1.Attributo11.... Th.Attributohm (sCondizione
    (Tabella1 x Tabella2 x .... x Tabellah) )
  • Espressioni più complicate hanno comunque una
    traduzione, anche se non così diretta.

12
Duplicati
  • Lalgebra relazionale non ammette duplicati, SQL
    li ammette.
  • Quindi
  • select Città
  • from Persona
  • where Cognome Rossi
  • estrae una lista di città in cui una città può
    comparire più volte.
  • Per evitare i duplicati SQL prevede la parola
    chiave distinct
  • da inserire subito dopo select.
  • select distinct Città
  • from Persona
  • where Cognome Rossi

13
Join
  • In SQL-2 è stata introdotta la seguente sintassi
    per esprimere il join ed estenderlo ai join
    esterni
  • select AttrEspr as Alias, AttrEspr as
    Alias
  • from Tabella as Alias
  • TipoJoin join Tabella as Aliason
    CondizioneJoin
  • where AltraCondizione
  • TipoJoin può assumere i valori
  • inner, right outer, left outer, full outer
  • inner è il default.
  • Cè anche lestensione natural che implica la
    condizione di uguaglianza sugli attributi con lo
    stesso nome.

14
Join implicito ed esplicito
  • Padre e madre di ogni persona
  • select paternita.figlio, padre, madrefrom
    maternita, paternitawhere paternita.figlio
    maternita.figlio
  • select madre, paternita.figlio, padre from
    maternita join paternita on
  • paternita.figlio
    maternita.figlio

15
Alias e variabili
  • Luso degli alias consente di
  • compattare il codice
  • fare riferimento a più esemplari della stessa
    tabella
  • creare interrogazioni nidificate
  • Se una tabella compare una sola volta non cè
    differenza fra variabile ed alias.
  • Se compare più volte si parla più propriamente di
    variabile.
  • select I1.Cognome, I1.Nome
  • from Impiegato I1, Impiegato I2
  • where I1.Nome I2.Cognome and
  • I1.Nome ltgt I2.Nome and
  • I2.Dipart Produzione

16
Ordinamento
  • E possibile anche ordinare le righe del
    risultato di una interrogazione attraverso la
    clausola order by, a chiusura di una
    interrogazione.
  • order by AttrdiOrdinamento asc desc
  • , AttrdiOrdinamento asc desc
  • asc (default) indica ordinamento ascendente, desc
    discendente.
  • Il primo attributo ha priorità, a parità di
    valore si usa il secondo ecc.
  • select
  • from Persona
  • order by Cognome, Nome

17
Operatori aggregati
  • In algebra relazionale le espressioni vengono
    valutate sulle singole tuple in successione.
    Talvolta però possono essere necessarie
    informazioni derivabili dallesame di tutte le
    tuple o di più tuple contemporanemente.
  • SQL prevede una serie di operatori aggregati
  • count, sum, max, min, avg
  • con sintassi
  • count ( lt distinct all ListaAttributi gt )
  • lt summaxminavg gt(distinct all AttrEspr )
  • Es. Determinare il numero degli impiegati che si
    chiamano Rossi
  • select count()
  • from Impiegato
  • where nome Rossi

18
Interrogazioni con raggruppamento
  • Gli operatori aggregati vengono applicati a tutte
    le righe che vengono prodotte come risultato
    delloperazione.
  • Può essere necessario applicare loperatore solo
    ad un sottoinsieme delle righe.
  • SQL non ammette che nella stessa target list
    compaiano funzioni aggregate ed espressioni a
    livello di riga, come il nome di un attributo.
  • Loperatore group by specifica come suddividere
    le tabelle in sottoinsiemi.
  • Es.
  • select Dipart, sum(Stipendio)
  • from Impiegato
  • group by Dipart

19
Uninterrogazione scorretta select nome,
max(reddito) from persone Di chi sarebbe il
nome? La target list deve essere omogenea select
min(eta), avg(reddito) from persone
20
Interrogazioni con raggruppamento
  • In ogni interrogazione che usa group by argomento
    della select può essere solo un sottoinsieme
    degli attributi usati nella clausola group by
  • Es. di interrogazione scorretta
  • select Ufficio
  • from Impiegato
  • group by Dipart
  • Poiché deve venire prodotta una sola riga per
    ogni valore di Dipart, e, a parità di tale
    valore, possono aversi diversi valori di Ufficio,
    il risultato dellinterrogazione è indeterminato.
  • In alcuni casi (es. se lattributo non compreso
    nella clausola group by è chiave) la query
    potrebbe fornire un risultato corretto, ma per
    semplicità SQL lo vieta comunque.

21
Predicati sui gruppi
  • Può essere anche necessario restringere i gruppi
    attraverso lapplicazione di condizioni.
  • Se le condizioni sono verificabili a livello
    delle singole righe, basta utilizzare la clausola
    where, altrimenti si aggiunge una condizione alla
    group by attraverso lestensione having
  • select Dipart, sum(Stipendio) as SommaStipendi
  • from Impiegati
  • group by Dipart
  • having sum(Stipendio) gt 100
  • Se non si specifica group by e si usa having da
    solo la condizione è applicata a tutte le righe.
    Il problema è che se la condizione non è
    verificata, il risultato sarà vuoto.

22
Select
  • La forma di select cui siamo arrivati dopo le
    estensioni viste è quindi
  • SelectSQL select ListaAttributiOEspressioni
  • from ListaTabelle
  • where CondizioniSemplici
  • group by ListaAttributiDiRaggruppamento
  • having CondizioniAggregate
  • order by ListaAttributiDiOrdinamento

23
Interrogazioni di tipo insiemistico
  • SQL fornisce anche gli operatori di tipo
    insiemistico
  • union, intersect, except (minus)
  • con la seguente sintassi
  • SelectSQL
  • lt union intersect except gt all
    SelectSQL
  • NB
  • intersect e except potrebbero anche essere
    derivati attraverso opportune query
  • gli operatori insiemistici eseguono per default
    una eliminazione dei duplicati all specifica di
    non farla
  • gli schemi su cui si opera non devono essere
    identici ma avere uguale numero di attributi, con
    domini compatibili. La corrispondenza è per
    posizione.

24
Interrogazioni di tipo insiemistico
  • Es.
  • Estrarre nomi e cognomi degli impiegati
  • select Nome
  • from Impiegato
  • union
  • select Cognome
  • from Impiegato
  • Estrarre i cognomi degli impiegati che sono anche
    nomi
  • select Nome
  • from Impiegato
  • intersect
  • select Cognome
  • from Impiegato
Write a Comment
User Comments (0)
About PowerShow.com