--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