-- 根據員工的上級編號進行層級關聯
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 ...