(1)Oracle正則匹配使用
PS:這條SQL可以通過正則匹對查詢一下,表A的字段a是否有非數字的數據,有時候數據表的一些字段是varchar類型的,如果sql裏用to_number的話,就肯定會報無效數字的錯誤
select * from 表A where not regexp_like(字段a,'^[[:digit:]]+$');
(2)Oracle修改有數據的數據字段類型
有些時候,我們是要修改一些數據字段的類型的,mysql是可以支持的,不過Oracle對一些有數據的數據字段是不予許修改的,這時候,可以通過下面sql進行修改,大概思路就是創建一個臨時的,負責轉運數據,然後再切換
alter table 表A add new_temp varchar2(50);
update 表A set new_temp = a;
commit;
update 表A set a = '';
commit;
alter table 表A modify a varchar2(50);
update 表A set a = new_temp;
commit;
alter table 表A drop column new_temp;
(3)Oracle表數據回滾語句
【表數據恢復回N分鐘之前】
alter table 表名 enable row movement;
flashback table 表名 to timestamp systimestamp - interval 'N' minute;
(4)sql篩選出記錄數大於2的記錄
select id,count(*) from A a
where a.test like '%'
group by id
having count(*)>=2
(5)oracle同義詞
創建同義詞:
create public synonym tablename for user.tablename;
synonyms
(6)oracle內外連接
Oracle左右連接可以使用(+),+號在左表示右外連接,在右表示左外連接
(7)oracle去重關鍵字
Oracle關鍵字:
distinct:過濾掉多餘的重複記錄只保留一條
(8)Oracle不等於符號
oracle不等於有下面三種表示:
!=、^=、<>
<>可移植性好
(9)1=1和1=0
select * from t where 1=1
1=1條件始終爲true,是爲了避免負責的條件查詢出現錯誤
1=0條件始終未false,結果不會返回任何數據,所以可以用於建表,create table newtable as select * from oldtable where 1=0;
(10)創建表空間
–創建表空間
CREATE SMALLFILE
TABLESPACE “WORKFLOW01”
LOGGING
DATAFILE
‘D:\app\Administrator\oradata\oanet\WORKFLOW01.ora’ SIZE
245M EXTENT MANAGEMENT LOCAL SEGMENT SPACE Management AUTO
(11)Oracle in關鍵字和等於符號
oracle in 和 =的區別
in可以有多條記錄,=只有一條記錄
=性能更好,因爲使用=符合能更好地使用索引
(12)NVL函數
NVL函數的格式如下:NVL(expr1,expr2)
含義是:如果oracle第一個參數爲空那麼顯示第二個參數的值,如果第一個參數的值不爲空,則顯示第一個參數本來的值。
NVL2函數的格式如下:NVL2(expr1,expr2, expr3)
含義是:如果該函數的第一個參數爲空那麼顯示第二個參數的值,如果第一個參數的值不爲空,則顯示第三個參數的值。SQL> select ename,NVL2(comm,-1,1) from emp;
NULLIF(exp1,expr2)函數的作用是如果exp1和exp2相等則返回空(NULL),否則返回第一個值。
Coalese函數的作用是的NVL的函數有點相似,其優勢是有更多的選項。
格式如下:
Coalesce(expr1, expr2, expr3…… exprn)
表示可以指定多個表達式的佔位符。所有表達式必須是相同類型,或者可以隱性轉換爲相同的類型。
(13)union
union: 對兩個結果集進行並集操作, 不包括重複行,相當於distinct, 同時進行默認規則的排序;
union all: 對兩個結果集進行並集操作, 包括重複行, 即所有的結果全部顯示, 不管是不是重複;
(14)exist和in
select a.id from A a where a.id in(select b.id from B b)
select a.id from A a where exists(select b.id from B b where a.id = b.id)
(15)遞歸查詢
start with 子句:遍歷起始條件,有個小技巧,如果要查父結點,這裏可以用子結點的列,反之亦然。
connect by 子句:連接條件。關鍵詞prior,prior跟父節點列parentid放在一起,就是往父結點方向遍歷;prior跟子結點列subid放在一起,則往葉子結點方向遍歷
(16)條件sql
case when then else end 可以理解爲流程控制語句或條件控制語句。可以實現資料獲取的時候,可以更多的條件和自定義邏輯
select 1 from mytable;與select anycol(目的表集合中的任意一行) from mytable;與select * from mytable 作用上來說是沒有差別的,都是查看是否有記錄,一般是作條件用的。select 1 from 中的1是一常量,查到的所有行的值都是它,但從效率上來說,1>anycol>*,因爲不用查字典表。
(17)oracle數據庫還原
1、將TESTDB.bmp放置在dpdump目錄,如下路徑:
E:\app\Administrator\admin\orcl\dpdump
2、創建用戶
create user testdb65 identified by “testdb65”
default tablespace users temporary tablespace temp;
用戶授權
grant connect,dba to testdb65;
3、創建表空間
CREATE TABLESPACE HR_DATA01 DATAFILE ‘D:\nhsj\hr_data01.dbf’ SIZE 500M AUTOEXTEND ON NEXT 50M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 256K ; 【創建表空間】
4、導入 bgyhr2是來源庫
impdp testdb65/testdb65@orcl schema=testdb65 dumpfile=TESTDB65.dmp
導出 scott 是要導出的庫
expdp lfwtrain/a@orcl schema=當前用戶 dumpfile=expdptest.dmp
(18)重導dmp文件
Oracle保存數據時一般以DMP文件的形式進行保存
本博客記錄,DMP文件的導入 先打開CMD
sqlplus /nolog
以sysdba連接
conn /as sysdba
這裏創建表空間,因爲表空間進行存儲的話,可以提供系統性能
CREATE TABLESPACE DATA01 DATAFILE 'D:\tablespace\data01.dbf' SIZE 100M AUTOEXTEND ON NEXT 50M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 256K ;
創建用戶
CREATE USER job IDENTIFIED BY job DEFAULT TABLESPACE DATA01 TEMPORARY TABLESPACE TEMP QUOTA UNLIMITED ON DATA01
授權
grant connect,dba to job;
複製dmp文件到oracle安裝目錄裏的app\admin\orce\dpdump裏,然後用以下代碼導入dmp文件,要順便導入logfile的話,加上logfile=文件名
impdp job/job@orcl schemas=job dumpfile=EXPDP160810GZ.dmp
(19)vm_concat函數
函數wm_concat(列名),該函數可以把列值以","號分隔起來,並顯示成一行
(20)replace函數
REPLACE(char, search_string [, replacement_string ] )
char : 等待替換的字符串
search_string : 搜索需要替換的字符串
replacement_string : 替換字符串
如果replacement_string缺省或者爲null,那麼所有char中出現的search_string 都將被移除
如果search_string爲null,那麼結果就是char
例子:過濾某個字段的換行符
select replace(a, chr(10)) from tableA
(21) instr函數
格式一:instr( string1, string2 ) / instr(源字符串, 目標字符串)
格式二:instr( string1, string2 [, start_position [, nth_appearance ] ] ) / instr(源字符串, 目標字符串, 起始位置, 匹配序號)
解析:string2 的值要在string1中查找,是從start_position給出的數值(即:位置)開始在string1檢索,檢索第nth_appearance(幾)次出現string2。
例子:查詢某個數據字段是否包含換行符
select * from tableA where instr(a,chr(10))>0