TOP

SQL-Lezione 6. Campi calcolati (calcolati).

YouLibreCalc for Excel logo

Perché dovresti utilizzare i campi di calcolo? Di norma, le informazioni nel database vengono presentate sotto forma di frammenti separati, poiché è più semplice strutturare i dati e operare su di essi. Tuttavia, spesso avremo bisogno di utilizzare non singoli dati, ma informazioni già combinate ed elaborate. Ad esempio, spesso è necessario combinare nomi e cognomi dei clienti, combinare elementi dell'indirizzo che si trovano in diverse colonne della tabella, elaborare testi e singole parole, lettere e simboli, riassumere il costo totale dell'acquisto , per visualizzare le statistiche sulle informazioni presenti nel database. I dati vengono solitamente archiviati in "blocchi" separati, che richiedono un'ulteriore elaborazione da parte del programma client. Tuttavia, è possibile ricevere informazioni già elaborate utilizzando un DBMS. È in questo caso che i campi di calcolo aiutano. Vengono create automaticamente quando viene eseguita la query e hanno l'aspetto e le proprietà delle colonne ordinarie già presenti nella tabella. L'unica differenza è che non ci sono campi calcolati fisicamente, quindi non occupano spazio aggiuntivo nel DB, ma esistono temporaneamente nella "memoria casuale" del DBMS. Il vantaggio di eseguire operazioni dal lato DBMS è la velocità di elaborazione dei dati.


1. Esecuzione di operazioni matematiche

Un modo per utilizzare i campi calcolati consiste nell'eseguire operazioni matematiche sui dati selezionati. Facciamo un esempio di come ciò accade, utilizzando nuovamente la nostra tabella Sumproduct. Supponiamo di dover calcolare il prezzo di acquisto medio di ciascun prodotto. Per fare ciò, devi ridistribuire la colonna Amount su Quantity (quantità):

Run SQLSELECT DISTINCT Product, Amount/Quantity 
FROM Sumproduct

Come puoi vedere, il DBMS ha selezionato tutti i nomi dei prodotti e ne ha visualizzato il costo medio in una colonna separata creata durante l'esecuzione della query. Puoi anche notare che abbiamo utilizzato un operatore aggiuntivo DISTINCT, di cui abbiamo bisogno per visualizzare nomi di prodotto univoci (senza di esso avremmo record duplicati).

2. Utilizzo di pseudonimi

Nell'esempio precedente, abbiamo calcolato il prezzo medio di acquisto di ciascun prodotto e visualizzato il valore nella colonna di calcolo. Tuttavia, in futuro sarà scomodo per noi fare riferimento a questo campo, poiché il suo nome non ci è informativo (il DBMS ha dato il nome del campo - Expr1001). Possiamo però denominare il campo in modo indipendente specificandone in anticipo il nome nella query, ovvero fornendo un alias. Riscriviamo l'esempio precedente e specifichiamo un alias per il campo calcolato:

Run SQLSELECT DISTINCT Product, Amount/Quantity AS AvgPrice 
FROM Sumproduct

Vediamo che il nostro campo di calcolo ha ricevuto il proprio nome AvgPrice. Per questo abbiamo utilizzato l'operatore AS, dopo di che abbiamo specificato il nome di cui avevamo bisogno. Va notato che in SQL sono supportate solo le operazioni matematiche di base: addizione (+), sottrazione (-), moltiplicazione (*), divisione (/). È inoltre possibile utilizzare parentesi tonde per modificare la sequenza delle operazioni.

Gli alias vengono spesso utilizzati non solo per denominare i campi di calcolo, ma anche per rinominare quelli attivi. Ciò potrebbe essere necessario se il campo attivo ha un nome lungo o il nome non è sufficientemente informativo.

3. Collegamento dei campi (concatenazione)

Oltre alle operazioni matematiche, possiamo anche combinare il testo e visualizzarlo in un campo separato. Consideriamo come incollare (concatenare) il testo. Per collegare il testo di diverse colonne in MS Access, viene utilizzato l'operatore più (+), ad esempio:

Run SQLSELECT Month + ' ' + Product AS NewField, Quantity  
FROM Sumproduct

In questo esempio, abbiamo combinato i valori in due colonne e abbiamo generato il risultato in un nuovo campo NewField.

L'operatore più (+) non è supportato nel dialetto MySQL per connettere (concatenare) testo da più colonne. In questo caso, utilizzare la funzione CONCAT().