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...