| SQL linguaggio di programmazione | |
|---|---|
| Autore | Donald Chamberlin |
| Data di origine | 1974 |
| Ultima versione | SQL:2023 (1ยบ giugno 2023) |
| Utilizzo | creazione, interrogazione, gestione database |
| Paradigmi | programmazione dichiarativa |
| Tipizzazione | statica, forte |
| Estensioni comuni | .sql |
| Influenzato da | Datalog e logica del primo ordine |
| Implementazione di riferimento | |
| Sito web | www.iso.org/standard/76583.html |
Structured Query Language o in breve SQL (/ษskjuหหษl/ ) รจ un linguaggio standardizzato per database basati sul modello relazionale (RDBMS), progettato per le seguenti operazioni:
- creare e modificare schemi di database (DDL = Data Definition Language);
- inserire, modificare e gestire dati memorizzati (DML = Data Manipulation Language);
- interrogare i dati memorizzati (DQL = Data Query Language);
- creare e gestire strumenti di controllo e accesso ai dati (DCL = Data Control Language).
A dispetto del nome, non si tratta perciรฒ di un semplice linguaggio di interrogazione: alcuni suoi sottoinsiemi, infatti, permettono di creare, gestire e amministrare database.[1]
Storia
modificaIl SQL nasce nel 1974 ad opera di Donald Chamberlin, nei laboratori dell'IBM. Nasce come strumento per lavorare con database che seguano il modello relazionale. A quel tempo perรฒ si chiamava SEQUEL (per questo la corretta pronuncia IPA di SQL รจ /ษskjuหหษl/ e quella informale /หsiหkwษl/). Nel 1975 viene sviluppato un prototipo chiamato SEQUEL-XRM; con esso si eseguirono sperimentazioni che portarono, nel 1977, a una nuova versione del linguaggio, che inizialmente avrebbe dovuto chiamarsi SEQUEL/2 ma che poi divenne, per motivi legali (il nome SEQUEL era giร stato usato, e soprattutto registrato, in un altro ambito per una compagnia aerea), SQL. Su di esso si sviluppรฒ il prototipo System R, che venne utilizzato da IBM per usi interni e per alcuni suoi clienti. Ma, dato il suo successo, anche altre societร iniziarono subito a sviluppare prodotti basati su SQL. Nel 1981 IBM iniziรฒ a vendere alcuni prodotti relazionali e nel 1983 pubblicรฒ DB2, il suo RDBMS (relational database management system) diffuso negli ultimi anni del XX secolo[quando?]. SQL divenne subito lo standard industriale per i software che utilizzano il modello relazionale.
L'ANSI lo adottรฒ come standard fin dal 1986, senza apportare modifiche sostanziali alla versione inizialmente sviluppata da IBM. Nel 1987 la ISO fece lo stesso. Questa prima versione standard รจ denominata SQL/86. Negli anni successivi si realizzarono altre versioni, che furono SQL/89, SQL/92 e SQL/2003. Tale processo di standardizzazione mirava alla creazione di un linguaggio che funzionasse su tutti i DBMS relazionali, ma questo obiettivo non fu raggiunto. Infatti, i vari produttori implementarono il linguaggio con numerose variazioni e, in pratica, adottarono gli standard ad un livello non superiore al minimo, definito dall'Ansi come Entry Level.
Caratteristiche
modificaSQL รจ un linguaggio per interrogare e gestire basi di dati mediante l'utilizzo di costrutti di programmazione denominati query. Con SQL si leggono, modificano, cancellano dati e si esercitano funzioni gestionali e amministrative sul sistema dei database. La maggior parte delle implementazioni dispongono di interfaccia alla riga di comando per l'esecuzione diretta di comandi, in alternativa alla sola interfaccia grafica GUI.
Originariamente progettato come linguaggio di tipo dichiarativo, si รจ successivamente evoluto con l'introduzione di costrutti procedurali, istruzioni per il controllo di flusso, tipi di dati definiti dall'utente e varie altre estensioni del linguaggio. A partire dalla definizione dello standard SQL:1999 molte di queste estensioni sono state formalmente adottate come parte integrante di SQL nella sezione SQL/PSM dello standard.
Alcune delle critiche piรน frequenti rivolte ad SQL riguardano la mancanza di portabilitร del codice fra vendor diversi, il modo inappropriato con cui vengono trattati i dati mancanti (NULL), e la semantica a volte inutilmente complicata.
Struttura
modificaEssendo un linguaggio dichiarativo, SQL non richiede la stesura di sequenze di operazioni (come ad esempio i linguaggi imperativi), piuttosto di specificare le proprietร logiche delle informazioni ricercate. Esso si divide in:
- Data Definition Language (DDL) - permette di creare e cancellare database o di modificarne la struttura
- Data Manipulation Language (DML) - permette di inserire, cancellare, modificare i dati
- Data Control Language (DCL) - permette di gestire gli utenti e i permessi
- Query language (QL) - permette di interrogare il database, cioรจ di leggere i dati.
- Device Media Control Language (DMCL) - permette di controllare i supporti (memorie di massa) dove vengono memorizzati i dati.
Operatori
modificaGli operatori, messi a disposizione dal SQL standard si dividono in sette categorie:
- Operatori di assegnazione
- Operatori di confronto
- Operatori stringa
- Operatori aritmetici
- Operatori condizionali
- Operatori logici
- Operatori tra bit
Operatori di assegnazione
modificaGli operatori di assegnazione assegnano un valore a una variabile o a un campo.
=Esprime un'assegnazione e non restituisce alcun valore.:=Esprime un'assegnazione di un valore ad una variabile non ancora istanziata e non restituisce alcun valore.
Operatori di confronto
modificaGli operatori di confronto servono a determinare uguaglianze e disuguaglianze tra valori e a effettuare ricerche all'interno dei dati. Di seguito uno schema tabellare:
=Esprime uguaglianza tra due valori numerici o stringhe di caratteri (dove non รจ usato come operatore di assegnazione)ISSi usa per verificare se un valore รจNULL, oppure se corrisponde a un valore booleano (TRUE,FALSE,UNKNOWN).LIKEEsprime somiglianza tra due valori letterali: con l'operatoreLIKEรจ possibile usare, per i confronti, i caratteri speciali:%(sostituisce un arbitrario numero di lettere) e_(sostituisce una lettera arbitraria)Stabilisce se un valore รจ minore di un altro<Stabilisce se un valore รจ maggiore di un altro>Stabilisce se un valore รจ minore o uguale di un altro<=Stabilisce se un valore รจ maggiore o uguale di un altro>=Stabilisce se due valori sono diversi tra loro<>equivale a!=<>Recupera un valore compreso tra due valoriBETWEEN ... AND ...Stabilisce se un valore รจ contenuto in una lista di valori possibiliINStabilisce se una determinata subquery restituisce un valoreEXISTSoANYStabilisce se una determinata subquery restituisce almeno uno dei valori specificatiSOMEStabilisce se una determinata subquery restituisce tutti i valori desideratiALL
Ad alcuni di questi operatori corrisponde un operatore contrario che fa uso del termine :
NOT
IS NOTNOT LIKENOT BETWEENNOT INNOT EXISTS
Operatori stringa
modificaGli operatori stringa accettano come operandi due stringhe e restituiscono un valore booleano o stringa.
Operatore LIKE
modificaL'operatore (viene usato anche MATCHES), di solito, รจ alla base dei criteri di ricerca per parole chiave e delle query effettuate da un motore di ricerca.
LIKE
Il carattere underscore (_), detto wildchar, esegue la ricerca su un singolo carattere arbitrario; il simbolo % รจ detto operatore jolly ed esegue la ricerca su una stringa arbitraria, ovvero su un intervallo di valori numerici. Per ricercare il carattere underscore all'interno di un'espressione utilizzare la sintassi [_] (leggi anche piรน avanti).
La sintassi di Microsoft Access รจ leggermente diversa da questo standard internazionale, e piรน completa. Invece del simbolo underscore, si utilizza ? per ricercare un singolo carattere (sia numero che lettera); invece del simbolo %, l'operatore jolly รจ dato da *. Access permette di ricercare un singolo valore numerico tramite il tasto hash (o cancelletto) (#), e di ricercare un carattere (lettera e numero) all'interno o all'esterno di un insieme di valori, con la sintassi [] e [!]. L'intervallo puรฒ essere puntuale o collettivo: ad esempio, [A-F] indica le lettere comprese fra A ed F, mentre [A, F] indica solo la ricerca di queste due lettere. Ad esempio, un'istruzione come 'LIKE P[!A-F]C' ricerca le parole che iniziano per "P", finiscono per "C" e per seconda lettera non hanno i caratteri compresi fra le lettere A e F. Questa completezza nell'implementazione di LIKE รจ dovuta al fatto che Access non prevede operatori piรน complessi come SIMILAR TO e REGEXP.
Nonostante questa completezza, il driver OLE DB per Windows ha un bug noto: l'operatore jolly * รจ utilizzabile solo all'interno dell'applicazione, mentre via OLE DB/ODBC deve essere utilizzato il classico simbolo %.
Operatori SIMILAR TO e REGEXP
modificaL'operatore SIMILAR TO รจ parte dello standard SQL e consente di verificare se una stringa corrisponde a una data espressione regolare. La sintassi utilizzata รจ differente dagli standard de facto che sono stati stabiliti da Perl e da POSIX e per questo motivo l'adozione di tale operatore da parte dei produttori รจ piuttosto limitata.
L'operatore REGEXP รจ piรน diffuso e anch'esso consente di verificare se una stringa corrisponde a una data espressione regolare. La sintassi utilizzata varia a seconda dell'implementazione SQL, tuttavia in genere รจ piuttosto aderente agli standard de facto stabiliti dal Perl o da POSIX.
L'SQL prevede anche gli operatori complementari NOT SIMILAR TO e NOT REGEXP.
BINARY
modificaQuesto operatore serve a rendere case-sensitive l'applicazione delle espressioni regolari, cioรจ a far sรฌ che le lettere maiuscole siano considerate differenti dalle minuscole.
COLLATE
modificaQuesto operatore serve a specificare quale collazione (insieme di regole per l'ordinamento di un set di caratteri) deve essere utilizzata nell'espressione corrente.
Operatori aritmetici
modificaGli operatori aritmetici accettano operatori di un tipo numerico (interi o decimali) e restituiscono il risultato dell'operazione aritmetica corrispondente. Di seguito uno schema tabellare:
Operatore Descrizione
+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 divisioneMODRestituisce il resto di una divisioneDIVRestituisce la parte intera di una divisione
Operatori condizionali
modificaL'unico operatore condizionale di SQL รจ WHERE (dove) e serve a definire criteri di ricerca mirati.
Operatori logici
modificaGli operatori logici di SQL appartengono agli operatori logici booleani e sono AND (e), OR (o, oppure), NOT (non), XOR (detto anche "OR esclusivo").
- L'operatore logico
AND, che lega due condizioni, restituisce il valoreTRUEse e solo se entrambi gli operandi sono veri. - L'operatore logico
OR, che lega due condizioni, restituisceTRUEse e solo se almeno uno degli operandi รจ vero. - L'operatore
NOTaccetta un solo operando e restituisce il valore inverso: falso se questo รจ vero, vero se questo รจ falso. - L'operatore
XOR, che accetta due condizioni, restituisceTRUEse e solo se uno solo degli operandi รจ vero.
Operatori tra bit
modificaLo standard SQL non prevede questa famiglia di operatori, tuttavia essa รจ presente in molte implementazioni. Questi operatori effettuano le operazioni AND, OR, NOT e XOR a livello di bit.
Regole generali per gli operatori
modificaUn'espressione รจ costituita da un valore o da un'operazione che restituisce un valore. Questa definizione รจ ricorsiva: le espressioni possono essere annidate. Poichรฉ gli operatori restituiscono sempre un valore, รจ perfettamente lecito combinarli tra loro per formare condizioni via via piรน complesse.
L'uso delle parentesi tonde all'interno delle espressioni di ricerca consente di modificare o esplicitare la precedenza degli operatori, ossia l'ordine in cui essi vengono elaborati. Ove un'espressione composta sia scritta senza parentesi, vengono applicate le precedenze tra gli operatori previste dal linguaggio.
DDL: Definizione dei dati
modificaDDL (Data Definition Language โ linguaggio di definizione dei dati) serve a creare, modificare o eliminare gli oggetti in un database. Sono i comandi DDL a definire la struttura del database e quindi dei dati ivi contenuti, ma non fornisce gli strumenti per modificare i dati stessi per il quale si usa il DML (Data Manipulation Language). L'utente deve avere i permessi necessari per agire sulla struttura del database e questi permessi vengono assegnati tramite il DCL (Data Control Language).
Domini Elementari
modificaSQL mette a disposizione sei famiglie di domini elementari a partire dai quali si possono definire i domini da associare agli attributi dello schema.
DML: Manipolazione dei dati
modificaDML (Data Manipulation Language โ linguaggio di manipolazione dei dati) fornisce i comandi per inserire, modificare ed eliminare i dati all'interno delle tabelle di un database. La struttura di questi dati deve giร essere stata definita tramite il DDL. Inoltre, il permesso di accedere a tali dati deve essere precedentemente assegnato all'utente tramite il DCL.
Insert
modificaIl comando ha la funzione di inserire i dati nelle tabelle.
Le colonne (o campi) di destinazione dei valori possono essere o meno dichiarate nel comando. Se non vengono dichiarate, รจ necessario passare al comando un valore per ogni colonna della tabella, rispettando rigorosamente l'ordine delle colonne stesse. Se, invece, le colonne di destinazione vengono dichiarate, รจ possibile indicare le sole colonne per le quali vengono passati dei valori, purchรฉ vengano inseriti comunque i valori per tutte le colonne NOT NULL (che non possono essere nulle) della tabella.
Di per sรฉ il comando INSERT opera inserendo in tabella una sola riga per volta. ร possibile, perรฒ, inserire piรน di una riga "in modo automatico" passando all'INSERT una serie di righe (o tuple) risultanti da un comando di SELECT, purchรฉ tali righe siano compatibili con le colonne della tabella su cui si inseriscono i dati.
Sintassi del comando insert
modificaINSERTsemplice:
INSERT INTO nome_tabella
VALUES (elenco valori, tutti, rispettando lโordine dei campi della tabella, ad es "donato");
oppure
INSERT INTO nome_tabella (elenco dei campi interessati dallโinserimento)
VALUES (elenco valori, tutti, rispettando lโordine dei campi dichiarati sopra, esempio "donato");
INSERTmedianteSELECT:
INSERT INTO nome_tabella (elenco dei campi interessati dallโinserimento, ad es "donato") AS
SELECT ...;
Update
modificaIl comando UPDATE ha la triplice funzione di modificare i dati delle tabelle.
Il nome di ogni campo che deve essere modificato va dichiarato dopo la parola chiave SET e deve essere seguito dal simbolo = (uguale) e dal nuovo valore che deve assumere.
ร possibile modificare piรน campi della stessa riga in un unico comando update, separandoli l'uno dall'altro con il simbolo , (virgola).
Il comando generico aggiorna tutte le righe della tabella. ร possibile restringerne il numero applicando la parola chiave aggiuntiva WHERE, che permette di effettuare una selezione qualitativa delle righe imponendo delle condizioni sui dati presenti nelle righe prima dell'aggiornamento.
Sintassi del comando update
modificaUPDATEgenerico:
UPDATE nome_tabella
SET nome_campo1 = 'valore1_nuovo',
nome_campo2 = 'valore2_nuovo',
...
;
UPDATEcon condizione:
UPDATE nome_tabella
SET nome_campo1 = 'valore1_nuovo',
nome_campo2 = 'valore2_nuovo'
WHERE nome_campo3 = 'valore';
Delete
modificaIl comando DELETE ha la funzione di cancellare i dati dalle tabelle.
Come il comando update anche delete puรฒ operare in modo generico cancellando tutte le righe della tabella oppure puรฒ identificare le righe da cancellare mediante la parola chiave aggiuntiva WHERE e la condizione (o le condizioni) a essa associata.
Sintassi del comando delete
modificaDELETEgenerico:
DELETE FROM nome_tabella;
DELETEcon condizione:
DELETE FROM nome_tabella
WHERE nome_campo = 'valore';
Truncate Table
modificaCome giร detto, una DELETE priva di clausola WHERE cancella tutte le righe dalla tabella specificata. Tuttavia, esiste un altro modo per svuotare completamente una tabella: il comando TRUNCATE TABLE. Alcuni DBMS implementano questo comando (che non รจ presente nello standard SQL) in modo piรน veloce rispetto a una DELETE, ad esempio cancellando il file dei dati senza leggerlo e ricreandolo vuoto. Generalmente perรฒ questo impedisce che vengano restituite alcune informazioni accessorie, come il numero di righe cancellate.
Sintassi del comando
modificaTRUNCATE [TABLE] nome_tabella
La transazione
modificaUna transazione รจ un blocco di istruzioni che sono strettamente correlate tra loro. Nel caso in cui per qualsiasi motivo (un errore interno al DBMS, un errore nelle istruzioni SQL, un errore di sistema) una delle istruzioni non arrivi a compimento, l'intera transazione verrร annullata. Si dice quindi che una transazione รจ un'operazione atomica, ossia non รจ divisibile: se non viene eseguita interamente, non verrร eseguita affatto. Questo รจ uno degli strumenti piรน utilizzati per garantire l'integritร dei dati.
Fino a quando una transazione non ha esito positivo, le modifiche che apporta sono visibili solo per la sessione che ha avviato la transazione. A seconda nel livello di isolamento gli altri utenti potranno accedere a una versione piรน vecchia dei dati, oppure essere messi in attesa fino al termine della transazione.
Non tutti i DBMS supportano le transazioni, mentre altri le supportano solo in determinate condizioni (ad esempio in MySQL sono supportate solo per alcuni tipi di tabelle). Inoltre il DBMS puรฒ limitare le transazioni ad un sottoinsieme dell'SQL (ad esempio, in MySQL, se si lancia un comando DDL la transazione corrente termina).
Alcuni DBMS inoltre consentono le transazioni annidate. Le modifiche effettuate da una transazione contenuta in un'altra non sono effettive finchรฉ la transazione piรน esterna non termina con successo.
Un'alternativa semanticamente molto simile รจ costituita dai savepoint. Essi consentono di salvare una versione dei dati nel mezzo di una transazione. Sarร poi possibile annullare l'intera transazione oppure ripristinare uno dei savepoint precedentemente impostati. Questo salvataggio puรฒ essere effettuato in un blocco di codice condizionale, il che rende questa funzionalitร molto piรน dinamica rispetto alle transazioni annidate.
Begin Transaction
modifica
Per iniziare esplicitamente una transazione si utilizza il comando BEGIN TRANSACTION. La mancanza di questo comando fa sรฌ che ogni istruzione funga da transazione a sรฉ stante.
BEGIN TRANSACTION [transaction_name];
Commit
modifica
Per confermare la transazione si utilizza il comando COMMIT. Con esso tutte le modifiche effettuate sui dati in precedenza vengono memorizzate.
COMMIT [TRANSACTION] [transaction_name];
Rollback
modifica
Per annullare la transazione si utilizza il comando ROLLBACK. Con esso tutte le modifiche effettuate sui dati in precedenza (a partire dall'inizio della transazione) vengono cancellate.
ROLLBACK [TRANSACTION] [transaction_name];
DQL: Interrogazione dei dati
modificaDQL (data query language โ linguaggio di interrogazione dei dati) comprende i comandi per leggere ed elaborare i dati presenti in un database. Questi dati devono essere stati inseriti attraverso il DML in strutture create con il DDL, mentre il DCL stabilisce se l'utente puรฒ accedervi.
Select
modificaCol comando SELECT abbiamo la possibilitร di estrarre i dati, in modo mirato, dal database.
Sintassi del comando select
modificaSELECT [ 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_condizionalerappresenta 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 comeBETWEEN,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, ma specificando DISTINCT (o UNIQUE a seconda delle implementazioni) รจ possibile eliminare dai risultati le righe duplicate.
La clausola GROUP BY serve per raggruppare per tupla i risultati mentre la relativa condizione HAVING serve per filtrarne i risultati.
SELECT fornitore, sum(importo_fattura)
FROM fatture
GROUP BY fornitore
HAVING sum(importo_fattura)>10000
In questo caso vengono filtrati i fornitori che hanno un totale fatturato maggiore di 10ย 000.
La clausola ORDER BY serve per ordinare i risultati in base a uno o piรน campi.
LIMIT (o TOP, a seconda delle implementazioni) limita il numero delle righe fornite: LIMIT 10 prende le prime dieci righe della mia tabella. ร anche possibile scartare un certo numero di righe all'inizio dei risultati aggiungendo un parametro a LIMIT o la clausola OFFSET.
L'SQL standard non prevede alcun ordinamento se non si specifica la clausola ORDER BY, pertanto senza di essa anche LIMIT ha un effetto imprevedibile.
Un esempio รจ il seguente:
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.
Nelle clausole GROUP BY e ORDER BY i nomi dei campi si possono sostituire con il numero corrispondente all'ordine della funzione SELECT: nell'ultimo caso ORDER BY cognome si puรฒ scrivere ORDER BY 1.
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
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 che verrร mostrata nel risultato della SELECT eseguita.
Molti DBMS supportano la clausola non standard LIMIT, che deve essere posta per ultima e puรฒ avere tre forme:
LIMIT <numero_risultati>
LIMIT <pos_primo_risultato>, <numero_risultati>
LIMIT <numero_risultati> [OFFSET <pos_primo_risultato>]
numero_risultati รจ il numero delle righe da estrarre. pos_primo_risultato รจ l'indice della prima riga da estrarre. Insieme, possono essere utilizzati per suddividere i risultati in blocchi e leggerli un po' alla volta (per esempio per comoditร del DBA, o per la paginazione dei risultati mostrati da una applicazione web).
Join
modificaUna forma di select composto tra piรน tabelle con uno o piรน campi comuni si ottiene attraverso la clausola Join.
Subquery
modificaLe subquery possono essere inserite ovunque il linguaggio SQL ammetta un'espressione che restituisce un singolo valore e nella clausola FROM. In questo secondo caso, le subquery sono chiamate anche tabelle derivate (derived table).
Le subquery propriamente dette possono restituire un singolo valore, oppure un insieme di risultati, a seconda dei casi. Un esempio piuttosto semplice รจ quello in cui si vogliono estrarre da una tabella i valori numerici superiori alla media. Una sola Select non puรฒ leggere la media e al contempo i valori che la superano. A questo scopo si avrร una select che legge la media:
SELECT AVG(campo1) FROM mia_tabella;
Questa query verrร inserita nella clausola WHERE della query piรน esterna; la subquery viene eseguita per prima:
SELECT * FROM mia_tabella WHERE campo1 > (SELECT AVG(campo1) FROM mia_tabella);
Come si vede, da un punto di vista sintattico รจ necessario porre le subquery tra parentesi.
Tabelle derivate
modificaLe tabelle derivate sono un caso particolare di subquery: una Select interna estrae i dati che verranno poi interrogati dalla SELECT esterna.
L'esempio seguente viene utilizzato a scopo didattico, ma non rappresenta un approccio ottimale. Si supponga comunque di voler estrarre i record per i quali il campo mail non รจ vuoto, scegliendoli tra gli utenti la cui registrazione รจ stata confermata. Ecco come ottenere questo risultato con una tabella derivata:
SELECT email FROM (SELECT email
FROM utenti
WHERE conferma = TRUE);
In realtร le tabelle derivate sono utili laddove non vi sono altri approcci possibili, il che accade quando la query esterna contiene una JOIN.
DCL: Controllo sui dati
modificaDCL serve a fornire o revocare agli utenti i permessi necessari per poter utilizzare i comandi DML e DDL, oltre agli stessi comandi DCL (che gli servono per poter a sua volta modificare i permessi su alcuni oggetti).
Grant
modificaIl comando GRANT fornisce o concede uno o piรน permessi a un determinato utente (es: il permesso di inserimento in una tabella, di modificarla o eliminarla) e di amministratore di valore.
Revoke
modificaIl comando REVOKE revoca uno o piรน permessi a un determinato utente (es: il permesso di cancellazione da una tabella).
Stored Programs
modificaCon il termine Stored Programs, o Business Logic, si intendono quelle routine programmate in SQL, con le estensioni procedurali che permettono il controllo del flusso, i cicli, i cursori e la gestione degli errori. Nelle implementazioni piรน complete di SQL, gli Stored Program possono essere di diversi tipi:
Inoltre alcuni DBMS, come MySQL, permettono di creare procedure SQL che vengono eseguite a una data ora una sola volta, oppure ripetutamente a un certo intervallo temporale, come i Cron Job dei sistemi Unix.
Critiche a SQL
modificaSQL รจ un linguaggio di interrogazione pensato per interagire con i database relazionali. I teorici fanno perรฒ notare come le caratteristiche originali dell'SQL, ispirate al calcolo delle tuple, in realtร lo violino[senzaย fonte]. Le sue estensioni piรน recenti supportano pienamente il Modello relazionale, ma hanno peggiorato le suddette violazioni[senzaย fonte].
Inoltre, vi sono molte critiche sull'utilizzo pratico dell'SQL:
- non fornisce un modo standard per suddividere un lungo comando in comandi piรน brevi a cui ci si possa riferire tramite un nome (sebbene molte implementazioni in realtร forniscano questa funzionalitร );
- le diverse implementazioni sono generalmente incompatibili tra loro;
- si fa troppo affidamento sui valori NULL, un metavalore che secondo alcuni accademici dovrebbe indicare l'assenza di un valore, secondo altri dovrebbe indicare un valore sconosciuto, mentre nella pratica finisce per essere usato in entrambi i modi, o in uno solo, ma in modo incoerente[senzaย fonte].
Note
modifica- ^ Cos'รจ SQL, su geekandjob.com.
Bibliografia
modifica- (EN) "SQL-99 Complete, Really", Peter Gulutzan e Trudy Pelzer, R&D Books, 1999, ISBN 978-0-87930-568-0
- Paolo Atzeni, Stefano Ceri, Piero Fraternali, Stefano Paraboschi e Riccardo Torlone, Basi di dati, 5ยชย ed., Milano, McGraw-Hill, 2018, ISBNย 978-88-386-9445-5.
Voci correlate
modificaAltri progetti
modifica
Wikibooks contiene testi o manuali sull'SQL
Wikizionario contiene il lemma di dizionario ยซSQLยป
Wikimedia Commons contiene immagini o altri file sull'SQL
Collegamenti esterni
modifica- Sito ufficiale, su iso.org.
- SQL, su Treccani.it โ Enciclopedie on line, Istituto dell'Enciclopedia Italiana.
- (EN) SQL, su Enciclopedia Britannica, Encyclopรฆdia Britannica, Inc.
- (EN) Opere riguardanti SQL (Computer program language), su Open Library, Internet Archive.
- (EN) Denis Howe, SQL, in Free On-line Dictionary of Computing. Disponibile con licenza GFDL
- SQL Archiviato il 24 gennaio 2011 in Internet Archive.. Guida gratuita in italiano realizzata dal Dipartimento del Tesoro (in pdf).
- Tutorial de SQL, su 1keydata.com.
- Istruzioni SQL di base[collegamento interrotto], su kb.askmonty.org.
- (EN) SQL::2003 BNF, su savage.net.au. URL consultato il 7 novembre 2012 (archiviato dall'url originale il 6 giugno 2012).
- (EN) SQL99 BNF, su savage.net.au. URL consultato il 7 novembre 2012 (archiviato dall'url originale il 10 febbraio 2013).
- (EN) SQL93 Specification (TXT), su contrib.andrew.cmu.edu. URL consultato il 7 novembre 2012 (archiviato dall'url originale il 6 aprile 2013).
- (EN) SQL93 BNF (TXT), su contrib.andrew.cmu.edu. URL consultato il 7 novembre 2012 (archiviato dall'url originale il 6 aprile 2013).
- (EN) SQL92 Specification, su savage.net.au. URL consultato il 7 novembre 2012 (archiviato dall'url originale il 12 ottobre 2008).
- (EN) SQL92 BNF, su savage.net.au. URL consultato il 7 novembre 2012 (archiviato dall'url originale il 12 ottobre 2008).
- (EN) PostgreSQL, su postgresql.org.
- (EN) Oracle SQL tutorials, su freeitsolutions.com. URL consultato il 23 settembre 2008 (archiviato dall'url originale il 6 dicembre 2008).
- (EN) wiscorp.com.
- Manuale e tutorial SQL da Webmasterpoint.org, su webmasterpoint.org.
| Controllo di autoritร | LCCN (EN)ย sh86006628ย ยท GND (DE)ย 4134010-3ย ยท BNE (ES)ย XX531785 (data)ย ยท BNF (FR)ย cb12101816f (data)ย ยท J9U (EN,ย HE)ย 987007529742105171 |
|---|
