English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Manuale di riferimento SQL

Clausola ORDER BY SQL

In questo tutorial, imparerai come ordinare i dati restituiti da una query SELECT SQL.

Ordinamento dei risultati

Di solito, quando utilizzi una istruzione SELECT per ottenere dati da una tabella, le righe nel risultato non hanno un ordine specifico. Se desideri ordinare i risultati in un ordine specifico, puoi specificare la clausola ORDER BY alla fine dell'istruzione, che indica come ordinare i dati restituiti dalla query. L'ordine di ordinamento predefinito è in ordine crescente.

Sintassi ORDER BY

SELECT column_list FROM table_name ORDER BY column_name ASC|DESC;

Qui,column_listè il database della tabella da cui ottenere il valore.il nome,età,nazionee altri campi/variabiliil nome, mentrecolumn_nameè il nome della colonna da ordinare. Vediamo alcuni esempi per illustrare come funziona effettivamente.

Considera che nel nostro database c'è unaemployeesLa tabella ha i seguenti record:

+--------+--------------+------------+--------+---------+
| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      1 | Ethan Hunt   | 2001-05-01 |   5000 |       4 |
|      2 | Tony Montana | 2002-07-15 |   6500 |       1 |
|      3 | Sarah Connor | 2005-10-18 |   8000 |       5 |
|      4 | Rick Deckard | 2007-01-03 |   7200 |       3 |
|      5 | Martin Blank | 2008-06-24 |   5600 |    NULL |
+--------+--------------+------------+--------+---------+

ordinamento per singola colonna

La seguente istruzione SQL estrarràemployeesLa tabella restituisce tutti gli employee, ordinati peremp_nameL'ordinamento in ordine crescente delle colonne di risultato.

SELECT * FROM employees 
ORDER BY emp_name ASC;

Puoi saltare l'opzione ASC e utilizzare solo la seguente sintassi. Restituisce lo stesso insieme di risultati della precedente istruzione, perché l'ordinamento predefinito di SQL è in ordine crescente:

SELECT * FROM employees 
ORDER BY emp_name;

Dopo aver eseguito il comando sopra, otterrai l'output seguente:

+--------+--------------+------------+--------+---------+
| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      1 | Ethan Hunt   | 2001-05-01 |   5000 |       4 |
|      5 | Martin Blank | 2008-06-24 |   5600 |    NULL |
|      4 | Rick Deckard | 2007-01-03 |   7200 |       3 |
|      3 | Sarah Connor | 2005-10-18 |   8000 |       5 |
|      2 | Tony Montana | 2002-07-15 |   6500 |       1 |
+--------+--------------+------------+--------+---------+

Allo stesso modo, puoi utilizzare l'opzione DESC per eseguire l'ordinamento in ordine decrescente. La seguente istruzione eseguirà l'ordinamento numericoStipendioRisultati di ordinamento decrescente della colonna (salary).

SELECT * FROM employees 
ORDER BY salary DESC;

Questa volta, otterrai i seguenti risultati:

+--------+--------------+------------+--------+---------+
| emp_id | emp_name     | hire_date  | salary | dept_id |
+--------+--------------+------------+--------+---------+
|      3 | Sarah Connor | 2005-10-18 |   8000 |       5 |
|      4 | Rick Deckard | 2007-01-03 |   7200 |       3 |
|      2 | Tony Montana | 2002-07-15 |   6500 |       1 |
|      5 | Martin Blank | 2008-06-24 |   5600 |    NULL |
|      1 | Ethan Hunt   | 2001-05-01 |   5000 |       4 |
+--------+--------------+------------+--------+---------+

ordinamento multi-colonna

Puoi anche specificare più colonne durante l'ordinamento. Ma, a meno che ci siano valori duplicati nella tabella, le modifiche al set di risultati non saranno visibili. Bene, troviamo:

Per comprendere meglio l'ordinamento multi-colonna, supponiamo di avere un database con un nomeTraineestabella, che contiene i seguenti record:

+----+------------+------------+-------------+--------+
| id | first_name | last_name  | birth_date  | gender |
+----+------------+------------+-------------+--------+
|  1 | Peter      | Parker      | 1998-03-04  |  M      |
|  2 | Harry      | Potter     | 2001-08-30  |  M     |
|  3 | Peter      | Pan        | 2004-09-19  |  M     |
|  4 | Alice      | Kingsleigh | 1999-07-02  |  F     |
|  5 | John       | Connor     | 2002-01-15  |  M     |
+----+------------+------------+-------------+--------+

Se guardate attentamente la tabella, noterete che ci sono alcuni valori duplicati. Ma, i partecipanti addestrati Peter Parker e Peter Pan hanno nomi completi diversi, ma nomi uguali.

Eseguendo il seguente comando, il quale ordina perfirst_nameeseguita sui risultati delle colonneOrdinamento.

SELECT * FROM trainees 
ORDER BY first_name;

Dopo l'esecuzione, otterrete il seguente output:

+----+------------+------------+-------------+--------+
| id | first_name | last_name  | birth_date  | gender |
+----+------------+------------+-------------+--------+
|  4 | Alice      | Kingsleigh | 1999-07-02  |  F     |
|  2 | Harry      | Potter     | 2001-08-30  |  M     |
|  5 | John       | Connor     | 2002-01-15  |  M     |
|  1 | Peter      | Parker      | 1998-03-04  |  M      |
|  3 | Peter      | Pan        | 2004-09-19  |  M     |
+----+------------+------------+-------------+--------+

Eseguendo questa query, la quale ordina perfirst_nameelast_nameeseguita sui risultati delle colonneOrdinamento.

SELECT * FROM trainees 
ORDER BY first_name, last_name;
+----+------------+------------+-------------+--------+
| id | first_name | last_name  | birth_date  | gender |
+----+------------+------------+-------------+--------+
|  4 | Alice      | Kingsleigh | 1999-07-02  |  F     |
|  2 | Harry      | Potter     | 2001-08-30  |  M     |
|  5 | John       | Connor     | 2002-01-15  |  M     |
|  3 | Peter      | Pan        | 2004-09-19  |  M     |
|  1 | Peter      | Parker      | 1998-03-04  |  M      |
+----+------------+------------+-------------+--------+

您是否注意到以前的结果集和当前的结果集之间的区别-这次,学员“Peter Parker”的记录紧随“Peter Pan”之后。

由于两个受训者的名字都是“Peter”,因此在这两个受训者的last_name列执行第二级排序,这就是为什么受训者“Peter Parker”的记录在“Peter Pan”之后。

注意:当指定多个排序列时,结果集首先按第一列排序,然后按第二列对该有序列表排序,依此类推。