Oracle如何利用交叉連接生成數(shù)字序列
Oracle用交叉連接生成數(shù)字序列
建表并插入記錄
CREATE TABLE t_number(n INTEGER PRIMARY KEY); INSERT INTO t_number VALUES (0); INSERT INTO t_number VALUES (1); INSERT INTO t_number VALUES (2); INSERT INTO t_number VALUES (3); INSERT INTO t_number VALUES (4); INSERT INTO t_number VALUES (5); INSERT INTO t_number VALUES (6); INSERT INTO t_number VALUES (7); INSERT INTO t_number VALUES (8); INSERT INTO t_number VALUES (9);
實現(xiàn)SQL:
SELECT hundred.n * 100 + ten.n * 10 + one.n AS n FROM t_number hundred CROSS JOIN t_number ten CROSS JOIN t_number one ORDER BY n
執(zhí)行結(jié)果:

查詢返回了一個0~999的數(shù)字序列。
顯然,我們可以通過更多的自連接生成更大的數(shù)字序列。
還有其他生成序列的方法:
例如connect by結(jié)合rownum實現(xiàn)
select rownum from dual connect by rownum<=10;
使用level實現(xiàn)
select level from dual connect by level<=10;
Oracle表的連接(交叉連接 ,內(nèi)連接,自然連接,外連接,全外連接)
核心:交叉連接
select A.column1,A.column2,B.column1,B.column2 from A cross join B;
交叉連接就是做笛卡爾積 計算 原理如下 具體原理百度
解讀示例: A表有2行數(shù)據(jù) , B表有3行數(shù)據(jù) 交叉連接后,產(chǎn)生一個新表 C。
A ----------B
1 a2 —1 b2
2 a4 —2 b4
------ —3 b6
C
1 a2 1 b2
1 a2 2 b4
1 a2 3 b6
2 a4 1 b2
2 a4 2 b4
2 a4 3 b6
表C左邊為 A表數(shù)據(jù), 右邊為B表數(shù)據(jù)。 一共產(chǎn)生6行數(shù)據(jù)(2*3=6)。其實就是排列組合。
內(nèi)連接
在表C中 根據(jù)on 關(guān)鍵字后的條件 找行數(shù)據(jù),然后 顯示出來,顯示的列就是select后的指定列;
特殊點:on 的兩個判斷列 名字可以不同 類型大致相同
select A.column1,A.column2,B.column1,B.column2 from A inner join B on A.column1=B.column1
在C表中找 到
1 a2 1 b2
2 a4 2 b4
自然連接
就是一種內(nèi)連接
select A.column1,A.column2,B.column1,B.column2 from A natural join B
特殊在于:
1、省略了 on 語句 (條件語句) 系統(tǒng)會自動找 判斷列
2、表A和表2中 至少有各自有一列 作為判斷列,名稱相同,類型大致相同()
外連接(左外 右外)
先根據(jù)on 語句的條件 進行內(nèi)連接 得到一個結(jié)果,然后在結(jié)果的基礎(chǔ)上 ,添加行,把A側(cè)沒有顯示的 行數(shù)據(jù),顯示出來,B側(cè) 顯示為NULL;
全外連接
此連接 先根據(jù)on 語句的條件 進行內(nèi)連接 得到一個結(jié)果,然后在結(jié)果的基礎(chǔ)上,添加行,把A側(cè)沒有顯示的 行數(shù)據(jù),顯示出來,B側(cè) 顯示為NULL; 把B側(cè)沒有顯示的 行數(shù)據(jù),顯示出來,A側(cè) 顯示為NULL;
感興趣的 可以自己做幾個例子寫一寫
on 后面 可以用大于 小于 等于做判斷
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Oracle組件實現(xiàn)動態(tài)Web數(shù)據(jù)庫
Oracle組件實現(xiàn)動態(tài)Web數(shù)據(jù)庫...2007-03-03
實現(xiàn)oracle數(shù)據(jù)庫字段自增長(兩種方式)
這篇文章主要通過兩種方式實現(xiàn)oracle數(shù)據(jù)庫字段自增長,第一種方式是序列+觸發(fā)器,第二種方式序列+顯示調(diào)用序列,需要的朋友可以參考下2015-07-07
教你使用PLSQLDeveloper14連接Oracle11g的詳細(xì)過程
今天給大家?guī)硪黄坛剃P(guān)于用PLSQLDeveloper14連接Oracle11g的詳細(xì)過程,本文分步驟通過圖文并茂的形式給大家介紹的非常詳細(xì),需要的朋友參考下吧2021-09-09
ORACLE DATAGUARD中手工處理日志v$archive_GAP的方法
從9i以后,oracle dataguard 備庫一般都不需要手工處理丟失的日志,F(xiàn)AL自動會幫我們處理,本文主要通過個案例來講下手工處理丟失的日志的方法。2014-08-08
ORACLE大批量插入數(shù)據(jù)的詳細(xì)步驟
很久沒有做數(shù)據(jù)庫的批量處理,最近恰好遇到這個任務(wù),下面這篇文章主要給大家介紹了關(guān)于ORACLE大批量插入數(shù)據(jù)的詳細(xì)步驟,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04
ORACLE正則匹配查詢LIKE查詢多個值檢索數(shù)據(jù)庫對象
這篇文章主要介紹了ORACLE正則匹配查詢,LIKE查詢多個值檢索數(shù)據(jù)庫對象,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-07-07

