常量的右連線問題。在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程式 在資料選項卡上的獲取外部資料組中,單擊從...