目錄
一.內連接與外連接
? ?1.內連接(inner join)
? ?2.外連接(outer join)
二.兩表連接
1.我們先來試試看內連接:
2.我們再來試試外連接
三.單表外連接
四.總結
一.內連接與外連接
? 先得介紹內連接和外連接兩個概念:
? ? ?要將兩張表連接,有兩種方式一種是內連接(inner join),第二種是內連接(outer join)
? ?1.內連接(inner join)
? ? ?這種連接需要:A,B表值都存在情況
? ?2.外連接(outer join)
? ? ?
外連接又分左外連接和右外連接
左外連接是取A表全部,B表沒有對應的值,則為null
右外連接是取B表全部,A表沒有對應的值,則為null
語法:
SELECT 列名
FROM 左表
LEFT JOIN 右表
ON 左表.列名 = 右表.列名;
? ?這樣介紹概念可能還是比較抽象,來看下面的例題:?
二.兩表連接
?例題鏈接:https://leetcode.cn/problems/combine-two-tables/description/
1.我們先來試試看內連接:
select firstname,lastname,city,state
from person,address
where person.personid=address.personid
? ? 我們可以發現輸出結果比答案結果少了一個Allen的數據,我們觀察上面的Person和Address表
我們發現Address表中的personid沒有allen的id,由于內連接是取交集所以Allen沒有被選中。
? ?這就是在前面概念中敘述的:A,B表值都存在情況
2.我們再來試試外連接
select firstname,lastname,city,state
from person left join address
on person.personid=address.personid;
? ? 這樣輸出就對了。
? ? ? ? ?我們可以可以這樣理解外連接,當左外連接時固定住左表,去右表中依據on之后跟的條件去尋找符合條件的行,若是沒尋找到則在那行寫null,即左表原有的數據全部不變,只是通過右表擴充列。 right join 則反之。
? ? ? 這就是前面說的:左外連接是取A表全部,B表沒有對應的值,則為null
三.單表外連接
? ? 例題鏈接:https://leetcode.cn/problems/rising-temperature/description/
? ? ?單表外連接用于檢索一個表中的所有數據
?
這題用內連接也能做出來,但是消耗的時間比外連接高太多了
上面時內連接,下面時外連接
所以我們直接來講怎么用外連接解決這題:
select w1.idfrom weather w1left join weather w2on datediff(w1.recordDate, w2.recordDate) = 1 #把每一天與前一天連接where w1.temperature > w2.temperature #where 選擇下溫度大的
所以在有的時候用left join可以優化計算時間
四.總結
??
? ? ? ?內連接和外連接都是用于連接多個表的查詢操作。內連接是指只返回兩個表中符合條件的行,而外連接則會返回符合條件的行以及不符合條件的行。
? ? ? 當需要查詢兩個表中有關聯的數據,并且只想返回符合條件的數據時,應該使用內連接。內連接可以通過使用JOIN關鍵字或者WHERE子句來實現。
? ? ? ?當需要查詢兩個表中有關聯的數據,并且希望返回符合條件的數據以及不符合條件的數據時,應該使用外連接。外連接可以分為左外連接、右外連接和全外連接,分別表示返回左表中的所有數據、返回右表中的所有數據以及返回兩個表中的所有數據。
? ? ? ?因此,根據查詢需求來選擇使用內連接或外連接,可以更有效地獲取所需的數據。