總結:
內連線:僅僅顯示匹配的行
外連線:設法顯示不匹配的行,包括左(外)連線、右(外)連線、全(外)連線
左(外)連線:左表的行全顯示(右表不存在匹配時填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 left join 右 外 連線 右表的行全顯示 左表不存在匹配時填null right join 全 外 連線 左連線和右連線的結果再做合併...
資料庫 內連線 外連線 左連線
總結 內連線 僅僅顯示匹配的行 外連線 設法顯示不匹配的行,包括左 外 連線 右 外 連線 全 外 連線 左 外 連線 左表的行全顯示 右表不存在匹配時填null 右 外 連線 右表的行全顯示 左表不存在匹配時填null 全 外 連線 左連線和右連線的結果再做合併 union sql ansi的寫法...
資料庫內連線和外連線
資料庫中涉及兩個表之間的資料查詢通常使用連線的方法實現。連線分為內連線和外連線。內連線 指連線結果僅包含符合連線條件的行,參與連線的兩個表都應該符合連線條件。外連線 連線結果不僅包含符合連線條件的行同時也包含自身不符合條件的行。包括左外連線 右外連線和全外連線。左外連線 左邊表資料行全部保留,右邊表...