[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的圖書類別編...