oracle資料庫(三) 高階查詢

2021-10-04 02:27:49 字數 4281 閱讀 6017

-- 根據員工的上級編號進行層級關聯

select

level

,empno,ename,mgr

from emp

connect

by prior empno = mgr

start

with mgr is

null

order

bylevel

;

translate(expr,from_string,to_string)替換知道的字元,to_string為null時返回null,沒有匹配時的字元直接刪除

regexp_replace(src,re,new)正則替換字元

regexp_substr(src,re,n)字串分列,re.split()

-- 正則替換

select regexp_replace(

'adsfaad'

,'[^a]'

,'0'

)from dual;

-- 字串分列

select

regexp_substr(

'192.168.0'

,'[^.]+',1

,1) a1

,regexp_substr(

'192.168.0'

,'[^.]+',1

,2) a2

,regexp_substr(

'192.168.0'

,'[^.]+',1

,3) a3

from dual;

-- 計算字元出現數量

select regexp_count(

'adsfaad'

,'a'

)from dual;

select length(regexp_replace(

'adsfaad'

,'[^a]'))

from dual;

select translate(

'adsfaad'

,'a'

||'adsfaad'

,'a'

)from dual;

-- 刪除不需要字元

select

replace

(translate(job,

'man'

,'aaa'),

'aaa',''

)from emp;

select regexp_replace(job,

'[man]',''

)from emp;

-- 字元數字分離

select

regexp_replace(

'sdfsf04'

,'[0-9]',''

) 字元

,regexp_replace(

'sdfsf04'

,'[^0-9]',''

) 數字

from dual;

select

translate(

'sdfsf04'

,'a0123456789'

,'a'

) 字元

,translate(

'sdfsf04'

,'0123456789'

||'sdfsf04'

,'0123456789'

) 字元

from dual;

-- 帶單引號字元

select

'adsf'

'asfads'

from dual;

select q'' from dual;

-- 用法

select

e.deptno

,listagg(e.ename,

',')

within

group

(order

by e.empno) names

from emp e

group

by e.deptno;

-- 展示累計的邏輯

select

e.*,

sum(sal)

over

(partition

by e.deptno order

by hiredate),(

select listagg(sal,

'+')

within

group

(order

by e2.hiredate)

from emp e2

where e2.deptno =

30and e2.hiredate <= e.hiredate

)-- e.hiredate的資料迭代進入計算,迭代出

from emp e

where e.deptno =

30;

-- 開窗

rows

--物理開窗

range --邏輯開窗

unbounded

preceding

--前面所有行

current

row--當前行

unbounded

following

--後面所有行

range between

unbounded

preceding

andcurrent

row-- 預設視窗

-- 顯示員工資訊按各部門薪資降序排列

select

empno

,ename

,sal

,dense_rank(

)over

(partition

by deptno order

by sal desc

) sal_rank

from emp;

-- 顯示各部門最高工資的員工資訊

select

deptno

,min(sal) keep (dense_rank first

order

by sal desc

) top_sal

from

empgroup

by deptno;

select

level

from emp connect

bylevel

<=1;

select

level

from dual connect

bylevel

<=

4;

select

user_ind_columns.index_name 索引名稱,

user_ind_columns.table_name 表名,

user_ind_columns.column_name 欄位名,

user_indexes.uniqueness 約束

from

user_ind_columns,

user_indexes

where

user_ind_columns.index_name = user_indexes.index_name;

select table_name from user_tables;
一行拆分多行顯示

with t as

(select

'x,y,z'

as lll from dual

union

allselect

'***,y,zz,aaaaa,b,ccc,d,e,f,ggg'

as lll from dual

)select lll,

regexp_substr(lll,

'[^,]+',1

,level)as

value

from t

connect

by lll = prior lll

and instr(lll||

',',

',',1,

level

)>

0and prior dbms_random.

value

isnot

null

;

MySQL 資料庫基礎(三)(高階操作)

mysql uroot p123123 登入create database class 將資料表的資料記錄生成到新的表中 方法一 方法二 刪除表內的所有資料 方法一 delete from test02 delete清空表後,返回的結果內有刪除的記錄條目 delete工作時是一行一行的刪除記錄資料的...

Oracle資料庫 高階子查詢

子查詢是巢狀在sql與劇中的另乙個select語句 子查詢 內查詢 在主查詢執行之前執行 主查詢 外查詢 使用子查詢的結果 查詢工資大於149號員工工資的員工的資訊 主查詢與子查詢返回的多個列進行比較 多列子查詢中的比較分為兩種 查詢與141號或174號員工的manager id和departmen...

Oracle資料庫高階查詢(三)連線查詢

謝謝現在我們有這樣乙個需求 查詢所有使用者的使用者姓名,訂單號,已經訂單狀態,商品所屬分類名稱 其實我們這些資料 於兩張表 圖書表es product和圖書類別表es sort 我們可以通過表連線實現 select es product.id,name,price,sortname from es ...