在外連線中使用常量過濾的作用

2021-04-16 05:23:48 字數 1406 閱讀 1387

常量的右連線問題。在oracle的較前期版本中可以使用+號標識外連線中的附表,例如where t1.id = t2.id(+)標識使用t1作為基礎表跟t2進行外連線,而條件where t2.id = t1.id則是使用t2作為基礎表與t1進行外部連線,但偶爾也能看到諸如這種連線方式where t1.id = t2.id(+) and t2.name(+) = 『jax』。很多人對這種連線方式的含義不甚了解,檢索網上資料,一直沒發現合理的答案。事實上,這種連線方式是將t1作為基礎表與t2表中滿足條件name = 『jax』的部分集合進行外部連線的意思,相當於select * from t1,(select * from t2 where name = 『jax』) t3 where t1.id = t3.id(+) ,也同時跟如下語句等價:select * from t1 left join t2 on t1.id = t2.id and t2.name = 『jax』。

測試環境如下:

--建立測試用表t1,t2

create table t1(id varchar2(10), name varchar2(10));

create table t2(id varchar2(10), name varchar2(10));

--插入測試用語句

insert into t1 values(1,'zhanglei');

insert into t1 values(2,'zhghaitao');

insert into t2 values(1,'1');

insert into t2 values(1,'2');

insert into t2 values(1,'3');

insert into t2 values(2,'4');

insert into t2 values(2,'5');

insert into t2 values(2,'6');

--簡單使用謂詞where name(+) = 1時其作用跟where name = 1完全相同。

select * from t2

where name(+) = '1'

--如果將謂詞where name(+) = 1跟其它連線語句結合使用,則oracle在處理時會先將原表過濾,使用得到的中間結果跟其它集合進行連線。如下三個sql語句結果相同。

select *

from t1,t2

where t1.id = t2.id(+) and t2.name(+) = '1'

select *

from t1 left join t2 on t1.id = t2.id and t2.name = '1'

select * from

t1 , (select * from t2 where name = '1') t3

where t1.id = t3.id(+)

Action中使用的系統常量

action中使用的系統常量 think path thinkphp 系統目錄 module name 當前模組名稱 action name 當前操作名稱 tmpl path 專案模版目錄 lib path 專案類庫目錄 cache path 專案模版快取目錄 config path 專案配置檔案目...

形參中使用常量引用,常量,普通引用的區別

c 中的引用,給我們提供了一種區別於c指標的形參定義方式。一般我們可以將其定義為 1 普通引用 void foo int n 2 常量 void foo const int n 3 常量引用 void foo const int n 三種方法用途不一樣,都可以通過編譯。以普通引用為形參的函式,一般會...

Excel中使用Sql過濾資料的方法

excel作為辦公資料必不可少的載體一直被廣泛使用。作為資料載體,我們可以將其看作小型的資料庫。excel除了提供眾多的規範化的便捷功能外,也提供了sql介面,使我們可以像操作table一樣來操作sheet。microsoft query 開啟excel程式 在資料選項卡上的獲取外部資料組中,單擊從...