Interrogazioni Le interrogazioni in SQL sono formulate in modo dichiarativo specificando cioè cosa si vuole ottenere e non come lo si vuole ottenere.

Slides:



Advertisements
Presentazioni simili
Interrogazioni Semplici Le operazioni di interrogazione vengono specificate per mezzo dellistruzione select select ListaAttributi from ListaTabelle [where.
Advertisements

Structured Query Language (SQL) Presentazione 13.1 Informatica Generale (Prof. Luca A. Ludovico)
Esercitazioni del Corso di Sistemi Informativi Marina Mongiello
SQL.
19/01/2014 Viste. 19/01/2014 Viste Le Viste Logiche o Viste o View possono essere definite come delle tabelle virtuali, i cui dati sono riaggregazioni.
Laboratorio di Basi di Dati Introduzione ad Access 2ª Parte.
Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, 1999
Duplicati Lalgebra relazionale non ammette duplicati, SQL li ammette. Quindi select Città from Persona where Cognome= Rossi estrae una lista di città in.
SELECT STATEMENT Clausola WHERE permette di limitare il numero di record da estrarre SELECT */ [DISTINCT] colonna/ espressione [alias],… FROM table [WHERE.
SQL Interrogazioni. 2 Interrogazioni in SQL Non esiste un SQL standard (vari dialetti) Formulazione di interrogazioni (query) è parte del Data Manipulation.
Basi di dati I Prof.ssa Rosalba Giugno Prof. Alfredo Pulvirenti SQL :Structured Query Language: SELECT (IV) SQL (Slide tratte in parte da da Atzeni, Ceri,
Il Linguaggio SQL. Le interrogazioni in SQL (continua…) La parte di SQL dedicata alla formulazione di interrogazioni fa parte del DML. SQL esprime le.
SQL, esempi 30/10/2014Basi di dati SQL1. 30/10/2014Basi di dati SQL2 CREATE TABLE, esempi CREATE TABLE corsi( codice numeric NOT NULL PRIMARY KEY, titolo.
Algebra relazionale (III). Esempi di Interrogazioni: 3 Trovare matricola e nome dei capi i cui impiegati guadagnano tutti più di Tutti gli impiegati?
Interrogazioni (parte 2)
Interrogazioni Le interrogazioni in SQL sono formulate in modo dichiarativo specificando cioè cosa si vuole ottenere e non come lo si vuole ottenere. L’interrogazione.
Vincoli Interrelazionali Per i vincoli visti l’inserimento di un valore che li viola viene semplicemente impedito. In caso di vincoli di integrità referenziale,
Vincoli interrelazionali
Raggruppamenti e target list scorretta select padre, avg(f.reddito), p.reddito from persone f join paternita on figlio = nome join persone p on padre =
Interrogazioni Le interrogazioni in SQL sono formulate in modo dichiarativo specificando cioè cosa si vuole ottenere e non come lo si vuole ottenere. L’interrogazione.
Funzionalità del DBMS relazionale l Funzioni per –definizione della base di dati –inserimento / rimozione /aggiornamento di informazioni deve soddisfare.
Approfondimenti SQL.
Linguaggio SQL prima parte Linguaggio SQL prima parte A. Lorenzi, E. Cavalli INFORMATICA PER SISTEMI INFORMATIVI AZIENDALI Copyright © Istituto Italiano.
SQL Linguaggio per l’interrogazione di una base dati.
Il linguaggio SQL (Structured Query Language) è il linguaggio standard per creare, manipolare e interrogare database relazionali. SQL non è case-sensitive:
Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, Capitolo 4:SQL 24/09/2002.
Basi di dati - Fondamenti
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
DML – Data Manipulation Language
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Le operazioni relazionali
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Interrogazione di una base di dati relazionale
Le operazioni relazionali (continua)
Atzeni-Ceri-Paraboschi-Torlone, Basi di dati, Capitolo 3
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
COME SI CREA UNA TABELLA CON UNA CHIAVE ESTERNA
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Corso di Basi di Dati Il Linguaggio SQL
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Interrogazione di una base di dati relazionale
Corso di Basi di Dati Il Linguaggio SQL
Corso di Basi di Dati Il Linguaggio SQL
Interrogazione di una base di dati relazionale
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
I vincoli di integrità Alcuni aspetti della realtà NON possono essere modellati solamente con entità, attributi e relazioni, per esempio i vincoli di integrità.
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Corso di Basi di Dati Il Linguaggio SQL
Universita’ di Milano Bicocca Corso di Basi di dati 1 in eLearning C
Linguaggio SQL prima parte
SQL, Definizione e interrogazione di basi di dati
Interrogazioni Nidificate
SQL per la modifica di basi di dati
Structured Query Language
Join, una difficoltà Impiegato Reparto Rossi A Neri B Bianchi Reparto
Operatori aggregati e raggruppamenti
Quantificazione Esistenziale ed Universale
Selezione e Proiezione
La programmazione strutturata
Docente: Sabato Bufano
Vincoli di Integrità Non tutte le combinazioni possibili di valori dei domini su cui è definita una relazione sono accettabili. Alcuni attributi possono.
Transcript della presentazione:

Interrogazioni Le interrogazioni in SQL sono formulate in modo dichiarativo specificando cioè cosa si vuole ottenere e non come lo si vuole ottenere. L’interrogazione viene passata all’ottimizzatore 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.

Interrogazioni select ListaAttributi (target list) L’istruzione 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.

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

Nome Età Persone Reddito Madre Maternità Figlio Luisa Anna Maria Olga Filippo Andrea Aldo Luigi Andrea 27 Maria 55 Anna 50 Filippo 26 Luigi Franco 60 Olga 30 Sergio 85 Luisa 75 Aldo 25 21 42 35 40 20 41 87 15 Padre Paternità Figlio Luigi Franco Sergio Olga Filippo Andrea Aldo

Selezione e proiezione Nome e reddito delle persone con meno di trenta anni PROJNome, Reddito(SELEta<30(Persone)) select nome, reddito from persone where eta < 30 select p.nome as nome, p.reddito as reddito from persone p where p.eta < 30

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

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

Clausola where Ammette come argomento una condizione logica. Gli operatori ammessi per i predicati semplici (confronto attributo- costante o attributo-espressione) sono =, <>, <, >, <=, >= 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’)

Operatore like Per i confronti fra stringhe è definito anche l’operatore 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 ‘_o%i’ La condizione è soddisfatta da Rossi Borroni Poli Pollastri ecc.

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

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.

Duplicati L’algebra 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à

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] Alias]on CondizioneJoin} [ where AltraCondizione ] TipoJoin può assumere i valori inner, right [outer], left [outer], full [outer] inner è il default. C’è anche l’estensione natural che implica la condizione di uguaglianza sugli attributi con lo stesso nome.

Join implicito ed esplicito Padre e madre di ogni persona select paternita.figlio, padre, madre from maternita, paternita where paternita.figlio = maternita.figlio select madre, paternita.figlio, padre from maternita join paternita on paternita.figlio = maternita.figlio

Alias e variabili L’uso 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 <> I2.Nome and I2.Dipart = ‘Produzione’

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

Operatori aggregati In algebra relazionale le espressioni vengono valutate sulle singole tuple in successione. Talvolta però possono essere necessarie informazioni derivabili dall’esame di tutte le tuple o di più tuple contemporanemente. SQL prevede una serie di operatori aggregati: count, sum, max, min, avg con sintassi count ( < * | [distinct | all] ListaAttributi > ) < sum|max|min|avg >([distinct | all] AttrEspr ) Es. Determinare il numero degli impiegati che si chiamano Rossi select count(*) from Impiegato where nome= ‘Rossi’

Interrogazioni con raggruppamento Gli operatori aggregati vengono applicati a tutte le righe che vengono prodotte come risultato dell’operazione. Può essere necessario applicare l’operatore 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. L’operatore group by specifica come suddividere le tabelle in sottoinsiemi. Es. select Dipart, sum(Stipendio) from Impiegato group by Dipart

Un’interrogazione scorretta: select nome, max(reddito) from persone Di chi sarebbe il nome? La target list deve essere omogenea select min(eta), avg(reddito)