Principali Comandi SQL - DQL (Data Query Language)

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