Delete from emp e
where e.rowid >
(select min(f.rowid) from emp f
4 where f.empno=e.empno);
- 9月 04 週四 200814:57
SQL 刪除重覆記錄
- 9月 02 週二 200809:53
SQL 取字用法,例'abc,123,TYT'→abc
1.取,之前的文字,如果是.就把,換掉
SELECT SUBSTR('abc,123,TYT', 1 ,INSTR('abc,123,TYT', ',', 1, 1)-1)
FROM dual;
ANS : abc
2.取,中間的文字,如果是.就把,換掉
SELECT SUBSTR('abc,123,TYT', INSTR('abc,123,TYT',',', 1, 1)+1,
INSTR('abc,123,TYT',',',1,2)-INSTR('abc,123,TYT',',',1,1)-1)
FROM dual;
ANS : 123
3.取,最後的文字,如果是.就把,換掉
SELECT SUBSTR('abc,123,TYT', INSTR('abc,123,TYT',',', 1, 2)+1)
FROM dual;
ANS : TYT
如 :
1.取,之前的文字,如果是.就把,換掉
SELECT SUBSTR('808001772.1.2', 1 ,INSTR('808001772.1.2', '.', 1, 1)-1)
FROM dual;
ANS : 808001772
2.取,中間的文字,如果是.就把,換掉
SELECT SUBSTR('808001772.1.2', INSTR('808001772.1.2','.', 1, 1)+1,
INSTR('808001772.1.2','.',1,2)-INSTR('808001772.1.2','.',1,1)-1)
FROM dual;
ANS : 1
- 6月 24 週二 200809:46
SQL MERGE語句组合表
MERGE語句是Oracle9i新增的語法,用來合併UPDATE和INSERT語句。
通過MERGE語句,根據一張表或子查詢的連接條件對另外一張表進行查詢,
連接條件匹配上的進行UPDATE,無法匹配的執行INSERT。
這個語法僅需要一次全表掃描就完成了全部工作,執行效率要高於INSERT+UPDATE。
下面看個具體的例子:
--1.來源表
CREATE TABLE T AS SELECT ROWNUM ID, A.* FROM USER_OBJECTS A;
--2.目標表
CREATE TABLE T1 AS
SELECT ROWNUM ID, TABLE_NAME, CAST('TABLE' AS VARCHAR2(100)) OBJECT_TYPE
FROM USER_TABLES;
--3.根據來源表UPDATE和INSERT目標表
MERGE INTO T1 USING T
ON (T.OBJECT_NAME = T1.TABLE_NAME AND T.OBJECT_TYPE = T1.OBJECT_TYPE)
WHEN MATCHED THEN UPDATE SET T1.ID = T.ID
WHEN NOT MATCHED THEN INSERT VALUES (T.ID, T.OBJECT_NAME, T.OBJECT_TYPE);
- 6月 24 週二 200809:10
Oracle SQL 特殊用法
部分列為空的排序問題1.null值排在最前面,其他數值升序排列,使用關鍵字:desc nulls first
order by A.X desc nulls first
2.null值排在最前面,其他數值降序排列,使用關鍵字:asc nulls first
order by A.X desc nulls first
3.Connect by 使用方法
connect by prior start with 經常會被用到一個表中存在遞歸關系的時候。比如我們經常會將一個比較復雜的目錄樹存儲到一個表中。或者將一些部門存儲到一個表中,而這些部門互相有隸屬關系。這個時候你就會用到connect by prior start with。
例:
SELECT LEVEL || SYS_CONNECT_BY_PATH(a.empno, '->') RESULT
FROM scott.emp a
CONNECT BY a.empno = PRIOR a.mgr
START WITH a.empno = 7369;
SYS_CONNECT_BY_PATH即在相應字段前加'->'符號,LEVEL是級別
