Q Language - Query funzionali
Le query funzionali (dinamiche) consentono di specificare i nomi delle colonne come simboli per le tipiche colonne di selezione / esecuzione / eliminazione di q-sql. È molto utile quando vogliamo specificare dinamicamente i nomi delle colonne.
Le forme funzionali sono:
?[t;c;b;a] / for select
![t;c;b;a] / for update
dove
t è un tavolo;
a è un dizionario di aggregati;
bla frase secondaria; e
c è un elenco di vincoli.
Nota -
Tutti q entità in a, b, e c deve essere referenziato in base al nome, ovvero come simboli contenenti i nomi delle entità.
Le forme sintattiche di selezione e aggiornamento vengono analizzate nelle loro forme funzionali equivalenti da q interprete, quindi non c'è differenza di prestazioni tra le due forme.
Selezione funzionale
Il seguente blocco di codice mostra come usare functional select -
q)t:([]n:`ibm`msft`samsung`apple;p:40 38 45 54)
q)t
n p
-------------------
ibm 40
msft 38
samsung 45
apple 54
q)select m:max p,s:sum p by name:n from t where p>36, n in `ibm`msft`apple
name | m s
------ | ---------
apple | 54 54
ibm | 40 40
msft | 38 38
Esempio 1
Cominciamo con il caso più semplice, la versione funzionale di “select from t” sembrerà -
q)?[t;();0b;()] / select from t
n p
-----------------
ibm 40
msft 38
samsung 45
apple 54
Esempio 2
Nell'esempio seguente, utilizziamo la funzione enlist per creare singleton per garantire che le entità appropriate siano elenchi.
q)wherecon: enlist (>;`p;40)
q)?[`t;wherecon;0b;()] / select from t where p > 40
n p
----------------
samsung 45
apple 54
Esempio 3
q)groupby: enlist[`p] ! enlist `p
q)selcols: enlist [`n]!enlist `n
q)?[ `t;(); groupby;selcols] / select n by p from t
p | n
----- | -------
38 | msft
40 | ibm
45 | samsung
54 | apple
Esecuzione Funzionale
La forma funzionale di exec è una forma semplificata di select.
q)?[t;();();`n] / exec n from t (functional form of exec)
`ibm`msft`samsung`apple
q)?[t;();`n;`p] / exec p by n from t (functional exec)
apple | 54
ibm | 40
msft | 38
samsung | 45
Aggiornamento funzionale
La forma funzionale di aggiornamento è completamente analoga a quella di select. Nell'esempio seguente, l'uso di enlist consiste nel creare singleton, per garantire che le entità di input siano elenchi.
q)c:enlist (>;`p;0)
q)b: (enlist `n)!enlist `n
q)a: (enlist `p) ! enlist (max;`p)
q)![t;c;b;a]
n p
-------------
ibm 40
msft 38
samsung 45
apple 54
Cancellazione funzionale
L'eliminazione funzionale è una forma semplificata di aggiornamento funzionale. La sua sintassi è la seguente:
![t;c;0b;a] / t is a table, c is a list of where constraints, a is a
/ list of column names
Facciamo ora un esempio per mostrare come funziona l'eliminazione funzionale:
q)![t; enlist (=;`p; 40); 0b;`symbol$()]
/ delete from t where p = 40
n p
---------------
msft 38
samsung 45
apple 54