【Oracle】Oracle數據庫學習手冊整理

(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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章