Heim > Datenbank > Oracle > Lassen Sie uns über die verschiedenen Sortierungen von ORDER BY in ORACLE sprechen

Lassen Sie uns über die verschiedenen Sortierungen von ORDER BY in ORACLE sprechen

WBOY
Freigeben: 2022-03-17 18:49:09
nach vorne
5974 Leute haben es durchsucht

Dieser Artikel vermittelt Ihnen relevantes Wissen über Oracle, in dem hauptsächlich Probleme im Zusammenhang mit der Mehrfachsortierung von ORDER BY vorgestellt werden, einschließlich der Sortierung nach einem einzelnen Feld, der Sortierung nach mehreren Feldern, der Sortierung nach Teilzeichenfolgen usw. Ich hoffe, es hilft allen.

Lassen Sie uns über die verschiedenen Sortierungen von ORDER BY in ORACLE sprechen

Empfohlenes Tutorial: „Oracle Learning Tutorial

1. Nach einem einzelnen Feld sortieren

Aufsteigende Reihenfolge: ORDER BY ASC (Standard)

Absteigende Reihenfolge: ORDER BY DESC

Die tatsächlichen Abfrageergebnisse zurückgeben in der angegebenen Reihenfolge Beim Extrahieren von Daten oder beim Erstellen von Berichten ist es im Allgemeinen erforderlich, diese in einer bestimmten Reihenfolge anzuzeigen, beispielsweise wenn Sie die Informationen der in der Einheit beschäftigten Mitarbeiter anzeigen möchten.

SELECT empno, ename, hiredate FROM emp WHERE deptno = 10 ORDER BY hiredate ASC;
Nach dem Login kopieren

Viele Leute können diese Art von Anweisung schreiben, um Abfrageergebnisse zu sortieren, aber zusätzlich zu „ORDER BY Hiredate ASC“ können Sie auch „ORDER BY 3 ASC“ schreiben, was bedeutet, dass nach der dritten Spalte sortiert wird.

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

Wenn der Wert unsicher ist, ist es sehr praktisch, diese Methode zu verwenden. Es ist zu beachten, dass

die Verwendung von Daten zum Ersetzen der Spaltenposition nur in der Order-By-Klausel und nicht an anderer Stelle verwendet werden kann

2. Nach mehreren Feldern sortieren

Was passiert, wenn Sie nach mehreren Spalten sortieren und es zu einer Erhöhung oder Verringerung kommt? Wenn Sie beispielsweise nach Abteilungsnummer in aufsteigender Reihenfolge und nach Gehalt in absteigender Reihenfolge sortieren, gibt es zwei Schlüsselwörter: ASC bedeutet aufsteigende Reihenfolge, DESC bedeutet absteigende Reihenfolge. Daher fügen wir nach Sortieren nach zwei Spalten hinzu und markieren ASC bzw. DESC.

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

Das Folgende wird in Form eines Diagramms eingeführt, wie in der folgenden Abbildung gezeigt, wenn die vorherige Spalte doppelte Werte aufweist (z. B. hat deptno = 10 3 Zeilen mit Daten). ), wird die anschließende Sortierung nur nützlich sein. Dies entspricht der Aufteilung der Daten in mehrere Gruppen anhand der vorherigen Spalten und der anschließenden Sortierung der Daten jeder Gruppe anhand der folgenden Spalten.

3. Sortieren nach Teilzeichenfolge

Eine schnelle Möglichkeit zum Sortieren nach Teilzeichenfolge besteht darin, die Telefonnummer des Kunden in der Reihenfolge der letzten Nummer aufzuzeichnen, sodass Sie den Umfang der Abfrage schnell eingrenzen und die Kundenerkennung verbessern können. . Was sollten Sie tun, wenn Sie auf diese Weise sortieren möchten? Verwenden Sie einfach die Funktion, um die erforderlichen Informationen für die nächsten paar Bits zu erhalten.

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

Es ist ersichtlich, dass die Daten, solange sie abgefragt werden können, nach den entsprechenden Informationen sortiert werden können.

4. TRANSLATE

Grammatikformat: TRANSLATE (expr, from_string, to_string)

Beispiele sind wie folgt:

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

from_string und to_string sind in Zeicheneinheiten und die entsprechenden Zeichen werden einzeln ersetzt .

Wenn to_string leer ist, wird ein Nullwert zurückgegeben

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

Wenn sich an der entsprechenden Position von to_string keine Zeichen befinden, entfällt das Löschen der in from_string aufgeführten Zeichen.

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

5. Sortieren Sie nach Buchstaben in einer gemischten Folge aus Zahlen und Buchstaben.

Erstellen Sie zunächst die ANSICHT wie folgt:

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

Diese Anforderung ist etwas schwieriger, sehen Sie sich die Buchstaben darin an (Ist es der ursprüngliche Spaltenname)? Erfordert eine alphabetische Reihenfolge darin (Spalte ename).

Dann müssen wir zuerst die Ersetzungsfunktion von Translate verwenden, um die Zahlen und Leerzeichen durch leere Werte zu ersetzen:

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

6. Handhabung der Sortierung von Nullwerten

Oracles Standardsortierung von Nullen Werte sind später, was soll ich tun, wenn ich den Nullwert (z. B. emp.comm) vorne anzeigen möchte? Soll ich NVL (comm, -1) verwenden?

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

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

空值在前

SELECT ename, sal, comm FROM emp ORDER BY 3 NULLS FIRST;
Nach dem Login kopieren

空值在后

SELECT ename, sal, comm FROM emp ORDER BY 3 NULLS LAST;
Nach dem Login kopieren

是不是要方便得多?

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;
Nach dem Login kopieren

可以看到,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;
Nach dem Login kopieren

 

推荐教程:《Oracle教程

Das obige ist der detaillierte Inhalt vonLassen Sie uns über die verschiedenen Sortierungen von ORDER BY in ORACLE sprechen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:csdn.net
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage