1. 程式人生 > >記一下數據庫的多表查詢

記一下數據庫的多表查詢

AI 數據庫 https 右連接 nal png 標準 rom post

(安利兩個講得不錯的資源:https://www.cnblogs.com/tilv37/p/5199139.html 和 https://jingyan.baidu.com/article/63acb44acfa95161fcc17e8a.html

稍微講一下背景,現在有個藥材表、基地表、原料去向表,還有個原料去向的關聯表。這個原料去向是這樣的,某個基地中某種藥材的原料去向。也就是說,這個原料去向關聯表和基地還有藥材關聯在一起了。

藥材表:

技術分享圖片

(後面沒有展現的屬性不用理它)

基地表:

技術分享圖片

原料去向表:

技術分享圖片

原料去向關聯表:

技術分享圖片

想要做的是,首頁是藥材,點擊某個藥材進藥材詳情表(基地表),然後再基地表中有個查看原料去向的控件,點擊可以看見:

技術分享圖片

這樣一個表,然後就要用到表的關聯查詢:

怎樣叫做關聯查詢呢?其實就是 本來是兩張表的東西,通過join(先不管是left還是right還是內連接)和一些join的關系,條件變成一張表(可以理解稱臨時表):

技術分享圖片

先來講一下 內連接

就是直接一個join:

SELECT tg.g_name, tm.g_medicinalGone_sale, tm.g_medicinalGone_proportion, tm.g_medicinalGone_price 

FROM t_medicinal_productbase_medicinalgone as tm JOIN t_medicinal_gone as tg on tm.g_medicinalGone_id = tg.id

它的結果是只輸出包含連接條件的數據行:

技術分享圖片

然後是外連接

外連接是不會對數據進行過濾的,就是說滿足連接條件的輸出,不滿足連接條件的它也輸出(沒數據的列或行就輸出默認的空值),可以說外連接只是將兩個表臨時拼接成一個表

外連接有左連接:LEFT JOIN 和右連接: RIGHT JOIN

左右的區別就是以哪個表為基準來拼接兩個表 FROM t1 LEFT JOIN t2——這種就按左邊那個t1為標準,如果這裏是RIGHT JOIN的話,就以右邊那個t2為標準,

下面兩個例子可以很好得看到差別

左連接:(左邊為原料去向關聯表右邊為原料去向表)

SELECT tg.g_name, tm.g_medicinalGone_sale, tm.g_medicinalGone_proportion, tm.g_medicinalGone_price 

FROM t_medicinal_productbase_medicinalgone as tm LEFT JOIN t_medicinal_gone as tg on tm.g_medicinalGone_id = tg.id

技術分享圖片

右連接:(左邊為原料去向關聯表右邊為原料去向表)

技術分享圖片

我們可以看到,因為以右邊的表為基準,所以右邊的行一定要全部顯示,但有些原料去向沒有數據的(沒有屬於哪個基地中的哪個藥材),所以有不符合條件的原料去向,但還是要全部顯示出來。於是就顯示默認的空值Null。

記一下數據庫的多表查詢