Maison  >  Article  >  base de données  >  Parlons des différents tris de ORDER BY dans ORACLE

Parlons des différents tris de ORDER BY dans ORACLE

WBOY
WBOYavant
2022-03-17 18:49:095840parcourir

Cet article vous apporte des connaissances pertinentes sur Oracle, qui introduit principalement des problèmes liés au tri multiple de ORDER BY, y compris le tri par un seul champ, le tri par plusieurs champs, le tri par sous-chaînes, etc., j'espère que cela aidera tout le monde.

Parlons des différents tris de ORDER BY dans ORACLE

Tutoriel recommandé : "Tutoriel Oracle Learning"

1. Trier par un seul champ

Ordre croissant : ORDER BY ASC (par défaut)

Ordre décroissant : ORDER BY DESC

Renvoyer les résultats réels de la requête dans l'ordre spécifié Lors de l'extraction de données ou de la génération de rapports, il est généralement nécessaire de les visualiser dans un certain ordre. Par exemple, si vous souhaitez visualiser les informations sur les employés employés par l'unité.

SELECT empno, ename, hiredate FROM emp WHERE deptno = 10 ORDER BY hiredate ASC;

Beaucoup de gens peuvent écrire ce genre d'instruction pour trier les résultats de la requête, mais en plus de "ORDER BY steadyate ASC", vous pouvez également écrire "ORDER BY 3 ASC", ce qui signifie trier par la troisième colonne.

SELECT empno, ename, hiredate FROM emp WHERE deptno = 10 ORDER BY 3 ASC;

Lorsque la valeur est incertaine, il est très pratique d'utiliser cette méthode. Il convient de noter que

l'utilisation de données pour remplacer la position de la colonne ne peut être utilisée que dans la clause order by et ne peut pas être utilisée ailleurs

. 2 . Trier par plusieurs champs

Et si vous triez sur plusieurs colonnes et qu'il y a une augmentation ou une diminution ? Par exemple, lors du tri par numéro de département par ordre croissant et salaire par ordre décroissant, il y a deux mots-clés : ASC signifie ordre croissant et DESC signifie ordre décroissant. Nous ajoutons donc deux colonnes après ordre par et marquons respectivement ASC et DESC.

SELECT empno, deptno, sal, ename, job FROM emp ORDER BY 2 ASC, 3 DESC;

Ce qui suit est introduit sous la forme d'un diagramme, comme le montre la figure ci-dessous, lors du tri de plusieurs colonnes, si la colonne précédente a des valeurs en double (telles que deptno = 10 avec 3 lignes de données). , le tri ultérieur ne sera que utile. Cela équivaut à diviser les données en plusieurs groupes selon les colonnes précédentes, puis à trier les données de chaque groupe selon les colonnes suivantes.

3. Trier par sous-chaîne

Un moyen rapide de trier par sous-chaîne consiste à enregistrer le numéro de téléphone du client dans l'ordre du dernier numéro, afin de pouvoir rapidement affiner la portée de la requête et améliorer la reconnaissance du client. . Si vous souhaitez trier de cette manière, que devez-vous faire ? Utilisez simplement la fonction pour obtenir les informations requises pour les bits suivants.

SELECT last_name AS 名称,
       phone_number AS 号码,
       salary as 工资,
       substr(phone_number, -4) AS 尾号
  FROM hr.employees
 WHERE rownum < 5
 ORDER BY 4;

On voit que tant que les données peuvent être interrogées, elles peuvent être triées en fonction des informations correspondantes.

4. TRANSLATE

Format de grammaire : TRANSLATE (expr, from_string, to_string)

Les exemples sont les suivants :

SELECT TRANSLATE( &#39;ab 你好 bcadefg&#39;, &#39;abcdefg&#39;, &#39;1234567&#39; ) AS NEW_STR FROM DUAL;

from_string et to_string sont en unités de caractères, et les caractères correspondants sont remplacés un par un. .

Si to_string est vide, une valeur nulle sera renvoyée

SELECT TRANSLATE( &#39;ab 你好 bcadefg&#39;, &#39;abcdefg&#39;, &#39;&#39; ) AS NEW_STR FROM DUAL;

S'il n'y a aucun caractère dans la position correspondante de to_string, la suppression des caractères répertoriés dans from_string sera éliminée.

SELECT TRANSLATE( &#39;ab 你好 bcadefg&#39;, &#39;1abcdefg&#39;, &#39;1&#39; ) AS NEW_STR FROM DUAL;

5. Trier par lettres dans une chaîne mixte de chiffres et de lettres

Créez d'abord la VUE comme suit :

CREATE OR REPLACE VIEW V 
as 
SELECT empno || &#39; &#39; || ename AS data FROM emp;
select * from V;

Cette exigence est un peu plus difficile, voyez les lettres. à l'intérieur (est-ce le nom de la colonne d'origine) ? Nécessite un ordre alphabétique (nom de la colonne).

Ensuite, nous devons d'abord supprimer les lettres. Nous pouvons utiliser la fonction de remplacement de traduire pour remplacer les nombres et les espaces par des valeurs vides :

SELECt data, translate (data, &#39;- 0123456789&#39;, &#39;-&#39; )AS ename
  FROM v
 ORDER BY 2;

6. les valeurs sont dans Plus tard, que dois-je faire si je souhaite afficher la valeur nulle (telle que emp.comm) au premier plan Dois-je utiliser NVL (comm, -1) ?

SELECT ename, sal, comm, nvl(comm, - 1) order_col FROM emp ORDER BY 4;

也许很多人都是用的这种方法,但这种方法需要对列类型及其中保存的数据有所了解才行,而且保存的数据如果有变化,该语句就要重新维护。
其实可以用关键字 NULLS FIRST和 NULLS LAST。

空值在前

SELECT ename, sal, comm FROM emp ORDER BY 3 NULLS FIRST;

空值在后

SELECT ename, sal, comm FROM emp ORDER BY 3 NULLS LAST;

是不是要方便得多?

7. 根据条件取不同列中的值来排序

有时排序的要求会比较复杂,比如:领导对工资在1000到2000元之间的员工更感兴趣,于是要求工资在这个范围的员工要排在前面,以便优先査看。
对于这种需求,我们可以在查询中新生成一列,用多列排序的方法处理:

SELECT empno AS 编码,
       ename AS 姓名,
       CASE
         WHEN sal > 1000 AND sal < 2000 THEN
          1
         ELSE
          2
       END AS 级别,
       sal AS工资
  FROM emp
 WHERE deptno = 30
 ORDER BY 3, 4;

可以看到,950与2850都排在了后面,也可以不显示级别,直接把 case when放在order by中

SELECT empno AS 编码, ename AS 姓名, sal AS工资
  FROM emp
 WHERE deptno = 30
 ORDER BY CASE
            WHEN sal >= 1000 AND sal < 2000 THEN
             1
            ElSE
             2
          END,
          3;

 

推荐教程:《Oracle教程

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer