1. 程式人生 > >left semi join 與join 的區別

left semi join 與join 的區別

LEFT SEMI JOIN:左半開連線會返回左邊表的記錄,前提是其記錄對於右邊表滿足ON語句中的判定條件。對於常見的內連線(INNER JOIN),這是一個特殊的,優化了的情況。大多數的SQL方言會通過in.......exists結構來處理這種情況。

準備表:

create table dcx1107(
id bigint
);
insert into dcx1107 values(-1);
insert into dcx1107 values(1);

create table dcx_2(
id bigint
,role string
);

insert into dcx_2 values(-1,'C1');
insert into dcx_2 values(1,'C1');
insert into dcx_2 values(1,'C2');

查詢資料:

--join的select的結果中可以有t1(左表),t2(右表)兩張表的欄位
select 
t1.id,t2.role
from dcx1107 t1
join dcx_2 t2
on t1.id=t2.id;

結果:

--left semi join的select的結果中只允許出現t1(左表)表的欄位
select 
t1.id
from dcx1107 t1
left semi join dcx_2 t2
on (t1.id=t2.id);

--等價於
 select 
t1.id
from dcx1107 t1
where id in (select id from dcx_2)
;

--等價於
 select 
t1.id
from dcx1107 t1
where EXISTS (select 1 from dcx_2 t2 where t1.id=t2.id)

結果:

這樣寫會報錯
select 
t1.id,t2.role
from dcx1107 t1
left semi join dcx_2 t2
on (t1.id=t2.id);

總結:

對待右表中重複key的處理方式差異:因為 left semi join 是 in(keySet) 的關係,遇到右表重複記錄,左表會跳過,而 join on 則會一直遍歷。
left semi join 中最後 select 的結果只許出現左表,因為右表只有 join key 參與關聯計算了,而 join on 預設是整個關係模型都參與計算了。

相關推薦

left semi join join區別

LEFT SEMI JOIN:左半開連線會返回左邊表的記錄,前提是其記錄對於右邊表滿足ON語句中的判定條件。對於常見的內連線(INNER JOIN),這是一個特殊的,優化了的情況。大多數的SQL方言會通過in.......exists結構來處理這種情況。 準備表: cre

圖解LEFT JOIN、RIGHT JOINJOIN區別

如圖: T1表 ID NAME AGE 1 張三 11 2 李四 12 3 王五

Mysql中Left Join Right Join Inner Join Full Join區別

chinese ron 兩張 ansi 左連接 ima money key sel 看看Left Join 與Right Join 與 Inner Join 與 Full Join對表進行操作後得到的結果。 在數據庫中新建兩張表,並插入要測試的數據。 新建表:

left join on +多條件where區別

sql sel null pri opera 不存在 || per int left join on +多條件與where區別 重點 先匹配,再篩選where條件。 本文將通過幾個例子說明兩者的差別。 1. 單個條件 select * from product a l

sql中left join、right joininner join區別

sql語句 mage 分享 app bubuko 3.1 from wid http 1、數據庫 1.1、作者表 1.2、圖書表 1.3、出版社表 2、left join   left join(左聯接) 返回包括左表中的所有記錄和右表中聯結字段相等的記錄。 2.

left join on後面 加條件和where後面加條件的區別 inner join left join 和right join之間的區別

上一篇對三個join的語句做了一個區別,如果連最基礎的都不清楚,那麼請先參考:inner join 與 left join 和right join之間的區別 碰巧在專案中遇到了一個sql,是left join和where的條件限制的區別,想了好半天,這裡做一下筆記,萬一以後忘記了方便檢視。 話不多說,直接

inner join left/right join區別淺談

       最近遇到了一個關於join查詢與left/right join查詢區別的問題,在之前並沒有去真正去思考過這兩者的區別,在看到這個問題的時候我的第一反應是覺得join與left/right join的區別應該就是基本表的區別,不知道是

SQL 查詢語句(inner join left join) 之間的區別

SQL查詢語句: 1. 查詢中用到的關鍵詞主要包含六個,書寫順序為 select--from--where--group by--having--order by 2. 但是他們的執行順序為  from--where--group by--having--select-

Oracle的left join中on和where的區別以及(+)的區別

資料庫在通過連線兩張或多張表來返回記錄時,都會生成一張中間的臨時表,然後再將這張臨時表返回給使用者。       在使用left jion時,on和where條件的區別如下: 1、 on條件是在生成臨時表時使用的條件,它不管on中的條件是否為真,都會返回左邊表中的記錄。 2、where條件是在臨時表生成好後

LEFT JOIN RIGHT JOIN 的使用區別

廢話不多,不深入寫原理,直接上例子: --函式說明: --DECLARE 宣告變數 --WHILE 迴圈 --INSERT 增加表資料 [email protected]@rowcount 返回SQL語句執行後受影響的行數 --CASE WHEN THEN EL

db2hive中left joinleft outer join區別

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

SQL的JOIN語法解析(inner join, left join, right join, full outer join區別)

問題 至少 caption 左連接 右連接 class hole pty lock 總的來說,四種JOIN的使用/區別可以描述為: left join 會從左表(shop)那裏返回所有的記錄,即使在右表(sale_detail)中沒有匹配的行。 right oute

javaScript之splitjoin區別

str var split 正則表達式 string 逗號 splitstr amp rip 共同點:split與join函數通常都是對字符或字符串的操作; 兩者的區別:(1)split()用於分割字符串,返回一個數組,例如 var string=“hello world?

Inner Join and Left Join 條件的結合

初始 inf str post 相同 結合 inner 滿足 我們 在使用關系數據庫時,表連接和對結果集的篩選是必不可少的查詢技能,對於他們的用法你都搞清楚了麽?請讓我們一起來過一遍。 表創建與初始化: Inner Join 結果集: 對於Inne

sql的left join 、right join 、inner join之間的區別

所有 eight mark 等值連接 tro inner sql font style sql中left join 、right join 、inner join之間的區別    left join (左聯接) 返回包括左表中的所有記錄和右表中聯結字段相等的記錄 ;  ri

inner join/ left join/right join 之間的區別

結果 表示 觀察 聯結 例如 明顯 name num filter left join(左聯接) 返回包括左表中的所有記錄和右表中聯結字段相等的記錄   right join(右聯接) 返回包括右表中的所有記錄和左表中聯結字段相等的記錄  inner join

Python中“+”join”的區別

在用"+"連線字串時,結果會生成新的物件 用join時結果只是將原列表中的元素拼接起來,所以join效率比較高 我們可以做一個簡單的測試: import time time01 = time.time()   #起始時刻a = ""for i in range(2000000):  a+="sxt"t

SQL文摘:sql(join中onwhere區別)

原文地址:https://www.cnblogs.com/wlzhang/p/4532587.html left join :左連線,返回左表中所有的記錄以及右表中連線欄位相等的記錄。 right join :右連線,返回右表中所有的記錄以及左表中連線欄位相等的記錄。 inner join: 內連線

sql inner join ,left join,right join區別

inner join 返回的是兩個表完全匹配的結果 如表tablea a :1,2,3,tableb b:4,5,6 select a.1,a.2,b.3 from tablea a inner join tableb b on a.1=b.2   left join

JoinCountDownLatch之間的區別

Join與CountDownLatch之間的區別 import java.util.concurrent.CountDownLatch; public class CountDownLatchTest { public static CountDownLatch c = new CountDown