Informatica per l'Impresa
Lezioni di Laboratorio sui Data Base
Docente Tutor: Dott. Gianluigi Roveda
Informatica per l'Impresa – Lezioni di Laboratorio sui Data Base
OBIETTIVO:OBIETTIVO:
Rivedere come attività di laboratorio le query di tipo select scritte in SQL ma con le variazioni nella sintassi adottate da Base (Open Office). Qui vedremo query di tipo SELECT.
MODALITA' DI LAVORO:MODALITA' DI LAVORO:
Ripetere le operazioni effettuate dal docente nella propria postazione (esercizi guidati).
Informatica per l'Impresa – Lezioni di Laboratorio sui Data Base
QUERY di SELEZIONEQUERY di SELEZIONESELECT *
FROM <NOME TABELLA>
WHERE <CONDIZIONE>;
SELECT *
FROM "Studenti"
WHERE "Cognome"='Rossa';
Nota Bene:Nota Bene: 1. i campi sono compresi tra i doppi apici;2. i valori sono compresi tra apici singoli;3. il simbolo “*” indica l'elenco di tutti i campi di una tabella;
Informatica per l'Impresa – Lezioni di Laboratorio sui Data Base
QUERY di PROIEZIONE 1/2QUERY di PROIEZIONE 1/2
SELECT <lista attributi>
FROM <NOME TABELLA>;
SELECT “Matricola”, “Cognome”
FROM "Studenti";
Informatica per l'Impresa – Lezioni di Laboratorio sui Data Base
QUERY di PROIEZIONE 2/2QUERY di PROIEZIONE 2/2
SELECT “Cognome”
FROM "Studenti";
SELECT DISTINCT "Cognome"
FROM "Studenti";
Elimino i doppioni tra le righe!!!
QUERY di SELEZIONE & PROIEZIONEQUERY di SELEZIONE & PROIEZIONE
SELECT "Matricola", "Nome"
FROM "Studenti"
WHERE "Cognome"='Rossa';
SELECT <lista attributi>
FROM <NOME TABELLA>
WHERE <CONDIZIONE>;
N.B:N.B: il campo coinvolto nella condizione non deve essere necessariamente visualizzato tra i risultati.
Informatica per l'Impresa – Lezioni di Laboratorio sui Data Base
RELAZIONI D'ORDINERELAZIONI D'ORDINE
QUERY di SELEZIONE & PROIEZIONEQUERY di SELEZIONE & PROIEZIONE
select *
from "Prodotti"
where "Peso"=12;
select *
from "Prodotti"
where "Peso">=12;select *
from "Prodotti"
where "Peso">12;
RelazioneRelazione SimboloSimbolouguaglianza =
disuguaglianza <>minore <
maggiore >minore o uguale <=
maggiore o uguale >=
Informatica per l'Impresa – Lezioni di Laboratorio sui Data Base
Informatica per l'Impresa – Lezioni di Laboratorio sui Data Base
RISULTATI ORDINATI DI QUERY 1/3RISULTATI ORDINATI DI QUERY 1/3
Select *
from "Prodotti"
where "Peso">12;
RISULTATI NON ORDINATI
RISULTATI ORDINATI SUL CAMPO PESO IN ORDINE ...
RISULTATI NON ORDINATI
… CRESCENTE … DECRESCENTE
select *from "Prodotti"where "Peso">12order by "Peso" ASC;
Oppureselect *from "Prodotti"where "Peso">12order by "Peso";
select *from "Prodotti"where "Peso">12order by "Peso" DESC;
Informatica per l'Impresa – Lezioni di Laboratorio sui Data Base
RISULTATI DI QUERY ORDINATI 2/3RISULTATI DI QUERY ORDINATI 2/3
select *from "Prodotti"where "Peso">12order by "Costo" ASC;
select *from "Prodotti"where "Peso">12order by "Prodotto" DESC;
Il campo usato per ordinare non è necessariamente coinvolto nelle condizioni
Il campo usato per ordinare non è necessariamente numerico
Il campo usato per ordinare non è necessariamente elencato tra i risultati
select "Prodotto"from "Prodotti"where "Peso">12order by "Peso" DESC;
Informatica per l'Impresa – Lezioni di Laboratorio sui Data Base
RISULTATI DI QUERY ORDINATI 3/3RISULTATI DI QUERY ORDINATI 3/3Oridinare in base a più campi
SELECT *
FROM "Studenti"
order by "Cognome" ASC, "Nome" DESC;
Ordinati in senso crescente
Ordinati in senso decrescente a
parità di cognome
I membri della famiglia Rossa sono ordinati insenso decrescente come da richiesta
Informatica per l'Impresa – Lezioni di Laboratorio sui Data Base
CONDIZIONI COMPOSTE PER QUERY 1/2CONDIZIONI COMPOSTE PER QUERY 1/2
Prodotti con costo compreso tra 10 e 15
select “Prodotto”from "Prodotti"where "Costo"<15 and “Costo”>10;
Prodotti con costomaggiore di 10 e peso minore di 30
select “Prodotto”from "Prodotti"where "Peso"<30 and “Costo”>10;
Prodotti con peso pari a 10 o pari a 12
select “Prodotto”from "Prodotti"where "Peso"=12 or “Peso”=10;
select "Prodotto"from "Prodotti"where not("Peso"=12 or "Peso"=10);
Prodotti con peso diverso da 10 o 12
l'una la negazione dell'altra
OPERATORI LOGICIOPERATORI LOGICIOperatoreOperatore SimboloSimbolocongiunzione anddisgiunzione ornegazione not
CONDIZIONI COMPOSTE PER QUERY 2/2CONDIZIONI COMPOSTE PER QUERY 2/2altri esempi più complessialtri esempi più complessi
Informatica per l'Impresa – Lezioni di Laboratorio sui Data Base
select “Prodotto”from "Prodotti"where "Costo"<30 and “Costo”>10 and not(“Costo”=15);
select “Prodotto”from "Prodotti"where ("Costo"<30 and “Costo”>10) or (“Costo”<130 and “Costo”>110);
select “Prodotto”from "Prodotti"Where (“Costo”=30 or “Costo”=15) and (“Peso”=12.20 or “Peso”=18.50);
N.B.:N.B.: il separatore nei numeri reali tra parte intera e parte decimale, se nei valori inseriti il separatore nei numeri reali tra parte intera e parte decimale, se nei valori inseriti nelle tabelle era la virgola, in SQL è il puntonelle tabelle era la virgola, in SQL è il punto
PER CONDIZIONI COMPLESSE 1/4PER CONDIZIONI COMPLESSE 1/4Valori compresi in intervalliValori compresi in intervalli
Informatica per l'Impresa – Lezioni di Laboratorio sui Data Base
Prodotti con costo compreso tra 10 e 15
select “Prodotto”from "Prodotti"where "Costo"<15 and “Costo”>10;
select “Prodotto”from "Prodotti"where "Costo" between 10 and 15;
PER CONDIZIONI COMPLESSE 2/4PER CONDIZIONI COMPLESSE 2/4Valori compresi in insiemiValori compresi in insiemi
Informatica per l'Impresa – Lezioni di Laboratorio sui Data Base
select *from "Studenti"where "Cognome"='Rossi' or “Cognome”='Rossa';
select *from "Studenti"where "Cognome" in ('Rossi', 'Rossa');
PER CONDIZIONI COMPLESSE 3/4PER CONDIZIONI COMPLESSE 3/4Valori testuali riconducibili a un patternValori testuali riconducibili a un pattern
Informatica per l'Impresa – Lezioni di Laboratorio sui Data Base
SIMBOLOSIMBOLO SIGNIFICATISIGNIFICATI
_ Un solo carattere qualsiasi
% Una stringa qualsiasi
Esempio: “S_l%” fa match, ad esempio, con:
Sole, Soleggiare, Salare Ma non fa match con:
Superlativo
Espressioni Regolari
Operatore per verificare il match: LIKE
select “Nome”, “Cognome”from "Studenti"where "Cognome" LIKE 'Ross_';
PER CONDIZIONI COMPLESSE 4/4PER CONDIZIONI COMPLESSE 4/4I campi vuotiI campi vuoti
Informatica per l'Impresa – Lezioni di Laboratorio sui Data Base
select “Prodotto”from “Prodotti”where “Costo“<13 or “Costo“ IS NULL;
Campi vuoti
Informatica per l'Impresa – Lezioni di Laboratorio sui Data Base
FUNZIONI DI RAGGRUPAMENTOFUNZIONI DI RAGGRUPAMENTO
count – conta le righe del risultato di una select
sum – somma il valore contenuto nello stesso campo di tutte le righe restituite dalla select avg – media dei valori contenuti nello stesso campo di tutte le righe restituite dalla select
min - valore minimo tra quelli contenuti nello stesso campo di tutte le righe restituite dalla select
max - valore massimo tra quelli contenuti nello stesso campo di tutte le righe restituite dalla select
si applicano solo su un campo
select count(*)from "Prodotti"where "Peso">12
Restituisce il numero di righe di ...count(*)
3
select sum(“Costo”)from "Prodotti"where "Peso">12
Somma i valori nella colonna “Costo”
select min(“Costo”)from "Prodotti"where "Peso">12
Determina il valore più piccolo traquelli della colonna “Costo”
sum(“Costo”)30,60
min(“Costo”)11,00
Informatica per l'Impresa – Lezioni di Laboratorio sui Data Base
RAGGRUPPAMENTO 1/3RAGGRUPPAMENTO 1/3
select "Facoltà"from "cdl"group by "Facoltà";
Nella lista degli attributi solo campi che hanno lo stesso valore per ogni
elemento dello stesso gruppo
select "Facoltà", count(*)from "cdl"group by "Facoltà";
Determina dei gruppi in base a un campo(nell'esempio “Facoltà”)
select "Facoltà", min(“Codice”)from "cdl"group by "Facoltà";
Numero di elementi di ogni gruppo (ovvero numero di cdl per ogni facoltà)
Codice di cdl più basso per ogni gruppo (ovvero per ogni facoltà)
Il parametro del count può essere un qualsiasicampo o anche l'indicatore di tutti i campi
Il parametro delle funzioni min, max, sum e avg deve essere sempre numerico
Ciò a poco senso se non è usato insieme alle funzioni ...
Informatica per l'Impresa – Lezioni di Laboratorio sui Data Base
RAGGRUPPAMENTO 2/3RAGGRUPPAMENTO 2/3RidenominazioneRidenominazione
select "Facoltà", min(“Codice”)from "cdl"group by "Facoltà";
select "Facoltà", min(“Codice”) As Minorefrom "cdl"group by "Facoltà";
RIDENOMINAZIONE
EFFETTO RIDENOMINAZIONE
N.B.: l'etichetta di ridenominazione non è tra apici singoli o doppi.
Informatica per l'Impresa – Lezioni di Laboratorio sui Data Base
RAGGRUPPAMENTO 3/3RAGGRUPPAMENTO 3/3Selezione dei gruppiSelezione dei gruppi
select "Facoltà", min(“Codice”) As Minorefrom "cdl"group by "Facoltà";
select "Facoltà", min("Codice") As Minorefrom "cdl"group by "Facoltà"having min("Codice")>1;
N.B.: non è obbligatorio che il valore calcolato dalla funzione d'aggregazione usato nell'having appaia tra i risultati.
Informatica per l'Impresa – Lezioni di Laboratorio sui Data Base
Join 1/3 Join 1/3 Equi-joinEqui-join
(F.K.)
N.B.: non era un obbligo avere lo stesso nome per la chiaveprimaria in cdl e la chiave esterna in Studentiselect *
from "Studenti", "cdl"where "cdl"."Codice"="Studenti"."Codice";
Informatica per l'Impresa – Lezioni di Laboratorio sui Data Base
Join 2/3 Join 2/3 Gli AliasGli Alias
select *from "Studenti", "cdl"where "cdl"."Codice"="Studenti"."Codice";
select *from "Studenti" As S, "cdl" As Cwhere C."Codice"=S."Codice";
≈ do a Studenti soprannome S
N.B: dando due diversi soprannomi alla stessa tabella posso effettuare un join tra la tabella e se stessa. In questo caso si parla di self-join
Informatica per l'Impresa – Lezioni di Laboratorio sui Data Base
Join 3/3 Join 3/3 Tra più di 2 tabelleTra più di 2 tabelle
Quali studenti frequentano l'Università degli Studi di Bologna ?Quali studenti frequentano l'Università degli Studi di Bologna ?
select S."Nome", S."Cognome"
from "Studenti" As S, "cdl" As C, "Università" As U
where S."Codice"=C."Codice" and C."CodiceUniversità"=U."Codice"
and U.Denominazione='Università degli Studi di Bologna';
join selezione
Informatica per l'Impresa – Lezioni di Laboratorio sui Data Base
SELECT <lista campi>FROM <lista tabelle>[WHERE <Condizione>][GROUP BY <lista campi per raggruppamento>][HAVING <Condizioni di Aggregazione>][ORDER BY <lista coppie campo e verso per l'ordinamento>]
SINTESI SULLA SINTASSI DELLE QUERY DI TIPO SELECT SINTESI SULLA SINTASSI DELLE QUERY DI TIPO SELECT
Informatica per l'Impresa – Lezioni di Laboratorio sui Data Base
RiferimentiRiferimenti
● A. Albano, G. Ghelli, R. Orsini, Fondamenti di basi di dati, Zanichelli, 2005
● N. Dragoni, Il linguaggio SQL – Interrogazioni, http://www.cs.unibo.it/~gaspari/www/teaching/inf_imp_db3.pdf, 2008
● P. Atzeni, S. Ceri, S. Paraboschi, R. Torlone, Basi di Dati, Modelli e linguaggi di interrogazione, McGraw-Hill, Maggio 2006