溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql 中怎么實現(xiàn)外連接

發(fā)布時間:2021-08-04 14:59:08 來源:億速云 閱讀:184 作者:Leah 欄目:數(shù)據(jù)庫

這篇文章將為大家詳細講解有關mysql 中怎么實現(xiàn)外連接,文章內(nèi)容質(zhì)量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

首先my sql 不支持oracle的(+) 

內(nèi)連接: 只連接匹配的行
左外連接: 包含左邊表的全部行(不管右邊的表中是否存在與它們匹配的行),以及右邊表中全部匹配的行
右外連接: 包含右邊表的全部行(不管左邊的表中是否存在與它們匹配的行),以及左邊表中全部匹配的行
全外連接: 包含左、右兩個表的全部行,不管另外一邊的表中是否存在與它們匹配的行。
交叉連接  生成笛卡爾積-它不使用任何匹配或者選取條件,而是直接將一個數(shù)據(jù)源中的每個行與另一個數(shù)據(jù)源的每個

行都一一匹配

舉個例子吧。
表A
id   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
查詢結(jié)果為:
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
查詢結(jié)果為:
name     address
張     北京
王     上海
NULL     南京

排他性:A,B表中至少有1個匹配時,才返回行。兩表的交集
SQL語句如下:
select A.name,B.address from A
inner join B
on A.id = B.A_id

查詢結(jié)果為:
name     address
張     北京
王     上海
inner join  內(nèi)連接等價于下面的sql:
SELECT A.name, B.address
FROM A, B
WHERE A.id = B.A_id

注釋:全外連接返回參與連接的兩個數(shù)據(jù)集合中的全部數(shù)據(jù),無論它們是否具有與之相匹配的行。在功能上,它等價于

對這兩個數(shù)據(jù)集合分別進行左外連接和右外連接,然后再使用消去重復行的并操作將上述兩個結(jié)果集合并為一個結(jié)果集

。(full join 或 full outer join )
SQL語句如下:
select * from A
full join B
查詢結(jié)果為:
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
查詢結(jié)果為:
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  內(nèi)連接等價于下面的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 中怎么實現(xiàn)外連接就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權內(nèi)容。

AI