English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Clausola ORDER BY SQL
Ordinamento dei risultati
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 | +--------+--------------+------------+--------+---------+
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 | +--------+--------------+------------+--------+---------+
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”之后。
注意:当指定多个排序列时,结果集首先按第一列排序,然后按第二列对该有序列表排序,依此类推。