Oracle 外鏈結 內鏈結 等

2021-08-30 11:43:42 字數 2171 閱讀 6389

[b]首先建立兩張表,初始化資料[/b]

sql> create table zk_test_1(id int,name varchar(10));

sql> insert into zk_test_1 values(1,'aaa');

sql> insert into zk_test_1 values(2,'bbb');

sql> insert into zk_test_1 values(3,'ccc');

sql> create table zk_test_2(id int , score int);

sql> insert into zk_test_2 values(1,10);

sql> insert into zk_test_2 values(2,20);

sql> insert into zk_test_2 values(4,40);

1.內連線(inner join): 兩表都滿足的組合

sql> select * from zk_test_1 a inner join zk_test_2 b on a.id = b.id;

結果:id name score

1 aaa 10

2 bbb 20

2.外連線(outter join):

*左外連線(left outer jion)

左向外聯接的結果集包括 left outer 子句中指定的左表的所有行,而不僅僅是聯接列所匹配的行。如果左表的某行在右表中沒有匹配行,則在相關聯的結果集行中右表的所有選擇列表列均為空值(null)。其中outer可以忽略。

sql> select a.id,a.name,b.score from zk_test_1 a left outer join zk_test_2 b on a.id = b.id;

結果:id name score

1 aaa 10

2 bbb 20

3 ccc (null)

*右外連線(right outer join)

sql> select a.id,a.name,b.score from zk_test_1 a right outer join zk_test_2 b on a.id = b.id;

結果:id name score

1 aaa 10

2 bbb 20

4 (null) 40

*全外連線(full outer join)

完整外部聯接返回左表和右表中的所有行。當某行在另乙個表中沒有匹配行時,則另乙個表的選擇列表列包含空值。如果表之間有匹配行,則整個結果集行包含基表的資料值。

sql> select a.id,a.name,b.score from zk_test_1 a full outer join zk_test_2 b on a.id = b.id;

結果:id name score

1 aaa 10

2 bbb 20

3 ccc (null)

4 (null) 40

3.外連線與條件配合使用

當在內連線查詢中加入條件是,無論是將它加入到join子句,還是加入到where子句,其效果是完全一樣的,但對於外連線情況就不同了。當把條件加入到join子句時,sql server、informix會返回外連線表的全部行,然後使用指定的條件返回第二個表的行。如果將條件放到where子句中,sql server將會首先進行連線操作,然後使用where子句對連線後的行進行篩選。

在join子句中:

sql> select a.id,a.name,b.score from zk_test_1 a right join zk_test_2 b on a.id = b.id and b.id = 2;

結果:id name score

(null) (null) 10

2 bbb 20

(null) (null) 40

在where子句中:

sql> select a.id,a.name,b.score from zk_test_1 a right join zk_test_2 b on a.id = b.id where b.id = 2;

結果:id name score

2 bbb 20

4,自身連線

自身連線是指同乙個表自己與自己進行連線。這種一元連線通常用於從自反關係(也稱作遞迴關係)中抽取資料。例如人力資源資料庫中雇員與老闆的關係。

C 內鏈結 外鏈結

編譯的時候 假如編譯器是vs 是以原始檔cpp檔案為單位,編譯成乙個個的obj檔案,然後再通過鏈結器把不同的obj檔案鏈結起來。如果一些變數或函式的定義是內連線的話,鏈結器鏈結的時候就不會拿它們去與obj比較看有沒有重複定義,乙個原始檔中即使是extern宣告的變數或函式也不能使用另外乙個原始檔中的...

C 的內鏈結與外鏈結

1 編譯單元 在編譯器編譯 時,只會去編譯.cpp檔案,而所有的標頭檔案會在預編譯時全部拷貝到.cpp中去,之後編譯.cpp檔案,所以每個.cpp檔案是乙個編譯單元。2 宣告 宣告是將乙個名稱引入到乙個作用域中來,並且,除了類中的成員函式和成員變數的外,在同乙個作用域是可以重複宣告的。3 定義 定義...

My SQL的內連線,外鏈結查詢

1 內連線 只連線匹配的行。2 左外連線 包含左邊表的全部行,以及右邊表中所有匹配的行,無論右邊的表有沒有和左邊匹配的行,左邊的所有行都必須要顯示。3 右外連線 包含右邊表的全部行,以及左邊表中所有匹配的行,無論左邊的表有沒有和右邊匹配的行,右邊的所有 行都必須要顯示。例 表t book的圖書類別編...