left join on 和where條件的放置

2021-08-19 19:12:17 字數 2175 閱讀 3180

left join裡面帶and的查詢

select p.pname,p.pcode,s.saletime from product as p left join sales_detail as s on (s.pcode=p.pcode) and s.saletime in ('2012-07-23','2012-07-05');

查出來的結果:

+-------+-------+------------+

| pname | pcode | saletime   |

+-------+-------+------------+

| a     | ac    | 2012-07-23 |

| a     | ac    | 2012-07-05 |

| a     | ac    | 2012-07-05 |

| b     | de    | null       |

| c     | ***   | null       |

+-------+-------+------------+

直接where條件查詢

select p.pname,p.pcode,s.saletime from product as p left join sales_detail as s on (s.pcode=p.pcode) where s.saletime in ('2012-07-23','2012-07-05');

查詢出來的結果

+-------+-------+------------+

| pname | pcode | saletime   |

+-------+-------+------------+

| a     | ac    | 2012-07-23 |

| a     | ac    | 2012-07-05 |

| a     | ac    | 2012-07-05 |

+-------+-------+------------+

結論:on中的條件關聯,一表資料不滿足條件時會顯示空值。where則輸出兩表完全滿足條件資料

left join裡面的條件:會以左表的基準資料,凡左表出現的資料均要出現,然後再進行join右表,只要關聯上的就需要查出來,如果相應的字段沒有值或不符合條件的話就置為null。

select p.pname,p.pcode,s.saletime from product as p left join sales_detail as s on (s.pcode=p.pcode) ;光左連線的話顯示的內容如下

+-------+-------+------------+

| pname | pcode | saletime   |

+-------+-------+------------+

| a     | ac    | 2012-07-23 |

| a     | ac    | 2012-07-05 |

| a     | ac    | 2012-07-05 |

| b     | de    | 2012-07-16 |  這裡面有值

| c     | ***   | null       |  這裡面沒有值

+-------+-------+------------+

有值但是不符合條件的話就置為null。如果沒有值肯定為null

如果是where條件的話就肯定是要滿足才行。

應用場景:比如有個主表,那以主表為基準去顯示資料可以考慮left join的方式處理

總結:1. 對於left join,不管on後面跟什麼條件,左表的資料全部查出來,因此要想過濾需把條件放到where後面

2. 對於inner join,滿足on後面的條件表的資料才能查出,可以起到過濾作用。也可以把條件放到where後面。

sql中on條件與where條件的區別

資料庫在通過連線兩張或多張表來返回記錄時,都會生成一張中間的臨時表,然後再將這張臨時表返回給使用者。

在使用left jion時,on和where條件的區別如下:

1、 on條件是在生成臨時表時使用的條件,它不管on中的條件是否為真,都會返回左邊表中的記錄。

2、where條件是在臨時表生成好後,再對臨時表進行過濾的條件。這時已經沒有left join的含義(必須返回左邊表的記錄)了,條件不為真的就全部過濾掉。

left join on 和where條件的放置

select from tdleft join select case id as sup case id count supervise number from td kcdc case sup info group by case id sup on sup.sup case id td.cas...

SQL語法 left join on 多條件

重點 先匹配,再篩選where條件。本文將通過幾個例子說明兩者的差別。表1 product idamount 1100 2200 3300 4400 表2 product details idweight exist222 04441 55506 661單個條件 select from produc...

left join on多個條件怎麼寫

有時我們不僅需要用乙個欄位去關聯,還希望兩個表的兩個欄位都是一樣的,這時候可以這樣寫 select from select id,name,code from table1 aleft join select id,name,code from table2 bon a.id b.id and a....