Torna all'elenco degli articoli Articoli
Tempo di lettura: 12 minuti

La storia degli standard SQL

Lo standard SQL è cambiato negli oltre 30 anni di esistenza? Assolutamente sì! Scoprite il viaggio da SQL-86 al moderno SQL, il linguaggio di dati standard di oggi.

SQL è stato creato all'inizio degli anni '70 da IBM. Nel 1974, Donald Chamberlin e Raymond Boyce pubblicarono l'articolo SEQUEL: A Structured English Query Language, che introdusse l'SQL nel mondo. L'articolo conteneva la grammatica BNF (una descrizione tecnica dettagliata della sintassi del linguaggio) per il linguaggio, che IBM ritenne in seguito un errore. La pubblicazione della grammatica permise a diversi fornitori di implementare SQL nei propri motori di database. Tuttavia, vi erano molte variazioni tra le implementazioni di SQL dei vari fornitori, poiché ciascuno di essi introduceva le proprie estensioni a SQL. Verso la metà degli anni '80 si verificarono notevoli incompatibilità tra le diverse versioni di SQL.

Sempre negli anni '80, l'American National Standards Institute (ANSI) iniziò a lavorare sullo standard SQL. L'obiettivo dell'introduzione di uno standard era quello di consentire la portabilità delle applicazioni SQL tra i prodotti conformi.

SQL-86

Il primo standard SQL fu SQL-86. Fu pubblicato nel 1986 come standard ANSI e nel 1987 come standard ISO (International Organization for Standardization). Il punto di partenza per lo standard ISO era l'implementazione dello standard SQL di IBM. Questa versione dello standard SQL è anche nota come SQL 1.

Lo standard SQL-86 è composto da 120 pagine. Contiene la sintassi per le istruzioni SELECT, INSERT, UPDATE e DELETE. La sintassi SELECT consente di filtrare con WHERE, di utilizzare GROUP BY con diverse colonne (ma non con espressioni) e di filtrare gruppi con HAVING. Non esiste una sintassi esplicita per JOIN; è possibile elencare più tabelle nella clausola FROM per ottenere essenzialmente un join incrociato da filtrare successivamente con WHERE. Non c'è modo di fare OUTER JOINs con questa sintassi. Tuttavia, la sintassi SELECT consente le subquery.

Lo standard prevede anche una sintassi per la definizione dello schema: è possibile creare tabelle (solo con i vincoli UNIQUE e NOT NULL ), creare viste e concedere privilegi. I tipi di dati introdotti nello standard sono stringhe di caratteri e numeri (NUMERIC, DECIMAL, INTEGER, SMALLINT, FLOAT, REAL e DOUBLE PRECISION). Non esistono istruzioni ALTER, DROP o REVOKE. Esistono anche incorporazioni di SQL in vari linguaggi di programmazione (Cobol, Fortran, Pascal e PL/1).

In genere, è possibile acquistare i documenti standard dall'ISO o dall'ANSI, anche le versioni vecchie e ritirate. Tuttavia, come racconta Evan Carroll nel suo post su Stack Overflow, al giorno d'oggi non è facile ottenere lo standard SQL-86. Ma se siete interessati, potete trovare SQL-86 sotto il nome di FIPS-127.

SQL-89

Lo standard SQL successivo fu SQL-89, pubblicato nel 1989. Si trattava di una revisione minore dello standard precedente, un superset di SQL-86 che sostituiva SQL-86. Le dimensioni dello standard non cambiarono.

Le novità più importanti riguardavano i vincoli di integrità: oltre alle opzioni UNIQUE, NOT NULL e check nelle viste già disponibili, furono aggiunte le chiavi primarie, le chiavi esterne e i vincoli DEFAULT e CHECK. Lo standard aggiunse anche nuovi binding linguistici per il C e l'Ada.

SQL-92

La successiva revisione dello standard fu SQL-92, una revisione importante. Il linguaggio introdotto da SQL-92 viene talvolta definito SQL 2. Il documento standard passò da 120 a 579 pagine. Tuttavia, gran parte della crescita era dovuta a specifiche più precise delle funzionalità esistenti.

Le novità più importanti furono:

  • Una sintassi esplicita JOIN e l'introduzione di join esterni: LEFT JOIN, RIGHT JOIN, FULL JOIN.
  • L'introduzione di NATURAL JOIN e CROSS JOIN
  • L'introduzione delle operazioni sugli insiemi (unione di insiemi, intersezione di insiemi e differenza di insiemi).
  • L'introduzione dell'espressione condizionale CASE WHEN.
  • Nuove operazioni scalari: concatenazione di stringhe, estrazione di sottostringhe e matematica di data e ora.
  • L'operatore CAST, che consente il casting esplicito di valori in tipi.

SQL-92 introdusse anche nuove dichiarazioni di definizione dei dati: ALTER e DROP per le tabelle e le viste, e nuovi tipi di dati (date, time, timestamp, interval, bit stringa, varchar stringa e national character stringa). Questa versione ha aggiunto uno schema informativo (il modo standard per ottenere i metadati del database, come i nomi delle tabelle, le colonne delle tabelle, i tipi di colonna e i vincoli delle tabelle). Introdusse anche le tabelle temporanee, i livelli di isolamento delle transazioni e l'esecuzione dinamica delle query (SQL dinamico).

Lo standard SQL è stato suddiviso in tre livelli di conformità: entry level (SQL-92 era simile a SQL-89 con vincoli di integrità), intermediate e full.

SQL-92 è la base del linguaggio di query utilizzato oggi nei database relazionali. Quando si parla di "SQL", la maggior parte delle persone intende SQL-92. I database che esistevano già nel 1992 modificarono la loro implementazione di SQL per essere conformi allo standard. I database più recenti hanno usato lo standard come riferimento per la loro implementazione.

SQL-92 è ancora quello che viene insegnato come "SQL" nelle scuole. E giustamente, SQL-92 è un ottimo punto di partenza per imparare l'SQL. Per molte persone è sufficiente per svolgere il lavoro di tutti i giorni. Le funzioni avanzate possono essere apprese in seguito, quando se ne ha bisogno. Inoltre, la maggior parte dei database supporta SQL-92. Nessuna implementazione è conforme al 100% allo standard, ma le incompatibilità non sono così importanti, soprattutto quando si è agli inizi.

In LearnSQL.it, lo Standard SQL è il dialetto più importante che insegniamo. Crediamo che se si impara il linguaggio standard, lo si può utilizzare per lavorare con la maggior parte dei database. È la base dei nostri corsi per principianti; SQL Basics SELECT insegnerà l'istruzione con tutte le funzionalità disponibili in SQL-92, compresi i diversi tipi di JOIN, GROUP BY, le operazioni di set e le subquery. Il corso How to INSERT, UPDATE, and DELETE Data in SQL insegnerà le istruzioni INSERT, UPDATE e DELETE, mentre SQL JOINs vi permetterà di fare pratica con i diversi tipi di JOINs.

Per chi è interessato alla creazione di tabelle, consigliamo il nostro percorso di apprendimento Creazione di strutture di database. Il percorso consiste in cinque corsi che insegnano a creare tabelle, definire vincoli, selezionare tipi di dati appropriati e creare viste utilizzando la sintassi SQL standard, che è facilmente trasferibile tra diversi motori di database.

SQL:1999

SQL:1999 (chiamato anche SQL 3) è la quarta revisione dello standard SQL. A partire da questa versione, il nome dello standard ha utilizzato i due punti invece del trattino per essere coerente con i nomi di altri standard ISO. Questo standard è stato pubblicato in più puntate tra il 1999 e il 2002.

Il primo capitolo di SQL:1999 era composto da cinque parti:

  • La Parte 1: SQL/Framework (100 pagine) definiva i concetti fondamentali di SQL.
  • La Parte 2: SQL/Foundation (1050 pagine) definiva la sintassi e le operazioni fondamentali di SQL: tipi, schemi, tabelle, viste, istruzioni di query e aggiornamento, espressioni e così via. Questa parte è la più importante per gli utenti abituali di SQL.
  • Parte 3: SQL/CLI (Call Level Interface) (514 pagine) definisce un'interfaccia di programmazione applicativa per SQL.
  • Parte 4: SQL/PSM (Persistent Stored Modules) (193 pagine) definisce le estensioni che rendono SQL procedurale.
  • La parte 5: SQL/Bindings (270 pagine) ha definito i metodi per incorporare le istruzioni SQL in programmi applicativi scritti in un linguaggio di programmazione standard.

Altre tre parti, anch'esse considerate parte di SQL:1999, sono state pubblicate successivamente.

SQL:1999 ha introdotto molte importanti funzionalità che fanno parte del moderno SQL. Tra le più importanti vi sono le Espressioni di tabella comuni (CTE). Si tratta di una funzione molto utile che consente di organizzare query SQL lunghe e complesse e di renderle più leggibili. Quando si utilizza la sintassi WITH [RECURSIVE], le CTE possono anche elaborare ricorsivamente i dati gerarchici. È possibile imparare a scrivere query ricorsive in SQL con il corso interattivo di LearnSQL.it. Recursive Queries .

SQL:1999 ha introdotto anche le funzionalità OLAP (Online Analytical Processing), che comprendono funzioni utili per la preparazione di report aziendali. Le estensioni GROUP BY, ROLLUP, CUBE e GROUPING SETS sono entrate nello standard in questo periodo. È possibile apprenderle nel corso GROUP BY Extensions (o leggere il corso e le estensioni nell'articolo della serie Course of the Month di novembre 2020).

Alcune aggiunte minori all'SQL nello standard SQL:1999 includono l'uso di espressioni in ORDER BY, l'inclusione di tipi di dati per oggetti binari di grandi dimensioni (LOB e CLOB) e l'introduzione dei trigger.

Le dimensioni dello standard SQL sono cresciute in modo significativo tra il 1992 e il 1999. Lo standard SQL-92 contava quasi 600 pagine, ma era comunque accessibile agli utenti abituali di SQL. Libri come A Guide to the SQL Standard di Christopher Date e Hugh Darwen discutevano e spiegavano lo standard SQL-92.

A partire da SQL:1999 lo standard, che ora supera le 2.000 pagine, non è più accessibile ai normali utenti di SQL. È diventato una risorsa per gli esperti di database e per i fornitori di database. Lo standard guida lo sviluppo di SQL nei principali database; indica quali nuove caratteristiche del linguaggio vale la pena implementare per rimanere al passo con i tempi. Inoltre, standardizza la sintassi delle nuove funzioni SQL, assicurandosi che i principali database le implementino in modo simile, utilizzando sintassi e semantica simili.

Il cambiamento del ruolo dello standard SQL è sottolineato dal fatto che non esiste più un organismo ufficiale che certifichi la conformità allo standard. Fino al 1996, il programma per gli standard di gestione dei dati del National Institute of Standards and Technology (NIST) certificava la conformità dei DBMS SQL allo standard SQL. Ora i fornitori autocertificano la conformità dei loro prodotti.

SQL:2003 e oltre

Nel 21° secolo, lo standard SQL è stato regolarmente aggiornato.

Lo standard SQL:2003 è stato pubblicato il 1° marzo 2004. L'aggiunta più importante è stata quella delle funzioni finestra, una potente funzione analitica che consente di calcolare le statistiche di riepilogo senza collassare le righe. Le funzioni finestra hanno aumentato in modo significativo la potenza espressiva di SQL. Sono estremamente utili nella preparazione di tutti i tipi di report aziendali, nell'analisi di serie temporali e nell'analisi delle tendenze. L'aggiunta delle funzioni finestra allo standard ha coinciso con la popolarità dell'OLAP e dei data warehouse. Le persone hanno iniziato a utilizzare i database per prendere decisioni aziendali basate sui dati. Questa tendenza sta prendendo sempre più piede, grazie alla crescente quantità di dati raccolti da tutte le aziende. È possibile imparare le funzioni delle finestre con il nostro Window Functions corso. ( SQL:2003 ha introdotto anche funzioni legate all'XML, generatori di sequenze e colonne di identità.

Dopo il 2004, non ci sono state grandi aggiunte rivoluzionarie al linguaggio. Le modifiche allo standard SQL hanno rispecchiato i cambiamenti tecnologici dell'epoca. SQL:2003 ha introdotto funzioni legate all'XML per consentire l'interoperabilità tra i database e le tecnologie XML, che erano la novità assoluta dei primi anni 2000. SQL:2006 ha ulteriormente specificato come utilizzare SQL con XML. Non si trattava di una revisione dell'intero standard SQL, ma solo della Parte 14, che riguarda l'interoperabilità SQL-XML.

Le successive revisioni dello standard hanno apportato miglioramenti minori al linguaggio. SQL:2008 ha legalizzato l'uso di ORDER BY al di fuori delle definizioni di cursore(!), e ha aggiunto i trigger INSTEAD OF, l'istruzione TRUNCATE e la clausola FETCH. SQL:2011 ha aggiunto i dati temporali e alcuni miglioramenti alle funzioni finestra e alla clausola FETCH.

SQL:2016 ha aggiunto la corrispondenza dei modelli di riga e le funzioni di tabella polimorfica, oltre al tanto atteso supporto JSON. Negli anni 2010, JSON ha sostituito XML come formato comune per lo scambio di dati; le moderne applicazioni Internet utilizzano JSON invece di XML come formato di dati. Anche l'emergente movimento NoSQL ha reso popolare JSON; i database di documenti memorizzano file JSON e i negozi di valori chiave sono compatibili con il formato JSON. Lo standard SQL ha aggiunto il supporto JSON per consentire l'interoperabilità con le applicazioni moderne e i nuovi tipi di database.

L'attuale standard SQL è SQL:2019. Ha aggiunto la Parte 15, che definisce il supporto degli array multidimensionali in SQL.

Qual è il futuro di SQL?

Guardando indietro agli oltre 30 anni di storia di SQL, si possono notare le diverse fasi del suo sviluppo. SQL 1 negli anni '80 (SQL-86, SQL-89) è stato il primo sforzo per standardizzare e formalizzare la definizione del linguaggio. SQL-92 ha fornito le basi per il linguaggio stabile che conosciamo oggi, quello che oggi è il linguaggio di dati standard per tutte le principali tecnologie di dati.

SQL:1999 e SQL:2003 hanno fornito le basi del moderno SQL, con l'aggiunta delle funzioni finestra, delle Common Table Expressions e delle estensioni GROUP BY. Dopo il 2003, il linguaggio ha raggiunto la fase di stabilità e maturità. Il nucleo del linguaggio non cambia, ma vengono aggiunte nuove funzionalità per migliorare il linguaggio esistente e per supportare le tecnologie emergenti, come XML o JSON.

infografica

Lo standard SQL non è più un riferimento per gli utenti abituali di SQL. Tuttavia, i vantaggi di avere uno standard sono numerosi. Lo standard:

  • Indica quali estensioni del linguaggio sono importanti e utili.
  • Guida lo sviluppo di implementazioni SQL nei database e in altre tecnologie di elaborazione dati.
  • Fornisce la sintassi e la semantica comune che la maggior parte delle tecnologie di elaborazione dati implementerà.

Lo standard non garantisce che tutte le implementazioni SQL siano perfettamente compatibili, ma garantisce che siano per lo più allineate e che si sviluppino tutte nella stessa direzione.

Su LearnSQL.it, con i nostri corsi interattivi, potrete imparare tutte le moderne funzionalità di SQL:

  • SQL Basics insegna tutte le caratteristiche dell'istruzione SELECT disponibili in SQL-92, compresi i diversi tipi di JOINs, GROUP BY, le operazioni di set e le subquery.
  • How to INSERT, UPDATE, and DELETE Data in SQL insegna le istruzioni INSERT, UPDATE e DELETE.
  • SQL JOINs consente di esercitarsi con diversi tipi di JOIN.
  • Creating Basic SQL Reports esplora le espressioni CASE WHEN e come combinarle efficacemente con GROUP BY.
  • Window Functions dimostra le funzioni della finestra SQL utilizzando esempi aziendali realistici.
  • Recursive Queries approfondisce le Espressioni tabellari comuni (CTE), comprese le CTE ricorsive che consentono di elaborare grafici e gerarchie in SQL.
  • GROUP BY Extensions in SQL si concentra su utili estensioni analitiche per GROUP BY: ROLLUP, CUBE, e GROUPING SETS.
  • Oppure imparate tutto con la nostra SQL from A to Z traccia.

Ora che conoscete la storia di SQL, quale sarà il vostro futuro con questo linguaggio? Vi auguriamo di impararlo e di sperimentare voi stessi quanto sia potente ed efficiente l'SQL!

Fonti: