Sappiamo che la frase SQL SELECT restituisce le righe senza un ordine particolare. Con l’aiuto della clausola ORDER BY, possiamo ordinare le righe nell’ordine desiderato. La clausola ORDER BY è usata per ordinare i record restituiti in un ordine. Usando la clausola ORDER BY, possiamo ordinare il risultato in ordine ascendente o discendente. Questa clausola può essere usata anche con colonne multiple.
Sintassi ORDER BY
SELECT column_name1, column_name2, column_name3.... FROM table_nameWHERE Condition ORDER BY column_name1, column_name2, .... (ASC OR DESC);
Qui si usa ASC per ordinare in ordine crescente e DESC per l’ordine decrescente.
esempio di clausola ORDER BY SQL
Diciamo di avere una tabella “STUDENT” con i seguenti record.
+---------+----------+-----+-----------+----------+| ROLL_NO | NAME | AGE | BRANCH | CITY |+---------+----------+-----+-----------+----------+| 10001 | Kate | 22 | CSE | Mumbai || 10002 | Richard | 21 | ECE | Delhi || 10003 | Rick | 33 | ME | Chennai || 10004 | Peter | 26 | CSE | Delhi || 10005 | Steve | 22 | CSE | Noida || 10006 | Mark | 22 | ECE | Jaipur || 10007 | Brad | 23 | ME | Rampur |+---------+----------+-----+-----------+----------+
La seguente istruzione SQL recupererà tutti i record dalla tabella “STUDENT” e le righe restituite saranno in ordine crescente di età dello studente.
SELECT * FROM STUDENTORDER BY AGE;
Nota: L’ordine predefinito di ordinamento è ascendente quindi le righe saranno ordinate in base alla colonna “AGE”, anche se non abbiamo usato la parola chiave ASC nella clausola order by. Quindi è sicuro dire che la seguente query è uguale alla query precedente e otterrà lo stesso risultato.
SELECT * FROM STUDENTORDER BY AGE ASC;
Risultato:
+---------+----------+-----+-----------+----------+| ROLL_NO | NAME | AGE | BRANCH | CITY |+---------+----------+-----+-----------+----------+| 10002 | Richard | 21 | ECE | Delhi || 10001 | Kate | 22 | CSE | Mumbai || 10005 | Steve | 22 | CSE | Noida || 10006 | Mark | 22 | ECE | Jaipur || 10007 | Brad | 23 | ME | Rampur || 10004 | Peter | 26 | CSE | Delhi || 10003 | Rick | 33 | ME | Chennai |+---------+----------+-----+-----------+----------+
SQL ORDER BY DESC esempio
Tabella: STUDENT
+---------+----------+-----+-----------+----------+| ROLL_NO | NAME | AGE | BRANCH | CITY |+---------+----------+-----+-----------+----------+| 10001 | Kate | 22 | CSE | Mumbai || 10002 | Richard | 21 | ECE | Delhi || 10003 | Rick | 33 | ME | Chennai || 10004 | Peter | 26 | CSE | Delhi || 10005 | Steve | 22 | CSE | Noida || 10006 | Mark | 22 | ECE | Jaipur || 10007 | Brad | 23 | ME | Rampur |+---------+----------+-----+-----------+----------+
La seguente istruzione SQL recupererà i nomi degli studenti dalla tabella “STUDENT” e i nomi restituiti saranno ordinati in modo decrescente (abbiamo usato DESC per ordine decrescente nella clausola ORDER BY).
SELECT NAME FROM STUDENTORDER BY NAME DESC;
Risultato:
+----------+| NAME | +----------+| Steve | | Rick | | Richard | | Peter | | Mark | | Kate | | Brad | +----------+
Come potete vedere, abbiamo ottenuto una lista di nomi di studenti ordinati in modo decrescente.
SQL ORDER BY Multiple Columns
Negli esempi precedenti, abbiamo fatto l’ordinamento basato su una singola colonna. Tuttavia possiamo usare più colonne nella clausola ORDER BY.
Quando più colonne sono usate in ORDER BY, prima le righe saranno ordinate in base alla prima colonna e poi alla seconda colonna. Facciamo un esempio per capire questo.
Tabella: EMPLOYEE
EMP_ID EMP_NAME COUNTRY CITY PINCODE------ -------- ------- ---- -------1001 Paul India Noida 2013101005 Raul India Agra 2831261002 Ajeet India Noida 2013011003 Jon India Agra 2820081006 David India Agra 2820051004 Chetan India Noida 201313
Ordina le righe in base alla città prima e poi per codice pin all’interno di ogni città:
SELECT * FROM EMPLOYEEORDER BY CITY, PINCODE;
Risultato:
Come potete vedere le righe sono ordinate per CITTÀ e poi all’interno della città ordinate per codice pin.
EMP_ID EMP_NAME COUNTRY CITY PINCODE------ -------- ------- ---- -------1006 David India Agra 2820051003 Jon India Agra 2820081005 Raul India Agra 2831261002 Ajeet India Noida 2013011001 Paul India Noida 2013101004 Chetan India Noida 201313
Ordina le righe in base alla città prima in ordine crescente e poi per codice pin in ordine decrescente all’interno di ogni città:
SELECT * FROM EMPLOYEEORDER BY CITY ASC, PINCODE DESC;
Risultato:
Come potete vedere le righe sono ordinate per CITTA’ in ordine crescente e poi all’interno della città ordinate in ordine inverso per codice pin.
EMP_ID EMP_NAME COUNTRY CITY PINCODE------ -------- ------- ---- -------1005 Raul India Agra 2831261003 Jon India Agra 2820081006 David India Agra 2820051004 Chetan India Noida 2013131001 Paul India Noida 2013101002 Ajeet India Noida 201301