Svantaggi del linguaggio SQL, The Third Manifesto

1

Qualche tempo fa ho letto degli svantaggi del linguaggio SQL (le specifiche di base della lingua, non specifiche del venditore),

e uno degli svantaggi era che la lingua non consente di creare un set di tuple che non provengono da una tabella.
Ad esempio,

SELECT firstName, lastName from people;

questo crea una serie di tuple provenienti dalla tabella people .

Ora, se non ho questa tabella people , e voglio restituire una costante, mi servirebbe qualcosa del genere per restituire un set di due tuple (questo non richiederebbe una tabella):

SELECT VALUES('james', 'dean'), ('tom', 'cruisse');

Perché ne avrei bisogno?
A causa delle stesse ragioni per cui possiamo definire le costanti (non solo i tipi di base, ma anche gli oggetti e gli array) in qualsiasi linguaggio di programmazione avanzato.

Soluzioni alternative,
Sì, potrei creare una tabella temporale, riempire i dati e SELEZIONARE da quella tabella. Questo è un trucco, per superare gli svantaggi del linguaggio SQL scadente.

Penso di aver letto su questo da qualche parte in "Il terzo manifesto" ,
ma non trovo più il paragrafo / l'esempio che parla di questo inconveniente concreto.

Conosci un riferimento a riguardo?

    
posta David Portabella 04.06.2012 - 15:29
fonte

2 risposte

1

Per quanto ne so, lo standard SQL definisce un "costruttore di righe".

Quindi in SQL standard (e ad esempio supportato da PostgreSQL e DB2) è valido scrivere

VALUES ('james', 'dean'), ('tom', 'cruise');

ogni volta che è consentito un riferimento alla tabella

    
risposta data 04.06.2012 - 15:41
fonte
1

"che la lingua non consente di creare una serie di tuple che non provengono da una tabella. "

Questo non è completamente corretto. Il linguaggio SQL standard ha entrambi i costruttori ROW - ROW ('james', 'dean') - e costruttori di tabelle - VALUES ((col1v1, col2v1) (col1v2, col2v2)). Non sono completamente sicuro della sintassi VALUES, quindi prendi un po 'di sale qui.

Quindi, lo standard SQL ha in effetti cose che assomigliano a

SELEZIONA * DA VALORI ((...), (...));

SQL standard ha anche il estremamente dettagliato

SELECT col1v1 AS c1, col2v1 as c2 UNIONE SELEZIONA col1v2 AS c1, col2v2 come c2 UNIONE ...

Non posso ancora indicarti un riferimento (diverso dallo standard SQL stesso), ma fonti attendibili mi dicono che è in preparazione un nuovo libro che discuterà esattamente l'intero problema delle mancanze di SQL rispetto alle norme del Terzo Manifesto.

    
risposta data 07.06.2012 - 13:26
fonte

Leggi altre domande sui tag