(本文僅個人學習記錄使用,可能存在部分問題。資料庫為11g)
1、建立陣列型別
type array_type is varray (100) of varchar2(100);
2、多個字段約束限制
alter table table_nameadd constraint constraint_name
unique (column1, column2, ... , column_n);
3、迴圈跳出
第一種:使用return的時候,直接跳出儲存過程或者函式
第二種:使用exit的時候,跳出本迴圈轉而執行本迴圈的上一級迴圈的下一次迴圈。就此案例而言my_cu.spbh = 'aaa'為真的時候,直接跳出my迴圈轉而去執行my_cu的下一次迴圈
第三種:使用continue的時候,本次迴圈後面的**部分不再執行,轉而執行本迴圈的下一次迴圈。就此案例而言my_cu.spbh = 'aaa'為真的時候,後面的**不執行,繼續my的下一次迴圈
4、樹形查詢
select t.*, level
from bm_relationship t
where level = 3
start with t.relationship_name = '人員與人員'
connect by prior t.id = t.parent_id
order by t.id
5、重複資料的異常捕捉
exception
when dup_val_on_index then
continue;
when others then
continue;
6、select 表字段 into 插入欄位名 from 表名;
exception
when no_data_found then
continue;
when others then
continue;
7、定義整張表名
別名 表名%rowtype;
引用時:別名.欄位名。
8、從一張表中隨機取資料
select * from (select * from a order by dbms_random.value) where rownum <= 10
9、乙個資料在表中不存在
select 欄位名 from 表名 where 字段='資料') is null;
10、多表查詢:
表連線分類: 內連線、外連線、交叉連線、自連線
1、內連線: [inner] join on
sql語法格式:
語法1:
select *
from 表1 [inner] join 表2 on 表1.欄位1=表2.欄位1;
語法2:
select *
from 表1,表2
where 表1.欄位1=表2.欄位1;
說明:
內連線中的inner join 和 join 是等價的!但是建議為了程式的可讀性
盡量不要省略inner!
2、外連線:
分類:左外連線、右外連線、全連線!
1)、左外連線:left outer join
連線效果:
左側的表中的全部資料都會被顯示出來,但是右側表的資料,
只有和左側匹配上的字段才會被查詢出來!否則都會顯示null!
sql語法格式:
語法1:
select *
from 表1 left outer join 表2
on 表1.欄位1=表2.欄位1;
語法2:
select *
from 表1 left outer join 表2
where 表1.欄位1=表2.欄位1(+);
2)、右外連線:right outer join
連線效果:
右側的表中的全部資料都會被顯示出來,但是左側表的資料,
只有和右側匹配上的字段才會被查詢出來!否則都會顯示null!
sql語法格式:
語法1:
select *
from 表1 right outer join 表2
on 表1.欄位1=表2.欄位1;
語法2:
select *
from 表1 left outer join 表2
where 表1.欄位1(+)=表2.欄位1;
3)、全外連線:full/all outer join
sql語法格式:
select *
from 表1 full outer join 表2
on 表1.欄位1=表2.欄位1;
3、自連線(self join)
自連線(self join)是sql語句中經常要用的連線方式,使用自連線可以將自身表的乙個映象當作另乙個表來對待,從而能夠得到一些特殊的資料。
4、交叉連線: 表與表之間做笛卡爾積查詢!
sql語法格式:(無條件查詢)
select *
from 表1 cross join 表2;
或者select *
from 表1, 表2;
11、查詢乙個表中某個字段每個值出現次數。
select max(a) from(select count(欄位1) a,max(欄位1) b from 表名 group by 欄位1 order by 欄位1);
12、生成隨機數,隨機字母,隨機字元
(1)dbms_random.string(opt, 字串長度)生成隨機字串
opt可取值如下:
'u','u' : 大寫字母
'l','l' : 小寫字母
'a','a' : 大、小寫字母
'x','x' : 數字、大寫字母
'p','p' : 可列印字元
(2)生成隨機數
1.隨機小數(3)生成uuiddbms_random.value(low,high): --獲取乙個[low,high)之間的小數,包含low,不包含high
可以結合trunc函式獲取整數
例如:select dbms_random.value from dual; --生成0-1之間的小數
select dbms_random.value(0,100) from dual; --生成0-100之間的小數
select trunc(dbms_random.value(0,1000)) from dual; --生成0-1000之間的整數
select substr(cast(dbms_random.value(1,100000) as varchar2(10)),1,5) from dual; --生成5位數字
2.隨機整數
dbms_random.random; --獲取乙個[-2的31次方,2的31次方)之間的整數,包含-2的31次方,不包含2的31次方
sys_guid();
13、兩張資料不一致無關聯字段資料隨機合併成
select a.欄位1,b.欄位2 from (select trunc(dbms_random.value(1,20)) rn,欄位1,欄位2 from(select 欄位1,欄位2 from 表1 order by dbms_random.value) where rownum <=50) a,(select rownum rn,欄位1,欄位2 from (select 欄位1,欄位2 from 表2 order by dbms_random.value)where rownum <=10) b where a.rn = b.rn
參考:
ORACLE部分函式記錄
格式一 instr string1,string2 instr 源字串,目標字串 select instr helloworld lo from dual 返回結果 4 即 在 lo 中,l 開始出現的位置 select instr helloworld l 4,2 from dual 返回結果 9...
oracle使用記錄
1.登入 第一種 sqlplus 使用者名稱 密碼 例項 as 角色 第二種 sqlplus 輸入使用者名稱和密碼 第三種 遠端dos登入 telnet使用前提 控制面板 程式 開啟或關閉windows功能 勾選telnet客戶端 telnet ip 埠 第四種 遠端登入 tnsnames配置資料庫...
oracle 使用記錄
向表中新增主鍵約束 alter table retail shop follow goods addconstraint pk retail shop follow goods primary key follow goods id 新增外來鍵 alter table retail shop fol...