Principali Comandi SQL - DQL (Data Query Language) - 1° parte Def. Linguaggio di interrogazione Un linguaggio di interrogazione (o in inglese query language o data query language DQL) è un linguaggio usato per creare query sui database e sui sistemi informativi da parte degli utenti. Serve per rendere possibile l'estrazione di informazioni dal database, attraverso il relativo DBMS, interrogando la base dei dati e interfacciandosi dunque con l'utente e le sue richieste di servizio. IL DQL (data query language – linguaggio di interrogazione dei dati) secondo lo standard SQL comprende i comandi per leggere ed elaborare i dati presenti in un database, strutturato secondo il modello relazionale. Questi dati devono essere stati precedentemente inseriti attraverso il DML (Data Manipulation Language) in strutture o tabelle create con il DDL (Data Definition Language). Sintassi del comando select1 SELECT [ ALL | DISTINCT | TOP ] lista_elementi_selezione FROM lista_riferimenti_tabella [ WHERE espressione_condizionale ] [ GROUP BY lista_colonne [HAVING Condizione] ] [ ORDER BY lista_colonne ]; dove: lista_elementi_selezione è l'elenco dei campi da estrarre (separati tra loro con una virgola); lista_riferimenti_tabella è l'elenco delle tabelle da cui estrarre i dati; espressione_condizionale rappresenta l'elenco delle condizioni, ovvero dei requisiti che un campo deve rispettare per poter essere prelevato dall'interrogazione (le condizioni sono specificate mediante gli operatori di confronto, connettori logici e comparatori come between, in, like, is null); lista_colonne è la colonna o le colonne che devono essere prese come riferimento per l'ordinamento dei dati in uscita. Di default il comando select agisce con il metodo all (che quindi può venire non specificato), ma specificando distinct è possibile eliminare dai risultati le righe duplicate. La clausola ORDER BY serve per ordinare i risultati in base a uno o più campi. Esempi : SELECT DISTINCT cognome, nome, citta_residenza FROM utenti WHERE anni > = 18 ORDER BY cognome Questa query estrae l'elenco di tutti gli utenti maggiorenni ordinando l'output in base al cognome. La definizione di select è comunque molto più ampia, prevede molte altre opzioni ma in linea di massima con queste opzioni si compongono la maggior parte delle interrogazioni. SELECT DISTINCT * FROM utenti 1 Le parentesi quadre indicano l'opzionalità delle parti del comando l'asterisco permette di includere nella selezione tutte le colonne della tabella utenti Con le select è possibile anche eseguire dei calcoli: SELECT DISTINCT cod_art, prezzo_unit*giacenza AS Totale, giacenza*ingombro AS TotIngombro; FROM articoli questo produce dati estratti ma anche dati calcolati. La clausola AS serve per dare un nome alla nuova colonna nella nuova tabella che creerà la select. Operatori di confronto (presenti nelle espressioni condizionali ) Gli operatori di confronto servono a determinare uguaglianze e disuguaglianze tra valori e ad effettuare ricerche all'interno dei dati: Operatore = Significato Esprime uguaglianza tra due valori numerici o stringhe di caratteri Esempio IS Si usa per verificare se un valore è NULL, oppure se corrisponde a un valore booleano (TRUE, FALSE, UNKNOWN) SELECT FirstName, LastName FROM Employees WHERE Region IS NULL LIKE Esprime somiglianza tra due valori letterali: con l'operatore LIKE è possibile usare, per i confronti, i caratteri speciali % (sostituisce un arbitrario numero di lettere) e _ (sostituisce una lettera arbitraria ) SELECT TitleOfCourtesy, FirstName, LastName FROM Employees WHERE TitleOfCourtesy LIKE 'M%' <, >, <=, >=, Stabiliscono se un valore è rispettivamente: minore di un altro, maggiore di un altro, minore o uguale di un altro, maggiore o uguale di un altro SELECT FirstName, LastName FROM Employees WHERE LastName >= 'N' ORDER BY LastName DESC <> Stabilisce se due valori sono diversi tra loro SELECT FirstName, LastName FROM Employees WHERE Title <> 'Sales Representative' SELECT Title, FirstName, LastName FROM Employees WHERE Title = 'Sales Representative' BETWEEN Recupera un valore compreso tra due valori ... AND SELECT FirstName, LastName FROM Employees WHERE LastName BETWEEN 'J' AND 'M' IN SELECT TitleOfCourtesy, FirstName, LastName FROM Employees WHERE NOT TitleOfCourtesy IN ('Ms.','Mrs.') Stabilisce se un valore è contenuto in una lista di valori possibili Ad alcuni di questi operatori corrisponde un operatore contrario che fa uso del termine NOT: 1. 2. 3. 4. IS NOT NOT LIKE NOT BETWEEN NOT IN Operatori aritmetici Gli operatori aritmetici accettano operatori di un tipo numerico (interi o decimali) e restituiscono il risultato dell'operazione aritmetica corrispondente. (si usano per i campi calcolati) Operatore + * / MOD DIV Significato Effettua un'addizione, o lascia immutato il segno di un numero Effettua una sottrazione, o inverte il segno di un numero Effettua una moltiplicazione Effettua una divisione Restituisce il resto di una divisione Restituisce la parte intera di una divisione Esempio SELECT OrderID, Freight, Freight * 1.1 FROM Orders WHERE Freight >= 500 Operatori Logici Gli operatori logici di SQL appartengono agli operatori logici booleani e sono AND, OR , NOT Operatore AND Significato lega due condizioni, restituisce il valore TRUE se e solo se entrambi gli operandi sono veri Esempio OR lega due condizioni, restituisce TRUE se e solo se almeno uno degli operandi è vero. SELECT FirstName, LastName, City FROM Employees WHERE City = 'Seattle' OR City = 'Redmond' NOT accetta un solo operando e restituisce il valore inverso: falso se questo è vero, verso se questo è falso. SELECT FirstName, LastName FROM Employees WHERE Region IS NOT NULL SELECT FirstName, LastName FROM Employees WHERE Title = 'Sales Representative' AND TitleOfCourtesy = 'Mr.' CLAUSOLA ORDER BY È spesso utile avere le tabelle ordinate secondo un dato criterio; la clausola ORDER BY, inserita al termine di una SELECT, permette di ordinare il risultato secondo i campi specificati dopo la parola BY. SELECT <campi> FROM <tabelle> [WHERE <condizione>] ORDER BY <campi chiave> [DESC] Dove la parola chiave opzionale 'DESC' specifica un ordinamento decrescente (di default esegue quello ascendente, cioè dal più piccolo al più grande) I campi della ORDER BY sono le chiavi dell'ordinamento; la prima chiave detta primaria definisce il primo criterio di ordinamento; se sono presenti altre chiavi, queste intervengono solo in caso di uguaglianza della prima chiave. Consideriamo la seguente tabella : Fotografie Data 28-12-98 28-12-98 21-1-99 24-1-99 28-2-99 29-2-99 Luogo Roma Roma Venezia Bassano d.Grappa Venezia Venezia Soggetto Ponte Milvio Colosseo Ponte di Rialto il Ponte degli Alpini Mercato di Rialto Canal Grande Supponiamo di volerla ordinare per luogo (chiave primaria) e data (chiave secondaria); il comando SQL più adatto è il seguente: SELECT Luogo, Data, Soggetto FROM Fotografie ORDER BY Luogo, Data che produrrà la seguente tabella : SELECT ... Luogo Bassano d.Grappa Roma Roma Venezia Venezia Venezia Data 24-1-99 28-12-98 29-12-98 21-1-99 28-2-99 29-2-99 Soggetto il Ponte degli Alpini Ponte Milvio Colosseo Ponte di Rialto Mercato di Rialto Canal Grande