MySQL的外連線使用總結

2022-04-05 07:21:04 字數 2506 閱讀 9043

內連線: 只連線匹配的行

左外連線: 包含左邊表的全部行(不管右邊的表中是否存在與它們匹配的行),以及右邊表中全部匹配的行

右外連線: 包含右邊表的全部行(不管左邊的表中是否存在與它們匹配的行),以及左邊表中全部匹配的行

全外連線: 包含左、右兩個表的全部行,不管另外一邊的表中是否存在與它們匹配的行。

交叉連線 生成笛卡爾積-它不使用任何匹配或者選取條件,而是直接將乙個資料來源中的每個行與另乙個資料來源的每個行都一一匹配

舉個例子吧。

表aid name

1 張2 李

3 王表b

id address a_id

1 北京 1

2 上海 3

3 南京 10

包容性:a表包容b表,左連線左表是全的.(left join 或 left outer join )

sql語句如下:

select a.name, b.address

from a

left join b on a.id = b.a_id

查詢結果為:

name address

張 北京

李 null

王 上海

包容性:b表包容a表,右連線右表是全的.(right join 或 right outer join )

sql語句如下:

select a.name, b.address

from a

right join b on a.id = b.a_id

查詢結果為:

name address

張 北京

王 上海

null 南京

排他性:a,b表中至少有1個匹配時,才返回行。兩表的交集

sql語句如下:

select a.name,b.address from a

inner join b

on a.id = b.a_id

查詢結果為:

name address

張 北京

王 上海

inner join 內連線等價於下面的sql:

select a.name, b.address

from a, b

where a.id = b.a_id

注釋:全外連線返回參與連線的兩個資料集合中的全部資料,無論它們是否具有與之相匹配的行。在功能上,它等價於

對這兩個資料集合分別進行左外連線和右外連線,然後再使用消去重複行的並操作將上述兩個結果集合並為乙個結果集。(full join 或 full outer join )

sql語句如下:

select * from a full join b

查詢結果為:

id name id address a_id

1 張 1 北京 1

2 李 1 北京 1

3 王 1 北京 1

1 張 2 上海 3

2 李 2 上海 3

3 王 2 上海 3

1 張 3 南京 10

2 李 3 南京 10

3 王 3 南京 10

注釋:返回3*3=9條記錄,即笛卡爾積

sql語句如下:

select * from a

cross join b

查詢結果為:

id name id address a_id

1 張 1 北京 1

2 李 1 北京 1

3 王 1 北京 1

1 張 2 上海 3

2 李 2 上海 3

3 王 2 上海 3

1 張 3 南京 10

2 李 3 南京 10

3 王 3 南京 10

cross join等價於:

select * from a,b

注意:1. on a.id = b.id 等同於 using(id)//這裡欄位名要相同

2. 當 mysql 在從乙個表中檢索資訊時,你可以提示它選擇了哪乙個索引。

如果 explain 顯示 mysql 使用了可能的索引列表中錯誤的索引,這個特性將是很有用的。

通過指定 use index (key_list),你可以告訴 mysql 使用可能的索引中最合適的乙個索引在表中查詢記錄行。

可選的二選一句法 ignore index (key_list) 可被用於告訴 mysql 不使用特定的索引。

效率問題:

1.inner join比left join快

注:inner join 內連線等價於下面的sql: select a.name, b.address from a, b where a.id = b.a_id

所以一般要用一般的連線就可以了.

2.連線欄位建索引

多表外連線

select a.*,b.f1,b.f2,b.fn,c.f1,c.f2,c.fn from a

left join b on a.id=b.id

left join c on c.id=a.id

where .......

mysql 外連線總結

外連線總結 rel noopener noreferrer mysql 外連線總結 盛濤 首先my sql 不支援oracle的 內連線 只連線匹配的行 左外連線 包含左邊表的全部行 不管右邊的表中是否存在與它們匹配的行 以及右邊表中全部匹配的行 右外連線 包含右邊表的全部行 不管左邊的表中是否存在...

mysql外連線的總結

1.左連線 左外連線 left join left outer join select from table a left join table b on a.id b.id 2.右連線 右外連線 right join right outer join select from table a rig...

mysql外連線 MySQL外連線

外連線不但返回符合連線和查詢條件的資料行,還返回不符合條件的一些行。外連線分三類 左外連線 left outer join 右外連線 right outer join 和全外連線 full outer join 在外連線中outer 關鍵字可省略。三種連線的共同點 都返回符合連線條件和查詢條件 即內...