We're learning that most languages are classified as either of the two, "relation based" or "high level".
Questi concetti sono ortogonali. "Relation-based" significa che la semantica del linguaggio si basa sul concetto di una relazione, cioè un'associazione molti a molti tra due insiemi (le relazioni sono il fondamento matematico dietro le tabelle SQL). "Alto livello" significa che la lingua contiene molte astrazioni che nascondono molti dei dettagli tecnici sottostanti (come posizioni di memoria, registri della CPU, accesso al disco, operazioni bit a bit, ecc.). SQL è certamente basato sulla relazione, in quanto il suo scopo principale è quello di descrivere i dati relazionali e le operazioni su di esso. SQL è anche abbastanza alto livello; non fornisce alcun mezzo per accedere direttamente ai byte sul disco, e non ti dice alcun dettaglio su come memorizza i suoi dati (almeno lo standard SQL non lo fa, la maggior parte dei fornitori fornisce estensioni allo standard che possono darti un po 'di informazioni, ma questo è accanto al punto).
In realtà, ci sono molti più assi lungo i quali le lingue di programmazione (e dati) possono essere classificate; uno particolarmente interessante è dichiarativo vs imperativo . Le lingue dichiarative descrivono che cosa è ; le lingue imperative descrivono come fare qualcosa. La parte DDL di SQL è per lo più dichiarativa, nonostante le parole chiave dall'aspetto imperativo (" CREATE TABLE
", " DROP DATABASE
", ecc.) E persino la parte di manipolazione dei dati ( SELECT
, UPDATE
, INSERT
, DELETE
) è ancora piuttosto dichiarativo. Una proprietà molto interessante di SQL è che non è completa Turing: non è possibile scrivere un loop illimitato in SQL ANSI standard semplice.
I
programmi di programmazione attorno a poche idee chiave:
Le funzioni - sono cittadini di prima classe (cioè possono essere utilizzate come valori, come input per altre funzioni e come output da altre funzioni)
- funzioni di ordine superiore (funzioni che operano su funzioni o funzioni che restituiscono funzioni)
- purezza (una funzione pura è una che non ha effetti collaterali, una funzione pura non può fare alcun I / O, non può leggere né modificare nessuno stato globale e non può accettare argomenti di riferimento non const. perché produrranno sempre lo stesso risultato dato gli stessi input)
SQL certamente non ruota attorno alle funzioni come strumento principale per modellare le cose, ma abbraccia in qualche modo l'idea di purezza: la stessa query eseguita sullo stesso database produrrà sempre lo stesso risultato (tranne che per gli ordini). Chiamare SQL un linguaggio 'funzionale' è un po 'eccessivo anche se IMO.