Mysql的多表查詢,一看就會!

2021-09-24 22:39:33 字數 2028 閱讀 6146

1.隱式內連線

/*

隱式內連線在開發過程中不建議使用,因為效率較低

這裡只是提供一種解決思路

*/select 字段列表 from 表a,表b where 條件;

簡單說明:隱式內連線相對於單錶查詢,只是將表a後面新加了乙個表b,但是注意一點,如果where後面的條件沒有判斷兩表之間關聯的字段的話,會發生迪卡爾積。就會有很多錯誤的查詢結果

2.顯示內連線

/*

內連線推薦使用,但實際開發過程還是選擇外連線

*/select 字段列表 from 表a inner join 表b on 條件;

總結:內連線的多表查詢,條件通常是將兩表的主鍵以及外來鍵字段用=號來進行篩選。否則會出現迪卡爾積的現象,就是例如表a中有5條資料,表b中有3條資料,則查出來的結果為15條資料,會產生多餘的錯誤資料。所以通常都是以表a外來鍵 = 表b主鍵這樣的方式來進行篩選。內連線的篩選後的結果為兩表的乙個交集資料,例如表a資料:1,2,3;表b資料3,4,5;則篩選後的結果為3。

1.左外連線

/*

左外連線使用到的關鍵字是left outer join

見名識意

*/select 字段列表 from 表a left outer join 表b on 條件;

簡單說明:此處的 outer也是可以省略的,但是以上面的簡述為準,不建議省略。於前兩個語句同理,條件是篩選兩表之間正確的資料的。左外連線,舉個小案例:表a資料:1,2,3;表b資料3,4,5;則篩選後的結果為1,2,3。從這裡已經可以看出來了,左外連線的特點了吧!是將兩表之間篩選後的所有表a欄位的資料都查詢出來,其中包含交集部分。表a中沒有對應的表b資訊為以null顯示。

2.右外連線

/*

右外連線使用到的主要關鍵字是right outer join

*/select 字段列表 from 表a right outer join 表b on 條件;

簡單說明:與左外連線語法上的差別就是將left換成了right,右外連線的查詢結果與左外連線的結果恰恰相反,是將兩表之間篩選後的所有表b欄位的資料都查詢出來,其中包含交集部分。表b中沒有對應的表a資訊為以null顯示。

1.子查詢結果為單行單列

/*

子查詢的結果為單行單列的情況 */

select 字段列表 from 表a where 表a.欄位 = (select 聚合函式 from 表b wehre 條件);

簡單說明:子查詢結果為單行單列的用法就是將乙個查詢語句查詢出來結果集之後,作為另外一條查詢語句的判斷條件。

2.子查詢結果為多行單列

/*

子查詢的結果為多行單列的情況

*/select 字段列表 from 表a where 表a.欄位 in (select 字段 from 表b wehre 條件);

簡單說明:多行單列的情況下的話,是相當於有同乙個欄位的多個值 ,所以在這裡其實也是相當於做乙個條件判斷,只不過是作為條件。它的值有多個,不能直接進行條件判斷,需要使用到in。in的意思就是將括號內的多個字,只要有乙個符合的,就會進行篩選,直到篩選表a完畢。

3.子查詢的結果為多行多列

/*

子查詢的結果為多行多列的情況

*/select 字段列表 from 表a,(select 字段列表 from 表b whrer 條件) as 表b where 條件;

簡單說明:子查詢的結果為多行多列的話,那麼它呈現的表現形式就是一張表。既然它是一張表的話,它的用途就行明顯了。對的!就是將它作為一張表,和另外一張表再進行篩選。這裡需要注意的一點是:把錶b作為虛擬表的話,如果後續需要引用的話是非常的麻煩的,所以一定要給它起乙個別名,方便我們在另外位置使用。

正則基礎(一看就會)

正則 1.什麼是正則 正規表示式 規則表示式 regular expression 正則其實就是描述了一套規則,本質是操作字串。2.正則是幹什麼的?操作字串的 1 模式匹配 表單驗證 2 文字檢索 3 替換3.正則的好處 為什麼用它 簡單,方便 效能極高4.字串方法都有哪些 substring 開始...

紅黑樹 一看就會

red black tree是自平衡 非絕對平衡 的二叉查詢樹 先嘗試recolor,置色紅黑 再嘗試rotation 旋轉 插入新節點,標紅,如果為根節點,則標黑 如果不是根節點,且其parent是紅,uncle是紅 插入新節點,標紅,如果為根節點,則標黑 如果不是根節點,且其parent是紅,u...

一看就會的PhotonServer使用入門(二)

在上回 一看就會的photonserver使用入門 一 中,說了服務端的建立,這回就說客戶端的建立。在 photonserver的目錄說明 裡,說了 photon3dotnet.dll 是客戶端庫,其實還忘說了一點 photon3unity3d.dll 也是客戶端庫。using exitgmes.c...