資料庫 內連線 外連線 左連線

2021-08-30 18:48:02 字數 1834 閱讀 4382

總結:

內連線:僅僅顯示匹配的行

外連線:設法顯示不匹配的行,包括左(外)連線、右(外)連線、全(外)連線

左(外)連線:左表的行全顯示(右表不存在匹配時填null)

右(外)連線:右表的行全顯示(左表不存在匹配時填null)

全(外)連線:左連線和右連線的結果再做合併(union)

sql:

ansi的寫法不太好看,但是意義明顯。

內連線:join 或 inner join

左(外)連線:left join

右(外)連線:right join

oracle的寫法是在需要補充填null的一方新增「(+)」,表示用null去匹配另一邊「沒有匹配」的行。

內連線:什麼也不做

左(外)連線:右邊填「(+)」

右(外)連線:左邊填「(+)」

練習:

--prepare

create global temporary table temp1 (

id number(3), desc1 char(5)

); create global temporary table temp2 (id number(3), desc2 char(5));

insert into temp1 values (123, 'abcde');

insert into temp1 values (456, 'fghij');

insert into temp2 values (456, 'zzzzz');

insert into temp2 values (789, 'mmmmm');

oracle

--left join

select a.id id_a, b.id id_b

from temp1 a, temp2 b

where a.id(+) = b.id

--right join

select a.id id_a, b.id id_b

from temp1 a, temp2 b

where a.id= b.id(+)

asni

--inner join(inner is optional

)select ta.id id_a, tb.id id_b

from temp1 ta

inner join temp2 tb

on ta.id = tb.id

--left join

select ta.id id_a, tb.id id_b

from temp1 ta

lest join temp2 tb

on ta.id = tb.id

--right join

select ta.id id_a, tb.id id_b

from temp1 ta

right join temp2 tb

on ta.id = tb.id

--oracle全外連線(asin略)

select a.id id_a, b.id id_b

from temp1 a, temp2 b

where a.id(+) = b.id

union

select a.id id_a, b.id id_b

from temp1 a, temp2 b

where a.id = b.id(+)

Oracle資料庫 內連線 外連線 左連線

總結 內連線 僅僅顯示匹配的行 外連線 設法顯示不匹配的行,包括左 外 連線 右 外 連線 全 外 連線 左 外 連線 左表的行全顯示 右表不存在匹配時填null 右 外 連線 右表的行全顯示 左表不存在匹配時填null 全 外 連線 左連線和右連線的結果再做合併 union sql ansi的寫法...

Oracle資料庫 內連線 外連線 左連線

內連線 僅僅顯示匹配的行 外連線 設法顯示不匹配的行,包括左 外 連線 右 外 連線 全 外 連線 左 外 連線 左表的行全顯示 右表不存在匹配時填null left join 右 外 連線 右表的行全顯示 左表不存在匹配時填null right join 全 外 連線 左連線和右連線的結果再做合併...

資料庫 內連線 左外連線 右外連線 全外連線

內連線中,只有滿足連線條件的元組才能作為結果輸出,即當任乙個表中為null則不會輸出。sql 語句 123 select first.cno,second.cpno from course first,course second where first.cpno second.cno 如果在查詢時需...