您好,登錄后才能下訂單哦!
這篇文章主要介紹“MySQL中JOIN連接的基本用法有哪些”,在日常操作中,相信很多人在MySQL中JOIN連接的基本用法有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”MySQL中JOIN連接的基本用法有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
join 是指 將兩個表連接起來,兩個表分別為 驅動表 和 被驅動表。
我們拿下面的這個sql舉例,
select t1.id,t2.id from t1 inner join t2 on t1.id = t2.id where t1.id > 10;
t1和t2 都對 id 建立了索引,我們假設 t1 是驅動表,t2是被驅動表。
join流程如下:
1、MySQL每次從t1中讀取一行滿足過濾條件t1.id>10的記錄,如果有索引的話,就利用索引快速定位到表t1中符合t1.id>10的記錄。如果沒有索引的話,就從頭到尾遍歷,慢慢的查出表t1中符合t1.id>10的記錄。
2、當從t1中讀取到一條記錄r1后,就根據連接的條件,也就是 on關鍵字后的條件,去t2中對應的t2中的記錄,將t1的記錄和t2的記錄組合返回給客戶端.
具體的說就是,當從t1中得到一條記錄r1的時候,需要根據連接條件 t1.id = t2.id,也就是去t2中查詢是否存在記錄r2 ,其中r2.id = r1.id。
也就是執行 select t2.id from t2 where t2.id = r1.id
如果有t2的id有索引的話,那么查詢速度是很快的,否則就只能全盤掃描了。
3、就這樣,依次的讀取t1中符合條件的記錄,然后查詢t2,直到t1中的記錄讀取完畢
從上述流程可以看出,join的大致過程就是從驅動表中挨個讀取符合條件的記錄,然后根據連接條件到被驅動表中找出符合條件的記錄,將其組合到一起返回給客戶端。
JOIN用于連表查詢,主要有5種用法。下面分別演示這5種用法
隨便建2張表,結構如下
字段col1用來使兩張表有一個同名字段的(但其實沒什么用,因為查詢條件都需要用ON來指定,這里只是說明一下如果有相同的字段名也沒什么影響)
CROSS JOIN使兩張表的所有字段直接進行笛卡爾積,假設表1有m條數據,表2有n條數據,則結果數量為m*n條
SELECT * FROM tab1 CROSS JOIN tab2
結果
內連接需要用ON來指定兩張表需要比較的字段,最終結果只顯示滿足條件的數據
SELECT * FROM tab1 INNER JOIN tab2 ON tab1.id1 = tab2.id2
結果
注意到內連接只把滿足ON條件的數據相連接,與笛卡爾積不同
左連接可以看做在內連接的基礎上,把左表中不滿足ON條件的數據也顯示出來,但結果中的右表部分中的數據為NULL
SELECT * FROM tab1 LEFT JOIN tab2 ON tab1.id1 = tab2.id2
結果
右連接就是與左連接完全相反
SELECT * FROM tab1 RIGHT JOIN tab2 ON tab1.id1 = tab2.id2
結果
全連接就是左連接和右連接的并集,但是MySQL中并不支持全連接的寫法
SELECT * FROM tab1 OUTER JOIN tab2 ON tab1.id1 = tab2.id2
不過可以用UNION聯合左連接和右連接的結果來代替
SELECT * FROM tab1 LEFT JOIN tab2 ON tab1.id1 = tab2.id2 UNION SELECT * FROM tab1 RIGHT JOIN tab2 ON tab1.id1 = tab2.id2
結果
到此,關于“MySQL中JOIN連接的基本用法有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。