1. 程式人生 > >oracle中右表有過濾條件的left outer join

oracle中右表有過濾條件的left outer join

oracle中left outer join就是以左表作為基表來進行連線操作,連線的結果中一定會涵蓋基表中所有的列,即使有某些列與右表找不到匹配關係。如下分別是city表和stds表中的資料截圖:

   

現在執行以下語句:
select city.name,stds.sid,stds.sname from city left outer join stds on city.id=stds.cid;
其結果截圖如下,即使沒有湖南的學生,湖南那一項仍然在結果集中,因為city表是基表,它的每一項都會在結果集中。


現在我們假如要獲取sid不等於4的情況的左連線結果,那麼有兩種選擇,一種是在on中新增條件限制,一種是在where中新增條件限制,我們現在來測試兩種結果是否相同。

先執行在on中新增條件,執行以下語句:
select city.name,stds.sid,stds.sname from city left outer join stds on city.id=stds.cid and stds.sid!=4;
執行結果和執行計劃如下:



檢視執行結果,我們可以看到結果中仍然包括了基表,也就是city表中的所有行。然後再檢視執行計劃,可以看到先是ACCESS內層的STDS表,並且加上filter(SID<>4),然後再和外層的CITY表進行左連線操作,所以仍然可以保證city表中每一行都在結果集中。

再執行where中新增條件,執行語句如下:
select city.name,stds.sid,stds.sname from city left outer join stds on city.id=stds.cid where stds.sid!=4
其執行結果如下圖所示:


由於sql的執行順序是先from得到源資料,再where篩選資料,最後select投影資料。先join之後,結果集中應該有
sid為null的結果項,但是由於oracle中任何與null做=或者!=等邏輯判斷得到的結果都是unknown,歸為false,
所以sid為null的項最終會被剔除掉,而sid=4的資料項也會被剔除掉,所以才出現了上述結果。


下面是做的一個null做等於判斷和不等於判斷的截圖:


所以如果做左外連線時,如果右錶帶條件約束,它把條件約束放在on中和where中得到的結果是不一樣的,這時需要根據自己的需求進行選擇。

相關推薦

oracle中右過濾條件left outer join

oracle中left outer join就是以左表作為基表來進行連線操作,連線的結果中一定會涵蓋基表中所有的列,即使有某些列與右表找不到匹配關係。如下分別是city表和stds表中的資料截圖:  

Oracleleft join中右的限制條件

無過濾條件的LEFT JOIN SQL中最簡單形式的LEFT JOIN,是直接根據關聯欄位,以左表為基準,對右表進行匹配。在SELECT語句中選取的欄位,如果有右表的記錄(一般都是需要右表的某些記錄的),取出配對成功的右表記錄中對應的這個欄位的值;否則,直接置NULL。這本身就是LEFT JOIN的特點

Linq連接大全(INNER JOINLEFT OUTER JOIN、RIGHT OUTER JOIN、FULL OUTER JOIN、CROSS JOIN)

iar value fsm wdcp esc max als tla plc 轉載http://www.cnblogs.com/shenqiboy/p/3260105.html 我們知道在SQL中一共有五種JOIN操作:INNER JOIN、LEFT OUTER JOIN、

left joinleft outer join 的區別---其他功能(inner join 等價於直接,和==條件)(左右代表依著一邊的資料條數)

使用關係代數合併資料1 關係代數合併資料集合的理論基礎是關係代數,它是由E.F.Codd於1970年提出的。在關係代數的形式化語言中:        用表、或者資料集合表示關係或者實體。        用行表示元組。        用列表示屬性。關係代數包含以下8個關係運算符        選取――返

★★★ oracle外連線,OracleLeft Outer Join和外關聯(+)的區別

【原】Oracle中Left Outer Join和外關聯(+)的區別 2008-03-23 16:22:37 Oracle的left join中on和where的區別 2009-09-28 15:20 今天遇到一個求某月所有天數的統計結果,如果某日的結果是0

left joinleft outer join (可解決多個left join的問題)

使用關係代數合併資料1 關係代數合併資料集合的理論基礎是關係代數,它是由E.F.Codd於1970年提出的。在關係代數的形式化語言中:        用表、或者資料集合表示關係或者實體。        用行表示元組。        用列表示屬性。關係代數包含以下8個關係運算符        選取――返

left outer join的on不起作用

oci join microsoft nbsp mysq soft sel asp msdn left outer join的on不起作用 https://msdn.microsoft.com/zh-cn/library/ms177634.aspx?f=255&am

Inner Join, Left Outer Join和Association的區別

outer 驗證 sta alt str 圖片 信息 class 能夠 測試用的CDS視圖的源代碼,第8行用Inner Join連接TJ02T, 後者存放了所有系統狀態的ID和描述。 Inner Join測試結果:對於那些在TJ02T裏沒有維護描述信息的狀態,它們不會出現

Detected cartesian product for LEFT OUTER join

carte pro 卡爾 tween led 12px new mce style spark做表連接的時候出現這個錯誤, Exception in thread "main" org.apache.spark.sql.AnalysisException: Detect

JOIN連線:LEFT OUTER JOIN

外聯接。外聯接可以是左向外聯接、右向外聯接或完整外部聯接。  在 FROM 子句中指定外聯接時,可以由下列幾組關鍵字中的一組指定: LEFT JOIN 或 LEFT OUTER JOIN。  左向外聯接的結果集

系統設計時應儘量避免出現left outer join, right outer join

今天蓋爾找我優化一條SQL,SQL如下: SELECT DISTINCT b.organ_id, c.company_name as organ_name, a.distri

OCP-1Z0-051 第131題 LEFT OUTER JOIN和RIGHT OUTER JOIN的用法

View the Exhibit and examine the structure of the PRODUCT, COMPONENT, and PDT_COMP tables. In PRODUCT table, PDTNO is the primary key. In COMPONENT table,

OCP-1Z0-051 第130題 LEFT OUTER JOIN的用法

View the Exhibit and examine the data in the EMPLOYEES table: You want to display all the employee names and their corresponding manager names. Evaluate th

SparkSql中join的實現( inner joinleft outer join,right outer join,full outer join

Join是SQL語句中的常用操作,良好的表結構能夠將資料分散在不同的表中,使其符合某種正規化,減少表冗餘、更新容錯等。而建立表和表之間關係的最佳方式就是Join操作。 SparkSQL作為大資料領域的SQL實現,自然也對Join操作做了不少優化,今天主要看一下在SparkS

hive 各種 joinleft outer joinjoin、full outer join

一、概念 1、左連線 left outer join 以左邊表為準,逐條去右邊表找相同欄位,如果有多條會依次列出 2、連線join 找出左右相同同的記錄 3、全連線 full outer  join 包括兩個表的join結果,左邊在右邊中沒找到的結果(NULL),右邊在左邊

left joinleft outer join 的區別 ,full outer join

 通俗的講:    A   leftjoin   B   的連線的記錄數與A表的記錄數同    A   rightjoin   B   的連線的記錄數與B表的記錄數同      A   leftjoin   B   等價B   rightjoin   A          

OCP-1Z0-051 第126題 LEFT OUTER JOIN,FULL OUTER JOIN,JOIN的使用

View the Exhibit and examine the data in the PROJ_TASK_DETAILS table. The PROJ_TASK_DETAILS table stores information about tasks involved in a project and

Hibernate中的left outer join

首先,最簡單的是一對多的連線,比如: select student from Teacher t join t.students student where student.... 如果是多對一呢?這裡有隱式和顯示的區別(上面的一對多的情況屬於隱式連線)。可以像下面這樣 s

db2與hive中left joinleft outer join的區別

db2中inner join沒有左右之分,outer join有左右之分,其目的在於需要確定以誰為主表; hive中不支援left join,支援left outer join; hive中left semi join作用類似於SQL中的in,以右表中的欄位(key )進

SQL中的left outer join,inner join,right outer join用法詳解

      使用關係代數合併資料 1 關係代數 合併資料集合的理論基礎是關係代數,它是由E.F.Codd於1970年提出的。 在關係代數的形式化語言中: ?          用表、或者資料集合表示關係或者實體。 ?          用行表示元組。 ?          用列表示屬性。 關係代數包含以下8個