Structured Query Language: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
FrescoBot (discussione | contributi)
m Bot: accenti e modifiche minori
Riga 23:
|sito_web = <!-- Sito ufficiale, con le [] -->
}}
In [[informatica]] '''SQL''' ('''Structured Query Language''') è un linguaggio [[standard (informatica)|standardizzato]] per [[database]] basati sul [[modello relazionale]] ([[Relational database management system|RDBMS]]) progettato per:
 
* creare e modificare [[Schema di database|schemi di database]] (DDL - ''[[Data Definition Language]]'');
* inserire, modificare e gestire dati memorizzati (DML - ''[[Data Manipulation Language]]'');
* interrogare i dati memorizzati (DQL - ''[[Query language|Data Query Language]]'');
* creare e gestire strumenti di controllo ed accesso ai dati (DCL - ''[[Data Control Language]]'').
Riga 33:
 
== Storia ==
L'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]] (la corretta pronuncia [[Alfabeto fonetico internazionale|IPA]] è [ˈɛsˈkjuˈɛl], 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, 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]] rilasciò [[DB2]], il suo [[DBMS]] relazionale diffuso {{chiarire|ancor oggi|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 (Data Base Management Systems) 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==
SQL è un linguaggio per interrogare e gestire basi di dati mediante l'utilizzo di costrutti di programmazione denominati [[query]]. La prima versione fu sviluppata da [[IBM]] all'inizio degli [[anni 1970|anni settanta]]. Chiamata originariamente '''SEQUEL''' era progettata per manipolare dati memorizzati nel database relazionale ideato e brevettato da IBM. Nel 1986 l'[[American National Standards Institute|ANSI]] lo [[standard (informatica)|standardizzò]] con la sigla SQL-86. Negli anni successivi sono state rilasciate altre versioni, riconosciute anche dall'[[International Organization for Standardization|ISO]]. La maggior parte dei sistemi per la gestione di database implementano questi standard ed aggiungono funzionalità aggiuntive proprietarie. Con SQL si leggono, modificano, cancellano dati e si esercitano funzioni gestionali ed amministrative sul sistema dei database. La maggior parte delle implementazioni dispongono di [[interfaccia (informatica)|interfaccia]] alla [[riga di comando]] per l'esecuzione diretta di comandi, in alternativa alla sola interfaccia grafica [[GUI]].
 
Originariamente progettato come linguaggio di tipo [[Programmazione dichiarativa|dichiarativo]], si è successivamente evoluto con l'introduzione di costrutti [[programmazione procedurale|procedurali]], istruzioni per il [[controllo di flusso]], [[tipo di dato|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.
Riga 54:
 
== Operatori ==
Gli operatori, messi a disposizione dal SQL standard si dividono in sette categorie:
* Operatori di assegnazione
* Operatori di confronto
Riga 71:
=== Operatori di confronto ===
Gli operatori di confronto servono a determinare uguaglianze e disuguaglianze tra valori e ad 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)
# IS Si usa per verificare se un valore è NULL, oppure se corrisponde a un valore booleano (TRUE, FALSE, UNKNOWN).
# 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 )
# < 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 <>
Riga 102:
L'operatore LIKE, di solito, è alla base dei criteri di ricerca per parole chiave e delle query effettuate da un motore di ricerca.
 
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).
 
L'SQL prevede anche l'operatore complementare '''NOT LIKE'''.
 
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]]'') ("#") (da non confondere con l'analogo simbolo musicale ''[[sharp]]'', che denota il ''[[diesis]]''), 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.
 
===== Operatori SIMILAR TO e REGEXP =====
Riga 128:
Gli 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 divisione
# MOD Restituisce il resto di una divisione
Riga 177:
 
=== Insert ===
Il comando ha la funzione di inserire i dati nelle [[tabella (database)|tabelle]].
 
Le [[colonna (database)|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 ====
Riga 203:
Il comando ''update'' ha la tripla 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.
 
Riga 265:
 
==== Rollback ====
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.
 
===== Sintassi del comando rollback =====
Riga 276:
 
=== Select ===
Col comando ''select'' abbiamo la possibilità di estrarre i dati, in modo mirato, dal database.
 
==== Sintassi del comando select ====
Riga 286:
[ ORDER BY lista_colonne ];
</source>
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'' 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.
''Limit'' (o ''top'', a seconda delle implementazioni) limita il numero delle righe fornite: LIMIT 10 prende le prime 10 righe della mia tabella. E'È 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.<br />
Un esempio è il seguente: