>데이터 베이스 >Oracle >ORACLE에서 ORDER BY의 다양한 정렬에 대해 이야기해 보겠습니다.

ORACLE에서 ORDER BY의 다양한 정렬에 대해 이야기해 보겠습니다.

WBOY
WBOY앞으로
2022-03-17 18:49:095971검색

이 기사는 단일 필드별 정렬, 여러 필드별 정렬, 하위 문자열별 정렬 등을 포함하여 ORDER BY의 다중 정렬과 관련된 문제를 주로 소개하는 Oracle에 대한 관련 지식을 제공합니다. 모든 사람에게 도움이 되기를 바랍니다.

ORACLE에서 ORDER BY의 다양한 정렬에 대해 이야기해 보겠습니다.

추천 튜토리얼: "Oracle Learning Tutorial"

1. 단일 필드로 정렬

오름차순: ORDER BY ASC(기본값)

내림차순: ORDER BY DESC

실제 쿼리 결과 반환 지정된 순서로 데이터를 추출하거나 보고서를 생성할 때 일반적으로 해당 부서에 고용된 직원의 정보를 보려면 특정 순서로 볼 필요가 있습니다.

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

많은 사람들이 쿼리 결과를 정렬하기 위해 이런 종류의 문을 작성할 수 있지만 "ORDER BY Hiedate ASC" 외에도 세 번째 열을 기준으로 정렬한다는 의미인 "ORDER BY 3 ASC"를 작성할 수도 있습니다.

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

값이 확실하지 않은 경우 이 방법을 사용하면 매우 편리합니다.

데이터를 사용하여 열 위치를 바꾸는 것은 order by 절에서만 사용할 수 있으며 다른 곳에서는 사용할 수 없습니다

2. 여러 필드로 정렬

여러 열로 정렬했는데 증가 또는 감소가 있으면 어떻게 되나요? 예를 들어 부서번호를 기준으로 오름차순, 급여를 기준으로 내림차순으로 정렬할 경우 ASC는 오름차순, DESC는 내림차순을 의미하므로 두 개의 열을 추가하고 각각 ASC와 DESC를 표시합니다.

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

다음은 여러 열을 정렬할 때 이전 열에 중복된 값이 있는 경우(예: deptno = 10, 3행 데이터)와 같이 다이어그램 형태로 소개됩니다. , 후속 정렬은 유용할 뿐입니다. 이는 이전 열을 기준으로 데이터를 여러 그룹으로 나눈 후 다음 열을 기준으로 각 그룹의 데이터를 정렬하는 것과 같습니다.

3. 하위 문자열로 정렬

하위 문자열로 정렬하는 빠른 방법은 고객 전화번호를 마지막 번호 순서대로 기록하는 방법으로, 쿼리 범위를 빠르게 좁혀 고객 ​​인지도를 높일 수 있습니다. . 이런 식으로 정렬하고 싶다면 어떻게 해야 할까요? 다음 몇 비트에 필요한 정보를 얻으려면 이 기능을 사용하십시오.

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

데이터를 쿼리할 수 있는 한 해당 정보에 따라 정렬할 수 있음을 알 수 있습니다.

4. TRANSLATE

문법 형식: TRANSLATE(expr, from_string, to_string)

예는 다음과 같습니다.

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

from_string과 to_string은 문자 단위이며, 해당 문자는 하나씩 교체됩니다. .

to_string이 비어 있으면 null 값이 반환됩니다.

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

to_string의 해당 위치에 문자가 없으면 from_string에 나열된 문자를 삭제하면 제거됩니다.

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

5. 숫자와 문자가 혼합된 문자열에서 문자별로 정렬

먼저 다음과 같이 VIEW를 만듭니다.

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

이 요구 사항은 조금 더 어렵습니다. 문자를 참조하세요. 내부(원래 열 이름입니까)? 그 안에 알파벳 순서가 필요합니다(열 ename).

그런 다음 먼저 문자를 제거해야 합니다. 번역의 바꾸기 기능을 사용하여 숫자와 공백을 빈 값으로 바꿀 수 있습니다.

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

6. null 값 정렬 처리 ​​

Oracle 기본 null 정렬 나중에 null 값(예: emp.comm)을 표시하려면 어떻게 해야 하나요? 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教程

위 내용은 ORACLE에서 ORDER BY의 다양한 정렬에 대해 이야기해 보겠습니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 csdn.net에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제