Le query SQL (di base) semanticamente equivalenti alle funzioni di ordine superiore?

9

SQL è fondamentalmente un'istanza specifica del dominio map + fold + filter?

Mi sembra che il seguente SQL:

SELECT name
FROM fruits
WHERE calories < 100 

è solo zucchero sintattico per la seguente mappa + filtro + operazione di piegatura:

var fruits = [{id : 1, name: 'orange', calories : 100},
    {id : 2, name : 'banana',  calories : 150},
    {id : 3, name: 'apple', calories : '50'}];

fruits.map(function(fruit) { return { name : fruit.name, calories : fruit.calories })
    .filter(function(obj) { return obj.calories < 100 })
    .reduce(function (accumulator, obj) { accumulator + "\n" + val.name; });

È questa coincidenza o esiste una valida equivalenza semantica che può essere dimostrata? Come, all'incirca?

So che in pratica SQL ha un sacco di campane e fischietti ma al suo interno si tratta semplicemente di un'operazione map-fold-filter?

Il seguente articolo è pertinente: link

    
posta Sridhar-Sarnobat 10.06.2015 - 20:06
fonte

2 risposte

5

Dai un'occhiata a LINQ , che riprende i concetti di base di SQL e lo generalizza a programmazione orientata agli oggetti. L'operatore Where è un filtro standard di bog, l'operatore Select è una proiezione / mappa e così via. Tutte le operazioni di query SQL di base sono rappresentate in LINQ, implementate utilizzando le funzioni di ordine superiore, quindi sì, hai ragione nella tua comprensione intuitiva di SQL.

La grande differenza tra l'esempio che hai e il modo in cui un database relazionale funziona è che SQL è progettato con un set di comandi molto limitato in mente. Non è completo di Turing e i progettisti di database sanno cosa può e cosa non può fare, il che rende molto più facile per loro progettare il sistema per ottimizzare le query in misura maggiore di quanto sarebbe possibile con un semplice Map che enumera un insieme di dati elemento per elemento.

    
risposta data 10.06.2015 - 20:10
fonte
8

SQL è basato su Algebra relazionale e Tuple Relational Calculus, non su funzioni di ordine superiore o programmazione funzionale. Mentre SELECT, FROM e WHERE hanno funzioni analoghe in altri linguaggi, SQL in sé non supporta le funzioni di ordine superiore generalizzato, ma solo quelle funzioni "di ordine superiore" che il linguaggio stesso definisce.

Dato che SQL non ti permette di scrivere le tue funzioni personalizzate di ordine superiore, non si può dire con alcuna autorità che la lingua supporti le funzioni di ordine superiore.

    
risposta data 10.06.2015 - 20:13
fonte

Leggi altre domande sui tag