oracle常用sql語法匯總


--1、創建自增列

復制代碼
復制代碼
1 -- Create sequence 創建sequence
2 create sequence T41_R_ITEM_FIELDKEY
3 minvalue 1
4 maxvalue 99999999999999
5 start with 10220
6 increment by 1
7 cache 20;
復制代碼
復制代碼

--2、查詢重復的數據

1 select cid,cname,cage,city,address from tbl_ABC where city in (select city from tbl_ABC group by city having count(city) > 1) order by opendate;

--3、case用法when

復制代碼
復制代碼
1 SELECT 
2 CASE 
3   WHEN T.FLAG='0' THEN T.USERID
4   WHEN T.FLAG='1' THEN T.ORGID
5   ELSE NULL
6 END AS '標識'
7 FROM XTXMXX T
復制代碼
復制代碼

--4、decode用法

1 --如果FLAG等於1,則轉為USERID,如果為0,則轉為ORGID,其他的為2
2 SELECT DECODE(T.FLAG,1,T.USERID,0,T.ORGID,2) FROM XTXMXX T ;

--5、nvl 從兩個表達式返回一個非 null 值。

1 ---如果a.name不為空,返回姓名,否則返回 “空的”
2 select nvl(a.name,'空得') as name from student a join school b on a.ID=b.ID

--6、常用的三種鏈接

復制代碼
復制代碼
 1 --右連接  反方向連接
 2 SELECT * FROM SX02_PROGRAM T,SX03_GL_ACCASS L WHERE T.PROGRAMNO(+)=L.CITEM_ID;
3 4 --左鏈接 5 SELECT * FROM SX02_PROGRAM T,SX03_GL_ACCASS L WHERE T.PROGRAMNO=L.CITEM_ID(+); 6 7 --特殊連接 8 SELECT T.PROGRAMNO, (SELECT P.BONDNO FROM SX05_CONTRACT P WHERE P.PROGRAMNO=T.PROGRAMNO) FROM SX02_PROGRAM T,SX03_GL_ACCASS L WHERE T.PROGRAMNO=L.CITEM_ID;
復制代碼
復制代碼

--7、批量更新數據

7-1、根據查詢語句更新數據庫字段

復制代碼
復制代碼
1 --多列更新
2 UPDATE QJGL T SET (T.ZJQHZJRQ,T.ZJQHZJJE,T.LJQHZJJE)=
3 (
4 --此處只能查詢單一值,故要關聯
5 SELECT TT.ZJZJZJRQ,TT.ZJZJZJJE,TT.LJZJZJJE FROM QJGL TT
6 WHERE T.XTXMBH=TT.XTXMBH
7 );
復制代碼
復制代碼

7-2、將查詢語句作為條件,查詢目標數據是否存在於檔案數據中,並將目標數據中的某些字段值更改為檔案數據表的值(tbl_tpmwangyuesiji 目標表,tbl_netcar 檔案表)

復制代碼
復制代碼

1 UPDATE TBL_TMPWANGYUESIJI a
2 SET (a.COMNAME,a.DNAME) = (SELECT b.companyname,b.carflag FROM tbl_netcar b WHERE b.carid = a.idcard AND b.carflag in (1,2,4,5))
3 WHERE EXISTS (SELECT * FROM tbl_netcar b WHERE b.carid = a.idcard AND b.carflag in (1,2,4,5));

復制代碼
復制代碼
 

--8、ROW_NUMBER分組排序

select cc.serialno,
       cc.objectno,
       cc.corpuspaysum,
       --PARTITION BY:分組   ORDER BY:排序  可正序倒序
       ROW_NUMBER() OVER(PARTITION BY cc.objectno ORDER BY cc.corpuspaysum desc) as rn
  from sx01_contract_paysource cc;

--9、保留兩位小數

復制代碼
復制代碼
 1 ---最終保存成字符串類型
 2 ---使用to_char()函數 
 3 
 4 
 5  // 小數點前的9和0代表一位數字,個位數用0防止0顯示成.00
 6  // 其9代表:如果存在數字則顯示數字,不存在則顯示空格
 7  // 其0代表:如果存在數字則顯示數字,不存在則顯示0,即占位符
 8  // 其FM代表:刪除如果是因9帶來的空格,則刪除之
 9  select to_char(123456,'FM999999999999990.00') as aa from dual;
10  select to_char(123456,'999999999999990.00') as aa from dual;
11  // ||表示字符串拼接,結果是59.00%
12  select to_char(0.59/1.00*100,'FM999,999,999,999,990.00')||'%' from dual
13  // 如果不需要四舍五入,則需要trunc一下,否則顯示0.60
14  select to_char(trunc(0.596,2),'FM999,999,999,999,990.00') from dual
15 
16 ---最終仍保存成數字類型
17 ---使用cast()函數
18 
19 // number中第一個參數表示將要轉換的數字長度,后一個參數表示保留小數位數
20 select cast(123456 as number(18,2)) as aa from dual;
復制代碼
復制代碼

--10、not exists和not in的區別

復制代碼
復制代碼
 1 ---對於not exists查詢,內表存在空值對查詢結果沒有影響;對於not in查詢,內表存在空值將導致最終的查詢結果為空。 
 2 
 3  ---對於not exists查詢,外表存在空值,存在空值的那條記錄最終會輸出;對於not in查詢,外表存在空值,存在空值的那條記錄,最終將被過濾,其他數據不受影響
 4 
 5  --這時能查出結果
 6 select value from temp_a a where a.id between 1 and 100 and not exists(select * from temp_b b where a.value=b.value);
 7 
 8  --此時查出的結果為空.
 9 
10 select value from temp_a a where a.id between 1 and 100 and a.value not in(select value from temp_b)
11
12 --tab_a存在且tab_b也存在的數據
13 select h.carid ,j.PERMIT_OPERATOR , from (select s.carid,s.CONAME,s.CREATETIME from tab_a s where exists
14 (select * from tab_b g where g.carflag not in (0,8) and s.carid=g.carid)) h left join tab_b j on h.carid=j.carid
復制代碼
 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM