ORACLE裡面的外連線和

2021-08-30 15:06:53 字數 2020 閱讀 1589

oracle裡面的外連線可以簡寫成:

(+)=:右連線的簡寫

也就是:保留右表存在,左表不存在的行!

=(+):左連線

也就是:保留左表存在,右表不存在的行!

對於這種簡寫的侷限性是顯而易見的

可讀性就很差,需要花時間去理解.因為我們的思維方式是:首先是怎麼去連線,然後用什麼條件過濾!分成兩步走,便使得sql清晰易懂.

記得在資料結構裡面,完成表示式求解的演算法也是採取分兩步走的策略,一:轉換成字尾表示式,二:然後在求職!雖然一步理論上可以達到,但是根據電腦的思維方式,採取兩步走,是最容易實現的!

而sql就是宣稱的以人類的思考方式去解決問題!

||在oracle裡面是連線字串,相當於+

在構造可執行的sql字串時候,對於in 變數,動態構造sql語句時候如下所示

then

tempsql := ' and sp.department_oid = '||''''||de_oid||'''';

end if;

if vflag = '1' then

if flag ='1' then

open result for

'select t.inv_stock_oid inv_stock_oid,t.stock_type_id stock_type_id,t.inv_position_oid inv_position_oid,nvl(t.safety,0)-t.qty state,

t.part_no part_no,t.part_name part_name,t.spec spec,t.unit unit,t.qty totalqty,t.safety safety,t.update_time update_time,

t1.potion_id position_id,t1.description position_desc,t2.stock_type_id stock_type_id,t2.description type_desc,

sp.inv_partnoclass_oid partnoclassoid,sp.qty deqty,sp.safe_qty safeqty,de.department_name department

from inv_stock t,inv_position t1,inv_stock_type t2,inv_stock_partnoclass sp,basicdata_department de

where de.department_oid(+) = sp.department_oid'

||tempsql||'

and sp.inv_stock_oid(+) = t.inv_stock_oid

and t.stock_type_id = t2.inv_stock_type_oid

and t.inv_position_oid = t1.inv_position_oid(+)

and t2.description='||''''||vcondition||''''||'

order by state desc';

return result;

注意特別奇怪的如下寫法

tempsql := ' and sp.department_oid = '||''''||de_oid||'''';
t2.description='||''''||vcondition||''''||'
為什麼會有那麼多單引號呢?

首先我來說我們期望的結果是:對於變數,這裡用字串常量來代替

sp.department_oid = 'something';

而在**中那個變數僅僅替代值,也就是something,

還有前後兩個單引號需要表示出來,但是它們是直接常量,所以當作字串寫,就需要再加兩個單引號括起來,最後轉義的乙個

所以每次總共四個!

一定有比這個更好的解決辦法,目前由於對於oracle是新手,好多東西都有待學習

歡迎共同討論

oracle 左連線和外連線

最近遇到左連線與外連線的業務,感覺有點模糊,平時用的少,今天小小的總結一些。oracle連線 內連線 自然連線 只有兩個表匹配的才能在結果中出現 外連線左連線 顯示左邊的全部和右邊與左邊匹配的部分。右連線 顯示右邊的全部與左邊與右邊匹配的部分 自連線 連線在一張表中 下面通過例子來說明 1.首先實驗...

oracle表內連線和外連線

表內連線和外連線 select from emp a,emp b where a.empno b.mgr order by a.empno 聯絡 查詢king手下是誰 內連線 select emp.empno,emp.ename,dept.dname from emp inner join dept...

oracle表內連線和外連線

表內連線和外連線 select from emp a,emp b where a.empno b.mgr order by a.empno 聯絡 查詢king手下是誰 內連線 select emp.empno,emp.ename,dept.dname from emp inner join dept...