Maison > Article > base de données > Comment trier les données dans MySQL
Lors de l'interrogation de données, si aucune opération de tri n'est utilisée, par défaut, SQL organisera les résultats de la requête dans l'ordre dans lequel les tuples sont ajoutés.
Pour effectuer des opérations de tri en SQL, vous pouvez utiliser le mot-clé ORDER BY…. Après ce mot-clé, vous pouvez ajouter le mot-clé ASC (ascend) pour indiquer l'ordre croissant (de petit à grand), et DESC (descend) pour indiquer l'ordre décroissant (de grand à petit).
Si ASC ou DESC n'est pas ajouté après le mot-clé ORDER BY... pour indiquer l'ordre croissant ou décroissant, SQL utilisera par défaut l'ordre ASC croissant. Comme indiqué dans le code suivant :
SELECT employee_id, last_name, salary FROM employees ORDER BY salary;
Résultats de la requête :
[Exemple 1] Interrogez le employee_id
et le last_name des employés dans la table des employés <code>employees<.> </.>
, informations salary
et department_id
. Et triez par salaire
du plus grand au plus petit (ordre décroissant). employees
中的员工的 employee_id
、last_name
、salary
和 department_id
信息。并按 salary
从大到小 (降序) 进行排列。
SELECT employee_id, last_name, salary FROM employees ORDER BY salary DESC;
查询结果:
在SQL中,可以使用字段 (列) 的别名来进行排序。因为有时我们需要计算表中没有的字段 (如年薪 annual_salary
) ,或者有些字段名字实在是太长了,使用简短的别名可以提高我们编程的效率。如下例子所示:
【例子】查询员工表 employees
中的员工的 employee_id
、last_name
、月薪 salary
和 年薪 annual_salary
信息。并按 annual_salary
从大到小 (降序) 进行排列。
SELECT employee_id, last_name, salary, salary * (1 + IFNULL(commission_pct, 0) * 12) AS "annual_salary" FROM employees ORDER BY annual_salary DESC;
查询结果:
【注意】
格式要求,WHERE
必须声明在 FROM
后。
列的别名只能在 ORDER BY...
中使用,不能在 WHERE
中使用。**如果在 WHERE
中使用列的别名,SQL会报错。那为什么MySQL中列的别名不能在 WHERE
中使用呢?原因如下:
【原因】
SELECT employee_id, last_name, department_id FROM employees WHERE department_id IN(50, 60, 70) ORDER BY department_id DESC;
在SQL中,查询语句的执行顺序不遵循上述代码从第1行到第4行从上往下的顺序。而是首先执行第2行 FROM... ,先去找要查询的表。
再执行第3行 WHERE... ,去筛选符合条件的元组。
然后执行第1行 SELECT... ,显示你要查询的字段。由于在这一步才会生成列的别名,因此无法在上一步中使用它提供的 WHERE 语句。但是可以提供给下一步的 ORDER BY 来使用。
最后才是第4行 ORDER BY... ,按某列排序。这个时候可以使用列的别名来进行排序。
查询结果:
在实际生活中,有时候我们需要在按照一个字段排序后再按照另一个字段排序。在SQL中我们可以使用二级排序来实现。使用方法请看下面例子:
【例子1】查询员工表 employees
中的员工的员工ID employee_id
、名字 last_name
、月薪 salary
和部门ID department_id
。并先按部门ID department_id
降序排列,再按 salary
从大到小 (降序) 进行排列。
SELECT employee_id, last_name, salary, department_id FROM employees ORDER BY department_id DESC, salary DESC;
查询结果:
依次类推,可以在 ORDER BY
rrreee
annual_salary
), ou que certains noms de champs sont vraiment trop longs, l'utilisation d'alias courts peut améliorer l'efficacité de notre programmation. Comme le montre l'exemple suivant : 🎜🎜[Exemple] Recherchez le employee_id
, le last_name
et le salaire mensuel salary
des employés dans la table des employés. Informations sur le employés
> et le salaire annuel annual_salary
. Et triez par annual_salary
du plus grand au plus petit (ordre décroissant). 🎜rrreee🎜Résultats de la requête : 🎜🎜🎜 🎜 【Remarque】🎜WHERE
doit être déclaré après FROM
. 🎜🎜🎜🎜Les alias de colonnes ne peuvent être utilisés que dans ORDER BY...
, pas dans WHERE
. **Si vous utilisez des alias de colonne dans WHERE
, SQL signalera une erreur. Alors pourquoi les alias de colonnes dans MySQL ne peuvent-ils pas être utilisés dans WHERE
? Les raisons sont les suivantes : 🎜🎜employee_id
, le nom last_name
et le salaire mensuel des employés dans la table des employés employés
salaire
et numéro de service department_id
. Et triez d'abord par ID de service department_id
par ordre décroissant, puis triez par salaire
de grand à petit (ordre décroissant). 🎜rrreee🎜Résultats de la requête : 🎜🎜🎜 🎜 Par analogie, vous pouvez ajouter une virgule après ORDER BY
pour obtenir un tri de troisième, quatrième niveau.... 🎜Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!