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.
Tutorial yang disyorkan: "Tutorial Pembelajaran Oracle"
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;
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;
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
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;
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.
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;
Dapat dilihat bahawa selagi data boleh disoal, ia boleh diisih mengikut maklumat yang sepadan.
Format tatabahasa: TRANSLATE(expr, from_string, to_string)
Contohnya adalah seperti berikut:
SELECT TRANSLATE( 'ab 你好 bcadefg', 'abcdefg', '1234567' ) AS NEW_STR FROM DUAL;
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( 'ab 你好 bcadefg', 'abcdefg', '' ) AS NEW_STR FROM DUAL;
Jika tiada aksara dalam kedudukan sepadan dengan to_string, Memadamkan aksara yang disenaraikan dalam from_string akan dihapuskan.
SELECT TRANSLATE( 'ab 你好 bcadefg', '1abcdefg', '1' ) AS NEW_STR FROM DUAL;
Mula-mula buat VIEW seperti berikut:
CREATE OR REPLACE VIEW V as SELECT empno || ' ' || ename AS data FROM emp;
select * from V;
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, '- 0123456789', '-' )AS ename FROM v ORDER BY 2;
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;
也许很多人都是用的这种方法,但这种方法需要对列类型及其中保存的数据有所了解才行,而且保存的数据如果有变化,该语句就要重新维护。
其实可以用关键字 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教程》
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!