leftjoin多表联合查询_leetcode-sql练习精讲系列文章——一、多表如何连接
這是一個系列文章,涵蓋了SQL最常用的知識點。題目來自于leetcode的sql題,文章列出了問題-完整解析-答案-知識點拓展-BAT等大廠面試真題。希望能幫你全方位的弄懂。有問題可以留言,碼字不易,寫一篇要好幾個小時,希望能得到點贊收藏哦。
一、問題
現有兩張表,一張名為”學生”表,包含學生編號,學生姓名,出生年月,性別。一張名為“成績”表,包含了學生選修的課程,以及對應課程的成績。 兩表通過“學號”進行關聯。
現在要求查出每一位學生的信息,包括學生編號,學生姓名,課程和成績信息。
二、數據準備
create三、解答
【解題思路】
- 1.明確題目要求的結果
根據題干要求的所有學生的信息姓名,學號,課程和成績信息。我們知道:“學號”、“姓名”,保存在“學生”表里,“課程”、“成績”在“成績”表里,所以需要進行多表查詢。
- 2.確定連接方式
注意題干中的要求所有的學生,有可能學生有注冊信息但沒有課程成績信息,所以以學生表作為主表。考察的知識點為表連接中的外連接中的左連接或是右連接。
- 3.確定連接兩表的主鍵
兩個表都有“學生編號”,所以聯結條件為學生編號。
問:如果問題為查找有成績信息的同學的信息包括學生編號,學生姓名,課程和成績信息。改如何寫?
[代碼]
#[本題解答]
有兩張表,編寫一個 SQL 查詢,滿足條件:無論 person 是否有地址信息,都需要基于上述兩表提供 person 的以下信息:
FirstName【思路】
從題目看出,表1(Person)是人的姓名信息,表2(Address)是人的地址信息。
1)題目要求的結果是兩個表里的信息,所以需要多表查詢
2)有的人沒有地址信息,所以要求查所有人就需要保留表1的全部數據,使用左連接
3)兩個表聯結條件:兩個表通過personId產生聯結。
【參考答案】
select FirstName, LastName, City, State from Person left join Address on Person.PersonId = Address.PersonId四、基礎知識點
我們復習下基礎知識:表的連接方式有:
- 內連接:被連接表中的所有列,包括其中的重復列。
- 外連接: 左連接、右連接和全連接。
- 左連接:返回左表中的所有行,如果左表中行在右表中沒有匹配行,則結果中右表中的列返回空值。
- 右連接:恰與左連接相反,返回右表中的所有行,如果右表中行在左表中沒有匹配行,則結果中左表中的列返回空值。
- 全連接:返回左表和右表中的所有行。當某行在另一表中沒有匹配行,則另一表中的列返回空值。
- 交叉連接 :也稱迪卡爾積。不帶WHERE條件子句,它將會返回被連接的兩個表的笛卡爾積,返回結果的行數等于兩個表行數的乘積,如果帶where,返回或顯示的是匹配的行數。
? (注:圖中使用顏色表示兩表關聯)
五、大廠真題試練
螞蟻金服面試真題: sql中過濾條件放在on和where中的區別
我們知道on和where是篩選條件,那么具體區別是什么?我們分開看下。
- inner join: 結果沒有區別,前者是先求笛卡爾積然后按照on后面的條件進行過濾,后者是先用on后面的條件過濾,再用where的條件過濾。
- left join、right join:使用left join(right join)時on后面的條件只對右表(左表)有效。
join過程可以這樣理解:where的執行順序在join之后,on執行在join之中。由于join要求索引列保留,所以對于left join來說on對右表生效。
總結
以上是生活随笔為你收集整理的leftjoin多表联合查询_leetcode-sql练习精讲系列文章——一、多表如何连接的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 理财中低风险是几级?中低风险理财会亏吗
- 下一篇: 高位缓释什么意思?金融风险转向高位缓释