English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
In diesem Tutorial lernen Sie, wie Sie die Daten sortieren, die von einem SELECT-SQL-Abfrageergebnis zurückgegeben werden.
Normalerweise haben die Zeilen in der Ergebnismenge eines SELECT-Ausdrucks keine spezifische Reihenfolge. Wenn Sie die Ergebnismenge in einer bestimmten Reihenfolge anordnen möchten, können Sie am Ende des Ausdrucks die ORDER BY Klausel angeben, die dem Programm mitteilt, wie die Daten sortiert werden sollen. Die Standardreihenfolge ist aufsteigend.
ORDER BY Klausel
SELECT column_list FROM table_name ORDER BY column_name ASC|DESC;
Hierbeicolumn_listist die Datenbanktabelle, deren Wert abgerufen werden soll.Name,Alter,Landund andere Spalten/FeldNameundcolumn_nameDies ist der Name der zu sortierenden Spalte. Lassen Sie uns einige Beispiele betrachten, um zu zeigen, wie es in der Praxis funktioniert.
考虑我们在数据库中有一个employees表,该表具有以下记录:
+--------+--------------+------------+--------+---------+ | 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 | +--------+--------------+------------+--------+---------+
下面的SQL语句将从employees表中返回所有employee,并按emp_name列的升序对结果集进行排序。
SELECT * FROM employees ORDER BY emp_name ASC;
您可以跳过该ASC选项,而仅使用以下语法。它返回与上一条语句相同的结果集,因为SQL默认排序顺序是升序的:
SELECT * FROM employees ORDER BY emp_name;
执行上述命令后,您将获得如下输出:
+--------+--------------+------------+--------+---------+ | 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 | +--------+--------------+------------+--------+---------+
同样,您可以使用DESC选项以降序执行排序。以下语句将按数字薪水(salary)列的降序排列结果集。
SELECT * FROM employees ORDER BY salary DESC;
这次,您将获得如下结果集:
+--------+--------------+------------+--------+---------+ | 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 | +--------+--------------+------------+--------+---------+
您还可以在排序时指定多个列。但是,除非表中有一些重复的值,否则结果集的更改将不可见。好吧,让我们找出:
为了更好地理解多列排序,我们假设我们在数据库中有一个名为Trainees的表,其中包含以下记录:
+----+------------+------------+-------------+--------+ | 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 | +----+------------+------------+-------------+--------+
如果您仔细查看表格,将会发现我们有一些重复的值。但是,受训者 Peter Parker 和 Peter Pan 的全名不同,但名字相同。
现在执行以下命令,该命令按first_name列对结果集进行排序。
SELECT * FROM trainees ORDER BY first_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 | | 1 | Peter | Parker | 1998-03-04 | M | | 3 | Peter | Pan | 2004-09-19 | M | +----+------------+------------+-------------+--------+
现在执行此语句,该语句按first_name和last_name列对结果集进行排序。
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 | +----+------------+------------+-------------+--------+
Haben Sie den Unterschied zwischen dem früheren Ergebnissatz und dem aktuellen Ergebnissatz bemerkt-In diesem Fall erscheint das Protokoll des Schülers "Peter Parker" direkt nach dem Protokoll von "Peter Pan".
Da die Namen der beiden Trainingsunternehmen beide "Peter" sind, erscheinen diese beiden Trainingsunternehmenlast_nameDie Spalte wird für die zweite Ebenensortierung ausgeführt, daher erscheinen die Aufzeichnungen des Trainingsunternehmens "Peter Parker" nach "Peter Pan".
Hinweis:Wenn mehrere Sortierreihen angegeben sind, wird der Ergebnissatz zunächst nach der ersten Spalte sortiert, dann wird die sortierte Liste nach der zweiten Spalte sortiert und so weiter.