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);
實(shí)現(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é)果:
查詢返回了一個(gè)0~999的數(shù)字序列。
顯然,我們可以通過(guò)更多的自連接生成更大的數(shù)字序列。
還有其他生成序列的方法:
例如connect by結(jié)合rownum實(shí)現(xiàn)
select rownum from dual connect by rownum<=10;
使用level實(shí)現(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;
交叉連接就是做笛卡爾積 計(jì)算 原理如下 具體原理百度
解讀示例: A表有2行數(shù)據(jù) , B表有3行數(shù)據(jù) 交叉連接后,產(chǎn)生一個(gè)新表 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)。其實(shí)就是排列組合。
內(nèi)連接
在表C中 根據(jù)on 關(guān)鍵字后的條件 找行數(shù)據(jù),然后 顯示出來(lái),顯示的列就是select后的指定列;
特殊點(diǎn):on 的兩個(gè)判斷列 名字可以不同 類(lèi)型大致相同
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 語(yǔ)句 (條件語(yǔ)句) 系統(tǒng)會(huì)自動(dòng)找 判斷列
2、表A和表2中 至少有各自有一列 作為判斷列,名稱相同,類(lèi)型大致相同()
外連接(左外 右外)
先根據(jù)on 語(yǔ)句的條件 進(jìn)行內(nèi)連接 得到一個(gè)結(jié)果,然后在結(jié)果的基礎(chǔ)上 ,添加行,把A側(cè)沒(méi)有顯示的 行數(shù)據(jù),顯示出來(lái),B側(cè) 顯示為NULL;
全外連接
此連接 先根據(jù)on 語(yǔ)句的條件 進(jìn)行內(nèi)連接 得到一個(gè)結(jié)果,然后在結(jié)果的基礎(chǔ)上,添加行,把A側(cè)沒(méi)有顯示的 行數(shù)據(jù),顯示出來(lái),B側(cè) 顯示為NULL; 把B側(cè)沒(méi)有顯示的 行數(shù)據(jù),顯示出來(lái),A側(cè) 顯示為NULL;
感興趣的 可以自己做幾個(gè)例子寫(xiě)一寫(xiě)
on 后面 可以用大于 小于 等于做判斷
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Oracle數(shù)據(jù)庫(kù):查詢序列、刪除序列方式
文章簡(jiǎn)要介紹了如何在數(shù)據(jù)庫(kù)中查詢和刪除序列,首先,展示了如何查詢當(dāng)前用戶下的序列,并通過(guò)示例說(shuō)明了序列已創(chuàng)建,接著,介紹了如何查詢所有序列,最后,詳細(xì)說(shuō)明了如何刪除序列,并提供了刪除命令和示例2025-02-02Oracle 10G:PL/SQL正規(guī)表達(dá)式(正則表達(dá)式)手冊(cè)
Oracle Database 10g 的一個(gè)新特性大大提高了您搜索和處理字符數(shù)據(jù)的能力。這個(gè)特性就是正規(guī)表達(dá)式,是一種用來(lái)描述文本模式的表示方法。很久以來(lái)它已在許多編程語(yǔ)言和大量 UNIX 實(shí)用工具中出現(xiàn)過(guò)了。2009-06-06Oracle數(shù)據(jù)庫(kù)中如何按天、周、月、季、年統(tǒng)計(jì)數(shù)據(jù)
我們經(jīng)常遇到一些需求,需要我們?cè)趕ql語(yǔ)句中對(duì)日期進(jìn)行分類(lèi)統(tǒng)計(jì),下面這篇文章主要給大家介紹了關(guān)于Oracle數(shù)據(jù)庫(kù)中如何按天、周、月、季、年統(tǒng)計(jì)數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下2024-03-03Oracle 11g收集多列統(tǒng)計(jì)信息詳解
我們?cè)趯?xiě)SQL語(yǔ)句的時(shí)候,有的時(shí)候會(huì)碰到where子句后面有多個(gè)條件的情況,也就是根據(jù)多列的條件篩選得到數(shù)據(jù)。下面這篇文章主要給大家介紹了Oracle 11g收集多列統(tǒng)計(jì)信息的相關(guān)資料,文中介紹的非常詳細(xì),需要的朋友可以參考下。2017-03-03在Oracle數(shù)據(jù)庫(kù)中添加外鍵約束的方法詳解
這篇文章主要介紹了在Oracle數(shù)據(jù)庫(kù)中添加外鍵約束的方法,需要的朋友可以參考下2016-01-01如何解決Oracle數(shù)據(jù)表入庫(kù)中文亂碼問(wèn)題
Oracle數(shù)據(jù)庫(kù)在處理中文數(shù)據(jù)時(shí),經(jīng)常會(huì)遇到亂碼問(wèn)題,導(dǎo)致數(shù)據(jù)無(wú)法正常顯示和處理,這是因?yàn)镺racle數(shù)據(jù)庫(kù)默認(rèn)的字符集為US7ASCII,無(wú)法識(shí)別中文字符,通過(guò)修改數(shù)據(jù)庫(kù),客戶端和應(yīng)用程序字符集,將數(shù)據(jù)轉(zhuǎn)換為正確的字符集,可以避免亂碼問(wèn)題2024-02-02oracle不能使用EM怎么辦 oracle11g如何正確安裝配置EM
這篇文章主要為大家詳細(xì)介紹了oracle不能使用EM的解決方法,oracle11g如何正確安裝配置EM,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05Oracle基礎(chǔ):程序中調(diào)用sqlplus的方式
今天小編就為大家分享一篇關(guān)于Oracle基礎(chǔ):程序中調(diào)用sqlplus的方式,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2018-12-12