mysql中的內連線,外連線

2022-08-31 22:48:15 字數 3295 閱讀 3204

內連線: 只連線匹配的行

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

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

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

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

舉個例子吧。

表aid   name  

1    張

2    李

3    王

表bid   address   a_id

1    北京      1

2    上海      3

3    南京      10

/******************************** left join  左連線*****************************************/

包容性: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

王     上海

/******************************** right join  右連線*****************************************/

包容性: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     南京

/******************************** inner join  內連線*****************************************/

排他性: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 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

/******************************** cross join(不帶條件where...)***********************************/

注釋:返回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.連線欄位建索引

**--

MySQL中的內連線和外連線

總結雖然開發中經常用到mysql,但是感覺很多關於mysql的相關知識仍然不太理解,比如mysql的內連線和外連線,我理解的連線,就是在進行多表查詢使用相關聯的條件將多表聯絡起來,並根據條件查詢各表中的和條件有關的全部內容或部分內容。根據如下sql語句執行,準備兩張表beauty和boys crea...

mysql內連線和外連線

testa表 idname class1張三 a2李四b 3王五ctestb表 class ageb10c 20d30內連線實際上就是交集,顯示符合匹配條件的資料 select testa.testb.from testa inner join testb on test.class testb.c...

MySQL內連線 左外連線 右外連線 全外連線

連線的優勢是減少了外來鍵的使用。內連線 最常見的等值連線,指連線結果僅包含符合連線條件的行,參與連線的兩個表都應該符合連線條件。inner join或join on condition 首先建立兩個表person和card,內容如下 select from card id cardname 1 ca...