SQL

SQL (che si pronuncia es-chiu-el, non siquel come dicono in molti) è l'acronimo di Structured Query Language. Linguaggio creato per l'accesso a informazioni memorizzate nei database.

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 (da qui l'errore di pronuncia di cui sopra). 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 subito anche altre società iniziarono 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 ancor oggi. 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 purtroppo 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.

La caratteristica principale di SQL è di non richiedere la specifica di sequenze di operazioni, come per gli altri linguaggi di programmazione, ma di permettere di specificare le proprietà logiche delle informazioni ricercate. Esso si divide in tre sottoinsiemi:

Indice

DDL: Definizione dei dati

DDL 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 tale scopo di usa il DML. L'utente deve avere i permessi necessari per agire sulla struttura del database e questi permessi vengono assegnati tramite il DCL.

Create database

Il comando create database serve a creare un nuovo database, che potrà contenere tabelle, viste, stored procedure, trigger o altri tipi di oggetti.

Sintassi del comando create database

La sintassi è la seguente:

CREATE DATABASE nome_database
 

Drop database

Il comando drop database serve a cancellare un database.

Sintassi del comando drop database

La sintassi è la seguente:

DROP DATABASE nome_database
 

Create table

Il comando create table ha la funzione di creare una nuova tabella (o tavola).
Il nome della tabella può essere scritto indifferentemente in MAIUSCOLO o in minuscolo, in ogni caso, però, è necessario che rispetti le seguenti regole:

  1. Può essere formato da lettere e numeri, ma il primo carattere deve sempre essere una lettera;
  2. Non può superare i 30 caratteri di lunghezza;
  3. Non può avere lo stesso nome di una tabella o vista già esistente sullo stesso utente di database.


La tabella può essere creata vuota (vedi la create table semplice) oppure può essere creata e riempita di dati (vedi la create table mediante select): nel secondo caso la struttura della tabella è definita implicitamente dal numero di colonne (o campi) estratti dalla select, dal tipo di dato di ciascuna colonna e dai nomi delle rispettive colonne estratte dalla select (o dagli alias ad esse applicati). Nel caso in cui la tabella venga popolata in fase di creazione, la transazione viene automaticamente conclusa da un comando di COMMIT.

Sintassi del comando create table

CREATE TABLE nome_tabella(
nome_colonna1 tipo di dato constraint (opzionale), nome_colonna2 tipo di dato constraint (opzionale), nome_colonna3 tipo di dato constraint (opzionale), ... nome_colonnaN tipo di dato constraint (opzionale) );
CREATE TABLE nome_tabella 
AS
SELECT ...;

Alter table

Il comando alter table ha la funzione di modificare la struttura della tabella.
L'operatore ADD consente di inserire una nuova colonna su una tabella esistente oppure di aggiungere delle constraint alle colonne della tabella.
L'operatore MODIFY consente di cambiare il tipo di dato e/o la constraint propri di ogni colonna di una tabella.
L'operatore DROP consente di eliminare la constraint dalla colonna.

Sintassi del comando alter table

Operatore add
ALTER TABLE nome_tabella 
ADD nome_colonna_nuova tipo di dato constraint;
ALTER TABLE nome_tabella 
ADD CONSTRAINT nome_tabella_pk PRIMARY KEY (nome_colonna che funge da chiave primaria);
ALTER TABLE nome_tabella_figlia 
ADD CONSTRAINT nome_tabella_figlia_fk FOREIGN KEY (nome_colonna che funge da chiave esterna sulla tabella figlia) REFERENCES nome_tabella_padre (nome_colonna che funge da chiave primaria sulla tabella padre);
Operatore modify
ALTER TABLE nome_tabella 
MODIFY nome_colonna tipo di dato nuovo;
ALTER TABLE nome_tabella 
MODIFY nome_colonna constraint nuova;
Operatore drop
ALTER TABLE nome_tabella 
DROP PRIMARY KEY;
ALTER TABLE nome_tabella_figlia 
DROP CONSTRAINT nome_tabella_figlia_fk;

Drop table

Il comando drop table consente di distruggere una tabella, eliminandola fisicamente dal database.
Come tutti i comandi DDL è un'operazione irreversibile, e provoca la perdita di tutti i dati contenuti nella tabellla.

Sintassi del comando alter table

DROP TABLE nome_tabella;
 

Rename

Il comando rename consente di rinominare una tabella.

Sintassi del comando rename

RENAME nome_tabella TO nuovo_nome_tabella;
 

DML: manipolazione dei dati

DML fornisce i comandi per inserire, modificare, eliminare o leggere 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 assegnato all'utente tramite il DCL.

Insert

Il comando insert 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

INSERT INTO nome_tabella
VALUES (elenco valori, tutti, rispettando l'ordine dei campi della tabella);

oppure

INSERT INTO nome_tabella (elenco dei campi interessati dall'inserimento)
VALUES (elenco valori, tutti, rispettando l'ordine dei campi dichiarati sopra);
INSERT INTO nome_tabella (elenco dei campi interessati dall'inserimento)
SELECT ...;

Update

Il comando update ha la 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

UPDATE nome_tavola
 SET nome_campo1 = valore1_nuovo,
     nome_campo2 = valore2_nuovo,
     ...;
 
UPDATE nome_tavola
 SET nome_campo1 = valore1_nuovo,
     nome_campo2 = valore2_nuovo
 WHERE nome_campo3 = valore;
 

Delete

Il 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) ad essa associata.

Sintassi del comando delete

DELETE FROM nome_tabella;
 
DELETE FROM nome_tabella
 WHERE nome_campo = valore;
 

Truncate Table

Come 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 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 truncate table

TRUNCATE TABLE nome_tabella
 

La transazione

Le istruzioni di DML Insert, Update, Replace e Delete, se poste all'interno di una transazione, non sono irreversibili e possono essere annullate nel caso ci si renda conto che non sono state applicate in modo corretto.

Una transazione è un blocco di istruzioni che sono strettamente correlate tra loro. Nel caso si verifichi un errore (sia esso nel programma oppure dovuto a un problema esterno, per esempio se il sistema si blocca) non verrà annullata solo l'ultima istruzione, ma l'intera transazione. In tal modo si è certi che l'integregrità dei dati sarà garantita.

Commit

Per confermare la transazione si utilizza il comando COMMIT. Con esso tutte le modifiche effettuate sui dati in precedenza vengono memorizzate.

Sintassi del comando commit
COMMIT;
 

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
ROLLBACK;
 

DCL: Controllo sui dati

DCL 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

Il comando Grant fornisce uno o più permessi a un determinato utente (es: il permesso di inserimento in una tabella).

Revoke

Il comando Revoke revoca uno o più permessi a un determinato utente (es: il permesso di cancellazione da una tabella).

Critiche a Sql

Tecnicamente l'Sql è un linguaggio di programmazione 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. Le sue estensioni più recenti supportano pienamente il modello relazionale, ma hanno peggiorato le suddette violazioni.

Inoltre, vi sono molte critiche sull'utilizzo pratico dell'Sql:



Principali linguaggi di programmazione (tutti)

Ada | ALGOL | APL | Awk | BASIC | C | C++ | C# | COBOL | Delphi | Eiffel | Fortran | Haskell | IDL | Java | JavaScript | Lisp | LOGO | ML | Objective C | O'Caml| Pascal | Perl | PHP | PL/I | Prolog | Python | Ruby | SAS | Scheme | sh | Simula | Smalltalk | SQL | Visual Basic



Categoria:Linguaggi di programmazione Categoria:Database Categoria:Acronimi

See also: SQL, 1974, 1975, 1977, 1981, 1983, 1986, 1987, ALGOL