Torna all'elenco degli articoli Articoli
Tempo di lettura: 6 minuti

Come funziona l'operatore di divisione in SQL

L'operatore di divisione in SQL viene utilizzato per dividere un'espressione o un numero per un altro. Questo articolo vi mostrerà come impiegarlo nel modo corretto e gli errori più comuni da evitare.

Il modo migliore per esercitarsi con SQL è il nostro percorso interattivo di Pratica SQL. Contiene oltre 600 esercizi pratici che affrontano diversi argomenti di SQL, dalle semplici query con una sola tabella, alle operazioni JOIN, fino ad argomenti complessi come le subquery. In questo modo è possibile allenare le proprie competenze SQL su esempi aziendali reali.

La divisione in SQL è considerata un operatore aritmetico. Questi sono l'addizione (+), la sottrazione (-), la moltiplicazione (*), la divisione (/) e il modulo (%). Questo articolo si concentra sull'operatore di divisione, discutendo le regole da seguire e alcuni errori comuni a cui prestare attenzione quando si cerca di dividere in SQL.

La sintassi dell'operatore di divisione in SQL è la seguente:

SELECT <expression> / <expression>
FROM table
[WHERE expression]

Si noti che l'inclusione della clausola WHERE è del tutto facoltativa. L'operatore di divisione può essere utilizzato ovunque ci sia un'espressione. Ciò significa che è possibile utilizzare l'operatore di divisione in SQL con:

  • SELECT.
  • WHERE.
  • HAVING.
  • ORDER BY.
  • O come parte di una funzione.

L'esempio più semplice dell'impiego dell'operatore di divisione è il seguente:

SELECT 10 / 2

È possibile eseguire questa query e ottenere il risultato, in questo caso 5. Tuttavia, è più probabile che si lavori con numeri interi che risiedono in colonne all'interno delle tabelle del database.

Vediamo un esempio di questo tipo. Utilizzeremo una tabella chiamata inventario, che contiene i prodotti alimentari tipici insieme al loro prezzo e alla quantita.

inventario

articoloprezzoquantita
Uova1512
Latte34
Farina52
Pane103

Applichiamo l'operatore di divisione a un'intera colonna della nostra tabella e vediamone l'effetto. Consideriamo la seguente query SQL:

SELECT quantita, quantita / 2 AS 'risultato'
FROM livello_inventario

Con questa query, selezioniamo la colonna quantita e mostriamo il risultato della divisione del valore quantita nella colonna risultato che contiene il risultato di quantita / 2. Eseguiamo questa query e osserviamo i risultati:

quantitarisultato
126
42
21
31

I risultati sono quelli che ci aspetteremmo, tranne che per l'ultima riga. Non è forse 3 / 2 = 1,5?! Il risultato mostrato da SQL Server è pari a 1. A seconda della variante di SQL in uso, l'operatore di divisione può gestire la divisione di interi in modo diverso. Chiariamo questo aspetto nella prossima sezione!

Come vengono divisi gli interi in SQL?

Le divisioni di interi possono comportarsi in modo diverso a seconda del sistema di gestione scelto per un database SQL. Gli utenti di MySQL e Oracle possono aspettarsi di trovare il risultato esatto, mostrato con il tipo di dati float, per esempio 3 / 2 = 1,5.

Per gli utenti di SQL Server e PostgreSQL, invece, la divisione dei numeri interi è più complessa. È necessario ricordare alcune regole quando si dividono numeri che non danno come risultato un numero intero. Riprendiamo l'esempio precedente:

SELECT 3 / 2;

Quando viene eseguita in SQL Server o PostgreSQL, il risultato di questa query è 1, mentre la maggior parte degli utenti si aspetterebbe 1,5. Cosa succede? L'operatore di divisione gestisce solo la parte intera del risultato quando divide due numeri interi. Il risultato ottenuto è chiamato quoziente. Il resto non viene considerato. Con la divisione di due numeri interi, il risultato sarà quante volte un numero andrà a finire in un altro, senza frazionamenti.

Considerate questi esempi in SQL Server o PostgreSQL:

Query di divisioneRisultato
SELECT 10 / 33
SELECT 5 / 22
SELECT 11 / 61

Cambiare gli operandi in numeri decimali o a virgola mobile

Questa operazione può essere eseguita solo se la particolare operazione di divisione lo consente. Se sono coinvolti due nomi di colonna, questo metodo non è applicabile; dovrete usare invece il metodo CAST/CONVERT descritto di seguito. È necessario accedere direttamente a uno dei numeri. L'uso di questo metodo è semplice: basta cambiare uno o entrambi gli operandi:

Query di divisioneRisultato
SELECT 10.0 / 33.333333
SELECT 5 / 2.02.5
SELECT 11.0 / 6.01.833333

Possiamo applicare questo metodo anche all'esempio precedente inventario. Dobbiamo aggiornare la nostra query come segue:

SELECT quantita, quantita / 2.0 AS 'risultato'
FROM livello_inventario

L'esecuzione di questa query produce un set di risultati simile a quello precedente, con una differenza fondamentale.

quantitarisultato
126.00000
42.00000
21.00000
31.50000

Questo metodo è ideale se si può accedere e modificare direttamente uno degli operandi. Tuttavia, non è sempre così.

Uso di CAST o CONVERT sulle colonne

Immaginiamo di dividere il valore della colonna prezzo per la colonna quantità per un particolare articolo. La nostra query avrebbe il seguente aspetto:

SELECT prezzo / quantita
FROM inventario
WHERE articolo = 'Farina'

L'esecuzione di questa query mostra 2 come risultato; si tratta di un classico caso di divisione tra interi. Per ovviare a questo problema, si può usare il metodo CAST su una delle colonne.

Dobbiamo aggiornare la nostra query come segue:

SELECT CAST(prezzo AS DECIMAL(7,2)) / quantita AS 'CAST(prezzo)/quantita'
FROM inventario
WHERE articolo = 'Farina'

Si può anche usare CONVERT invece di CAST. Puoi approfondire qui l'argomento della conversione di un intero utilizzando CAST e CONVERT. L'esecuzione di questa query mostra un nuovo risultato:

CAST(prezzo)/quantita
2.50000

Ecco fatto! L'operazione CAST è stata applicata con successo alla colonna prezzo, rendendola di tipo decimale per questa operazione aritmetica. Si noti che se l'espressione aritmetica contiene più di un operatore, gli operatori di moltiplicazione e divisione vengono valutati per primi, seguiti da quelli di addizione e sottrazione. Quando due operatori hanno la stessa priorità, l'espressione viene valutata da sinistra a destra.

Occorre inoltre tenere presente l'errore SQL "divisione per zero", indipendentemente dal sistema di gestione utilizzato. Dividendo per zero si ottiene un risultato indefinito, cosa che SQL non consente. In questo caso viene visualizzato un messaggio di errore. Questa utile pagina del cookbook SQL mostra come gestire l'errore "divisione per zero" in SQL. Dateci un'occhiata se siete interessati!

Ottenere il massimo con l'operatore di divisione SQL!

In questo articolo abbiamo approfondito molto un concetto specifico, mostrandovi le complessità dell'utilizzo dell'operatore di divisione in SQL per la divisione di interi. Abbiamo imparato a gestire la divisione di interi per ogni DBMS SQL, da SQL Server a MySQL. Abbiamo anche parlato del fastidioso errore "divisione per zero" comune in SQL e abbiamo introdotto risorse che vi permetteranno di gestire questo particolare problema in modo elegante.

Come per ogni cosa nella vita, la pratica rende perfetti! Se desiderate rafforzare le vostre competenze in SQL attraverso sfide mensili divertenti e coinvolgenti, prendete in considerazione la Sfida SQL di questo mese.