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.
Empfohlenes Tutorial: „Oracle Learning Tutorial“
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;
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;
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
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;
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.
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;
Es ist ersichtlich, dass die Daten, solange sie abgefragt werden können, nach den entsprechenden Informationen sortiert werden können.
Grammatikformat: TRANSLATE (expr, from_string, to_string)
Beispiele sind wie folgt:
SELECT TRANSLATE( 'ab 你好 bcadefg', 'abcdefg', '1234567' ) AS NEW_STR FROM DUAL;
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( 'ab 你好 bcadefg', 'abcdefg', '' ) AS NEW_STR FROM DUAL;
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( 'ab 你好 bcadefg', '1abcdefg', '1' ) AS NEW_STR FROM DUAL;
Erstellen Sie zunächst die ANSICHT wie folgt:
CREATE OR REPLACE VIEW V as SELECT empno || ' ' || ename AS data FROM emp;
select * from V;
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, '- 0123456789', '-' )AS ename FROM v ORDER BY 2;
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;
也许很多人都是用的这种方法,但这种方法需要对列类型及其中保存的数据有所了解才行,而且保存的数据如果有变化,该语句就要重新维护。
其实可以用关键字 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;
是不是要方便得多?
有时排序的要求会比较复杂,比如:领导对工资在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教程》
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!