QL (Query Language) Alice Pavarani

Documenti analoghi
Linguaggio SQL seconda parte

Structured Query Language

SQL: le funzioni di aggregazione

Caratteristiche dei linguaggi per Database

Select From Where...

Structured. Language. Basi di Dati. Introduzione. DDL: Data Definition Language. Tipi di dato. Query. Modifica dei Dati

SQL quick reference. piccolo manuale di riferimento dei principali comandi SQL (prof. Claudio Maccherani, Perugia, 2013)

Manuale SQL. Manuale SQL - 1 -

SISTEMI INFORMATIVI E TELEMEDICINA INFORMATICA MEDICA. 3. Panoramica su SQL Prof. Mauro Giacomini

<Nome Tabella>.<attributo>

CORSO ACCESS 2000 PARTE VI

Query. Query (Interrogazioni) SQL SQL. Significato dell interrogazione. Sintassi

Il linguaggio SQL: raggruppamenti

Linguaggio SQL: fondamenti D B M G

Il linguaggio SQL: raggruppamenti. Versione elettronica: SQLb-gruppi.pdf

Operatori aggregati. Operatori aggregati. Interrogazioni con raggruppamento. Interrogazioni con raggruppamento

Interrogare una base di dati: algebra relazionale e SQL. Savino Castagnozzi Giorgio Macauda Michele Meomartino Salvatore Picerno Massimiliano Sartor

Basi di Dati: Corso di laboratorio

Basi di Dati: Corso di laboratorio

Basi di Dati: Corso di laboratorio

SQL - Structured Query Language

SQL [2] Concetti avanzati di SQL. Esempi di interrogazioni

Interrogazioni complesse. SQL avanzato 1

Elena Baralis 2007 Politecnico di Torino 1

Tipi di sottoquery SQL

Esempi SQL con Access. Orazio Battaglia

SQL - Sottointerrogazioni correlate

Interrogazioni Interrogazioni in SQL } L'istruzione base dell'sql per costruire interrogazioni di complessita arbitraria e lo statement SELECT } Sinta

ESERCITAZIONI ACCESS

Linguaggio SQL. studenti matricola nome cognome citta anno 11 marco bini bologna laura sicuro rimini 1984 esami codice

Transcript:

QL (Query Language) Alice Pavarani

QL Query Language Linguaggio di interrogazione dei dati, permette di: Interrogare la base di dati per estrarre informazioni Elaborare i dati Il risultato di un interrogazione è sempre una tabella Il comando di interrogazione dei dati riflette la natura dichiarativa del linguaggio SQL: le interrogazioni sul database sono eseguite specificando solo cosa si vuole ottenere, senza preoccuparsi di problemi di rappresentazione e memorizzazione dei dati.

Struttura di base: SELECT-FROM-WHERE La struttura più semplice di interrogazione di una base di dati è composta da 3 clausole: SELECT FROM WHERE Permette di estrapolare le informazioni, prese da una o più tabelle, che rispettano determinate condizioni SELECT Attributi FROM Tabelle WHERE Condizioni

PROIEZIONE (taglio verticale) Esempi Si usa una, (virgola) per separare più attributi da visualizzare nella clausola SELECT SELECT Cognome, Nome, Residenza Si ottiene l elenco con Cognome, Nome, Residenza di tutti gli Impiegati SELECT Cognome, Nome, Residenza WHERE Dipartimento = Prod Si ottiene l elenco con Cognome, Nome, Residenza di tutti gli Impiegati del Dipartimento con codice Prod SELECT IDImpiegato, Cognome, Nome WHERE Dipartimento = Prod AND Residenza = Torino Si ottiene l elenco con ID, Cognome, Nome di tutti gli Impiegati del Dipartimento con codice Prod e che risiedono a Torino SELEZIONE (taglio orizzontale) SELECT * WHERE Residenza = Roma Si ottiene l elenco completo di tutte le informazioni degli Impiegati residenti a Roma

SELECT La clausola SELECT richiede che venga specificata la lista degli attributi (colonne) da elencare Se sono necessari tutti gli attributi delle tabelle indicate, è sufficiente scrivere SELECT * Predicati ALL (di default) impone che nel risultato vengano incluse tutte le righe che soddisfano alle condizioni contenute nel comando DISTINCT riduce ad un unica riga tutte le righe duplicate ottenute come risultato di un interrogazione

Calcolo di espressioni Si utilizza la clausola AS per rinominare una colonna Con il comando SELECT si può anche richiedere il calcolo di espressioni sugli attributi dell interrogazione La tabella risultante contiene una colonna aggiuntiva con i risultati del calcolo ottenuto per ogni riga Il calcolo di espressioni non modifica il valore dell attributo in tabella SELECT Cognome, Nome, Stipendio AS Attuale, Stipendio*1.05 AS Nuovo WHERE Dipartimento = Mag Si ottiene una tabella composta da 4 colonne: Cognome, Nome, Attuale, Nuovo dove, per ogni riga, viene visualizzato sia lo Stipendio memorizzato nella tabella Impiegato (Attuale), sia il nuovo stipendio se il precedente fosse aumentato del 5% per tutti gli impiegati del dipartimento Mag (Nuovo)

Condizioni di ricerca: WHERE I criteri di selezione delle righe vengono determinati in base ad una o più condizioni (Vero/Falso) Nella scrittura di una condizione sono leciti i simboli: Operatori di confronto =, <, >, <=, >=, <> Connettivi logici AND, OR, NOT Altri predicati Ordine di precedenza: NOT AND OR BETWEEN / NOT BETWEEN controlla se un valore è compreso in un intervallo, estremi inclusi IN / NOT IN controlla se un valore appartiene o meno (NOT IN) ad un insieme di valori precisato dopo il predicato LIKE / NOT LIKE confronta il valore di un attributo di tipo carattere con un modello di stringa eventualmente composto da caratteri jolly IS NULL / IS NOT NULL confronta il valore di una colonna con NULL L uso di questo predicato il solo modo per controllare la presenza del valore NULL in una colonna

In Access: _? % * Il predicato LIKE Caratteri jolly (metacaratteri): _ (underscore) indica uno e un solo carattere qualsiasi in quella posizione della stringa % (percento) indica una sequenza di zero o più caratteri in quella posizione della stringa Esempi Il predicato LIKE utilizzato con un modello di stringa che non contiene caratteri jolly è equivalente all operatore = Attr LIKE xyz% tutti gli attributi che iniziano con xyz Attr LIKE %xyz tutti gli attributi che finiscono con xyz Attr LIKE %xyz% tutti gli attributi che comprendono xyz Attr LIKE _xyz tutti gli attributi che iniziano con un carattere e poi xyz

Esempi SELECT Cognome, Nome, Residenza WHERE Stipendio BETWEEN 30000 AND 50000 SELECT IDImpiegato, Cognome, Nome WHERE Residenza IN ( Roma, Milano, Torino ) SELECT IDImpiegato, Cognome, Nome WHERE Residenza NOT IN ( Roma, Milano ) SELECT IDImpiegato, Cognome, Nome WHERE Residenza IS NULL Si ottiene l elenco con Cognome, Nome, Residenza di tutti gli Impiegati aventi Stipendio compreso tra 30000 e 50000 (equivale a >= AND <=) Si ottiene l elenco con IDImpiegato, Cognome, Nome di tutti gli Impiegati con Residenza a Roma, Milano o Torino (equivale al connettivo OR tra le condizioni di uguaglianza) Si ottiene l elenco con IDImpiegato, Cognome, Nome di tutti gli Impiegati tranne quelli con Residenza a Roma o a Milano (equivale al connettivo AND tra le condizioni di disuguaglianze) Si ottiene l elenco con ID, Cognome, Nome di tutti gli Impiegati di cui non è nota la Residenza

JOIN Grazie al comando SELECT è possibile operare su più tabelle: operazione di JOIN Per realizzare un collegamento tra due tabelle occorre specificare nella clausola WHERE una condizione che coinvolga un attributo comune: chiave primaria chiave esterna SELECT *, Dipartimento WHERE Impiegato.Dipartimento = Dipartimento.Codice Si ottiene l elenco di tutti gli Impiegati con i dati del Dipartimento in cui lavorano Se la condizione è di uguaglianza si chiama equi-join

INNER JOIN La versione SQL adottata da Access prevede un altra istruzione per realizzare il JOIN tra due tabelle, del tutto equivalente alla precedente ma con una sintassi diversa SELECT * INNER JOIN Dipartimento ON Impiegato.Dipartimento = Dipartimento.Codice Se si utilizza l INNER JOIN la condizione di collegamento è scritta nella clausola FROM, dopo la parola chiave ON

SELF JOIN Viene chiamata SELF JOIN quella particolare operazione che collega una tabella con sé stessa Occorre utilizzare un alias per il nome della tabella, per evitare ambiguità nei ruoli dell associazione Esempio: PERSONA (CF, Cognome, Nome, Coniuge) in cui il campo Coniuge è chiave esterna riferita al campo CF di Persona SELECT Marito.Cognome, Marito.Nome, Moglie.Cognome, Moglie.Nome FROM Persona AS Marito, Persona AS Moglie WHERE Marito.CF = Moglie.Coniuge Si ottiene l elenco con Cognome e Nome di ogni coppia di Coniugi

JOIN esterni A A A B B B Generalmente, l equi-join NON include nella selezione risultante quelle righe di una delle due tabelle che non trovano corrispondenza nell altra (valori nulli) Esistono tre diverse forme di JOIN, detti join esterni, per rispondere a questa esigenza Left-join FROM TabellaA LEFT JOIN TabellaB ON ChiaveA = ChiaveB Right-join FROM TabellaA RIGHT JOIN TabellaB ON ChiaveA = ChiaveB Full-join FROM TabellaA FULL JOIN TabellaB ON ChiaveA = ChiaveB

Esempio: Left-join SELECT Descrizione, Nome, Cognome FROM Dipartimento LEFT JOIN Impiegato ON Dipartimento.Codice = Impiegato.Dipartimento Seleziona la Descrizione di tutti i Dipartimenti e, se noti, il Nome ed il Cognome degli Impiegati che vi lavorano SELECT Descrizione, Nome, Cognome FROM Dipartimento LEFT JOIN Impiegato ON Dipartimento.Codice = Impiegato.Dipartimento WHERE Cognome IS NULL Seleziona la Descrizione di tutti i Dipartimenti senza Impiegati

Ordinamenti La clausola ORDER BY consente l ordinamento dei risultati di un interrogazione, secondo una o più colonne in senso: ASC (default) = crescente per i numeri, alfabetico per le stringhe (dalla A alla Z) DESC = decrescente per i numeri, alfabetico inverso per le stringhe (dalla Z alla A) SELECT Cognome, Nome WHERE Dipartimento = Mag ORDER BY Cognome SELECT Cognome, Stipendio WHERE Dipartimento = Mag ORDER BY DESC Stipendio Seleziona Cognome e Nome degli Impiegati del Dipartimento Mag in ordine alfabetico per Cognome Seleziona Cognome e Stipendio degli Impiegati del Dipartimento Mag in ordine decrescente di Stipendio Il valore NULL compare, di norma, all inizio delle sequenze crescente e alla fine delle sequenze decrescenti

Funzioni di aggregazione Le funzioni di aggregazione agiscono sui valori di una singola colonna e restituiscono un unico valore (il massimo, il minimo, la somma, ) Le righe considerate per l aggregazione sono quelle prodotte dall interrogazione, cioè rispettano le eventuali condizioni (clausola WHERE) Possono essere utilizzate solo nella clausola SELECT oppure nella clausola HAVING

Ovviamente su attributi di tipo numerico Anche su attributi di tipo carattere (seguendo l ordine alfabetico) Funzioni di aggregazione COUNT conta il numero di righe risultanti dall interrogazione SUM calcola la somma dei valori contenuti nella colonna AVG calcola la media dei valori contenuti nella colonna MIN / MAX restituisce il minimo/massimo tra i valori della colonna Si può specificare il nome dell attributo o il carattere *: nel primo caso non vengono conteggiate le righe con valore NULL nell attributo specificato SELECT COUNT (*) WHERE Residenza = Milano SELECT SUM (Stipendio) WHERE Dipartimento = Amm SELECT AVG (Stipendio) WHERE Dipartimento = Amm SELECT MAX (Stipendio) Restituisce il numero di Impiegati residenti a Milano Restituisce la somma degli Stipendi degli Impiegati del Dipartimento Amm Restituisce la media degli Stipendi degli Impiegati del Dipartimento Amm Restituisce lo Stipendio massimo tra tutti gli Impiegati NB: L unica funzione di aggregazione che considera anche i valori NULL è COUNT(*)

Raggruppamenti Le funzioni di aggregazione condensano le informazioni di una tabella in un solo valore (il numero di righe, la somma, il massimo, ) Spesso è necessario sintetizzare i valori per classi omogenee secondo opportuni criteri di raggruppamento Per tale scopo si utilizza la clausola GROUP BY

GROUP BY La clausola GROUP BY permette di raggruppare un insieme di righe aventi lo stesso valore nelle colonne indicate dalla clausola Produce una riga di risultati per ogni raggruppamento NOTA BENE: Quando si utilizza una clausola GROUP BY, tutti gli attributi che compaiono nella lista della clausola SELECT devono essere inclusi nella clausola GROUP BY oppure devono essere argomenti di una funzione di aggregazione

Esempio: GROUP BY Elenca il codice dei dipartimenti (Dipartimento) in cui lavorano gli Impiegati, la somma degli stipendi (Stipendi) ed il numero di impiegati (NumDipendenti) per ogni Dipartimento SELECT Dipartimento, COUNT (ID) AS NumDipendenti, SUM (Stipendio) AS Stipendi GROUP BY Dipartimento L istruzione viene eseguita per passi: Le righe sono raggruppate per Dipartimento (clausola GROUP BY) Le funzioni di aggregazione sono applicate singolarmente su ogni raggruppamento

HAVING La clausola HAVING permette di imporre condizioni sui gruppi, creati precedentemente tramite la clausola GROUP BY Permette di visualizzare i soli raggruppamenti che soddisfano alle condizioni della clausola HAVING Specifica una condizione che, generalmente, controlla il valore restituito dalle funzioni di aggregazione SELECT Dipartimento, COUNT (ID) AS NumDipendenti, SUM (Stipendio) AS Stipendi GROUP BY Dipartimento HAVING COUNT (ID) >= 2 Elenca il codice dei dipartimenti in cui lavorano almeno 2 Impiegati, la somma degli stipendi (Stipendi) ed il numero di impiegati (NumDipendenti) per ogni Dipartimento

Comando SELECT SELECT FROM WHERE GROUP BY HAVING ORDER BY Elenco colonne da mostrare Tabelle da cui estrarre i record Condizioni che i record devono verificare Campi da considerare per i raggruppamenti Condizioni sui raggruppamenti Ordinamenti sulle colonne elencate