外連線總結" rel="noopener noreferrer">mysql 外連線總結
盛濤
首先my sql 不支援oracle的(+)
內連線: 只連線匹配的行
左外連線: 包含左邊表的全部行(不管右邊的表中是否存在與它們匹配的行),以及右邊表中全部匹配的行
右外連線: 包含右邊表的全部行(不管左邊的表中是否存在與它們匹配的行),以及左邊表中全部匹配的行
全外連線: 包含左、右兩個表的全部行,不管另外一邊的表中是否存在與它們匹配的行。
交叉連線
生成笛卡爾積-它不使用任何匹配或者選取條件,而是直接將乙個資料來源中的每個行與另乙個資料來源的每個
行都一一匹配
舉個例子吧。
表aid
name 1 張
2 李3 王
表bid
address
a_id
1 北京 12
上海 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 北京
12
李 1
北京
13
王 1
北京
11
張 2
上海
32
李 2
上海
33
王 2
上海
31
張 3
南京
102
李 3
南京
103
王 3
南京
10注釋:返回3*3=9條記錄,即笛卡爾積
sql語句如下:
select * from a
cross join b
查詢結果為:
id
name
id
address a_id
1 張
1 北京
12
李 1
北京
13
王 1
北京
11
張 2
上海
32
李 2
上海
33
王 2
上海
31
張 3
南京
102
李 3
南京
103
王 3
南京
10cross 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外連線 MySQL外連線
外連線不但返回符合連線和查詢條件的資料行,還返回不符合條件的一些行。外連線分三類 左外連線 left outer join 右外連線 right outer join 和全外連線 full outer join 在外連線中outer 關鍵字可省略。三種連線的共同點 都返回符合連線條件和查詢條件 即內...
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的外連線使用總結
內連線 只連線匹配的行 左外連線 包含左邊表的全部行 不管右邊的表中是否存在與它們匹配的行 以及右邊表中全部匹配的行 右外連線 包含右邊表的全部行 不管左邊的表中是否存在與它們匹配的行 以及左邊表中全部匹配的行 全外連線 包含左 右兩個表的全部行,不管另外一邊的表中是否存在與它們匹配的行。交叉連線 ...