Rumah > pangkalan data > Oracle > Mari kita bercakap tentang pelbagai jenis ORDER BY dalam ORACLE

Mari kita bercakap tentang pelbagai jenis ORDER BY dalam ORACLE

WBOY
Lepaskan: 2022-03-17 18:49:09
ke hadapan
5961 orang telah melayarinya

Artikel ini membawakan anda pengetahuan yang berkaitan tentang Oracle Ia terutamanya memperkenalkan isu yang berkaitan dengan pelbagai pengisihan ORDER BY, termasuk pengisihan mengikut satu medan, pengisihan mengikut berbilang medan, Isih mengikut subrentetan, dll. Saya harap. ini membantu semua orang.

Mari kita bercakap tentang pelbagai jenis ORDER BY dalam ORACLE

Tutorial yang disyorkan: "Tutorial Pembelajaran Oracle"

1. Isih mengikut medan tunggal

Tertib menaik : ORDER BY ASC (default)

Descending order: ORDER BY DESC

Kembalikan hasil pertanyaan dalam susunan yang ditentukan Apabila benar-benar mengekstrak data atau menjana laporan, anda biasanya perlu melihatnya dalam keadaan tertentu pesanan Sebagai contoh, jika anda ingin melihat Maklumat tentang pekerja yang diambil bekerja oleh unit.

SELECT empno, ename, hiredate FROM emp WHERE deptno = 10 ORDER BY hiredate ASC;
Salin selepas log masuk

Ramai orang boleh menulis pernyataan seperti ini untuk mengisih hasil pertanyaan, tetapi sebagai tambahan kepada "ORDER BY hiredate ASC", ia juga boleh ditulis sebagai "ORDER OLEH 3 ASC" bermaksud mengisih mengikut lajur ketiga.

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

Apabila nilai tidak pasti, adalah sangat mudah untuk menggunakan kaedah ini Perlu diingat bahawa

Menggunakan data untuk menggantikan kedudukan lajur hanya boleh digunakan untuk. susunan mengikut anak kecil

2. Isih mengikut berbilang medan

Bagaimana jika anda mengisih mengikut berbilang lajur dan terdapat peningkatan atau penurunan? Sebagai contoh, apabila mengisih mengikut nombor jabatan dalam tertib menaik dan gaji dalam tertib menurun, terdapat dua kata kunci: ASC bermaksud tertib menaik, DESC bermaksud tertib menurun, jadi kami menambah dua lajur selepas pesanan mengikut dan menandakan ASC dan DESC masing-masing.

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

Yang berikut diperkenalkan dalam bentuk rajah, seperti yang ditunjukkan dalam rajah di bawah Apabila mengisih berbilang lajur, jika lajur sebelumnya mempunyai nilai pendua (seperti deptno = 10, terdapat 3 data baris), pengisihan seterusnya berguna. Ia sama dengan membahagikan data kepada beberapa kumpulan mengikut lajur sebelumnya, dan kemudian mengisih data setiap kumpulan mengikut lajur berikut.

3. Isih mengikut subrentetan

Cara cepat untuk mengisih mengikut subrentetan adalah dengan merekodkan nombor telefon pelanggan mengikut urutan nombor terakhir, supaya semasa mencari Anda boleh mengecilkan skop pertanyaan anda dengan cepat dan mempertingkatkan pengiktirafan pelanggan. Jika anda ingin menyusun dengan cara ini, apakah yang perlu anda lakukan? Hanya gunakan fungsi untuk mendapatkan maklumat yang diperlukan untuk beberapa bit seterusnya.

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

Dapat dilihat bahawa selagi data boleh disoal, ia boleh diisih mengikut maklumat yang sepadan.

4. TRANSLATE

Format tatabahasa: TRANSLATE(expr, from_string, to_string)

Contohnya adalah seperti berikut:

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

from_string dan to_string berada dalam unit aksara, dan aksara yang sepadan digantikan satu demi satu.

Jika to_string kosong, kembalikan nilai nol

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

Jika tiada aksara dalam kedudukan sepadan dengan to_string, Memadamkan aksara yang disenaraikan dalam from_string akan dihapuskan.

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

5. Isih mengikut huruf dalam rentetan bercampur nombor dan huruf

Mula-mula buat VIEW seperti berikut:

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

Keperluan ini lebih sukar sedikit Adakah anda melihat huruf di dalamnya (iaitu, huruf asal nama lajur)? Memerlukan susunan abjad di dalamnya (nama lajur).

Kemudian kita perlu mengalih keluar huruf dahulu Kita boleh menggunakan fungsi ganti terjemah untuk menggantikan nombor dan ruang dengan ruang kosong:

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

6. Mengendalikan nilai nol yang diisih

Oracle mengisih nilai nol di belakang secara lalai Bagaimana jika anda mahu memaparkan nilai nol (seperti emp.comm) di hadapan? gunakan NVL (comm, -1)?

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

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

空值在前

SELECT ename, sal, comm FROM emp ORDER BY 3 NULLS FIRST;
Salin selepas log masuk

空值在后

SELECT ename, sal, comm FROM emp ORDER BY 3 NULLS LAST;
Salin selepas log masuk

是不是要方便得多?

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;
Salin selepas log masuk

可以看到,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;
Salin selepas log masuk

 

推荐教程:《Oracle教程

Atas ialah kandungan terperinci Mari kita bercakap tentang pelbagai jenis ORDER BY dalam ORACLE. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:csdn.net
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan