1. 程式人生 > 實用技巧 >基礎資料庫知識分享(3)-多表連線

基礎資料庫知識分享(3)-多表連線

建立兩張表分別為table1和table2:

Table1
idname
1 name1
2 name2
3 name3
Table2
idage
1 18
2 19
4 20



1. 內連線

用比較運算子比較要連線的列的值的連線,不匹配的行不會被顯示。sql關鍵字JOIN 或者INNER JOIN,通常寫成JOIN。

例:

select * from TableA JOIN TableB on TableA.id=TableB.id;

idnameidage
1 name1 1 18
2 name2 2 19
等同於  select * from TableA,TableB where TableA.id=TableB.id

2. 外連線

① 外連線又分為:左外連線、右外連線、全外連線。

② 對應的sql關鍵字:LEFT/RIGHT/FULL OUTER JOIN,通常省略OUTER關鍵字,寫成LEFT/RIGHT/FULL JOIN。

③在左、右外連線中都會以一種表為基表,基表的所有行、列都會顯示,外表如果和條件不匹配則所有的外表列值都為NULL。

全外連線則所有表的行、列都會顯示,條件不匹配的值皆為NULL。

  1. 左外連線示例:
select * from TableA left join TableB on TableA.id=TableB.id
idnameidage
1 name1 1 18
2 name2 2 19
3 name3 NULL NULL

2. 右外連線示例:

select * from TableA right join TableB onTableA.id=TableB.id
idnameidage
1 name1 1 18
2 name2 2 19
NULL NULL 4 20

3. 全連線示例:

select * from TableA full join TableB on TableA.id=TableB.id
idnameidage
1 name1 1 18
2 name2 2 19
NULL NULL 4 20
3 name3 NULL NULL

注:mysql不支援FULL JOIN,解決辦法:right join + union + left join

兩張表時:
select * from A left join B on A.id = B.id (where 條件)
union
select * from A right join B on A.id = B.id (where條件);

3. 交叉連線

沒有where條件的交叉連線將產生連線表所涉及的笛卡爾積,即TableA的行數*TableB的行數的結果集。如果帶where,返回或顯示的是匹配的行數。(cross join後只能用where不能是on)

select * from TableA cross join TableB;
idnameidage
1 name1 1 18
2 name2 2 19
3 name3 3 20
1 name1 1 18
2 name2 2 19
3 name3 3 20
1 name1 1 18
2 name2 2 19
3 name3 3 20

等同於:

select * from TableA,TableB;