Query SQL¶
Introduzione
Gli oggetti Database interno e Database ODBC supportano lo standard ANSI SQL-92 per le query di interrogazione ai relativi database. È inoltre possibile eseguire query di tipo DELETE per eliminare record. Tutte le altre operazioni, come l’aggiunta/rimozione/rinomina, si eseguono tramite i metodi OPC UA esposti dagli stessi oggetti.
Nota
per i dettagli su dichiarazioni e clausole SQL fare riferimento allo standard.
Dichiarazioni supportate
SELECT
DELETE
UPDATE
Clausole supportate per la dichiarazione SELECT
FROM
JOIN
AS
(alias per tabelle e colonne, ammette identificatori regolari e delimitati)WHERE
GROUP BY
ORDER BY
Set function (
COUNT
,MAX
,MIN
,AVG
,SUM
)HAVING
LIMIT
Nota
è supportata la variante
LIMIT OFFSET
per limitare il numero di record restituiti, ad esempioSELECT * FROM Table1 LIMIT 1000 OFFSET 10
restituisce 1000 record a partire dal record numero 10. L’offset è opzionale e il suo valore di default è 0.
Sono inoltre supportate le sub query ammesse per la clausola FROM
e per il predicato IN
Importante
la clausola FROM
è obbligatoria, le altre sono opzionali.
Importante
le clausole devono sempre rispettare il seguente ordine: FROM
, WHERE
, GROUP
, HAVING
, ORDER
, LIMIT
.
Clausola JOIN
Sono supportati tutti i tipi di JOIN
:
cross
inner
outer (
left outer
,oright outer
,full outer
)
Nota
Il DBMS su cui si esegue la query può prevedere limitazioni.
Clausola WHERE
La clausola WHERE
supporta i seguenti operatori:
operatori di confronto
<
,<=
,>
,>=
,=
,<>
operatori logici
AND
,OR
eNOT
operatori
IN
,LIKE
,BETWEEN
,IS NULL
Clausola EXTRACT
La clausola EXTRACT
estrae una componente di Data/Ora da una colonna di tipo DateTime. Di seguito alcuni esempi:
SELECT EXTRACT(DAY FROM Time) AS "Day" FROM ...
SELECT EXTRACT(YEAR FROM Time) AS "Year" FROM ...
SELECT EXTRACT(MONTH FROM Time) AS "Month" FROM ...
SELECT EXTRACT(HOUR FROM Time) AS "Hour" FROM ...
SELECT EXTRACT(MINUTE FROM Time) AS "Minute" FROM ...
SELECT EXTRACT(SECOND FROM Time) AS "Second" FROM ...
Clausola CHAR_LENGTH
La clausola CHAR_LENGTH
ottiene la lunghezza di una colonna di tipo String. Di seguito un esempio:
SELECT CHAR_LENGTH(Column1) AS Column1Length FROM ...
Valori letterali ammessi in una query
Sono ammessi i seguenti valori letterali:
booleani
true
efalse
numeri interi, decimali (il separatore dei decimali è il punto “
.
”) e decimali in notazione scientifica (es.:-1.034E3
)stringhe di testo delimitate da apici (es.:
'string'
)Nota
per inserire l’apice
'
in una stringa di testo è necessario raddoppiarlo (ad esempio, per scrivere'string'
è necessario scrivere''string''
)date e ore in notazione ISO 8601 delimitate da doppi apici (es.:
"2004-05-23T14:25:10.487"
).Nota
la notazione per data e ora è non standard ANSI SQL e consente di evitare le keyword
DATE
,TIME
eTIMESTAMP
senza ambiguità.
Convenzioni sui tipi di dati in una query
Valgono le seguenti convenzioni:
I numeri interi sono di tipo Int32.
I numeri decimali sono di tipo Double.
I letterali true e false sono interpretati come dati di tipo Boolean
Identificatori
Sono ammessi i seguenti identificatori:
regolari: non contengono spazi, iniziano con una lettera maiuscola o minuscola e possono contenere cifre numeriche, lettere e il carattere underscore “
_
”.delimitati: sono delimitati doppi apici “
"
” e possono contenere qualsiasi carattere (tranne il carattere “"
”). Eventuali spazi alla fine vengono ignorati.