聯接與匹配
複習內外聯接、ON與WHERE、補NULL行、卡id計數及相關NOT EXISTS。
先數匹配行對,再讀報表。
本節數六道給定SQLite 3.53.4任務的匹配結果,不是專業等級、百分位、僱主門檻或資格。任何正確數都能讀全部解析與四份完整指南。
一個隊伍可以匹配多張卡
輸入有三隊四卡:一隊匹配兩張、一隊一張、最後無卡,另有隊id為NULL的卡。這些明確倍數決定答案。內聯接數匹配行對,左聯接可為無匹配隊補NULL行;先畫實際行對,再加篩選或分組。
右側IS NULL條件可以保留未匹配行
新不計分例左id為1、2,右表主鍵91行匹配左1;左聯接後WHERE r.rid IS NULL,只留左2。它就是有意保留未匹配行的右側WHERE條件,因此“任何此類條件都使左聯接像內聯接”的規則過寬。
區分隊伍與聯接行對
一隊兩卡合理地產生兩條聯接行,並不自動是該用DISTINCT修的錯,正確粒度由問題決定。本題有的問聯接行數,有的問每隊一條分組數。左聯接保留未匹配左行,不保留所有未匹配右行;給定等號下NULL隊id卡不參與匹配。
比較兩條完整條件
WHERE中的分數比較在補NULL行上不為真,因此排它;同一比較放ON則先改變卡匹配,再補無匹配隊,數量隨之不同。脫離報表需求,兩位置誰都非永遠正確;先說應保留哪些隊、哪些卡合格,再決定位置。
數真實卡id或測試是否有匹配行
COUNT(c.cid)忽略補行NULL卡id,所以無卡隊雖有一條聯接行,分組卡數仍為零。NOT EXISTS問相關匹配查詢是否有行,不數有卡隊共有幾卡。二者分開,核分組數時別把非NULL卡id換成無關可空列。
先添一個匹配,再改查詢
在可丟棄記憶體例用虛構id,預測內、左聯接後,只為一個左id添一條右匹配,先數新行對再聚合。然後比較排NULL的WHERE、ON與IS NULL,並在結果旁寫目標粒度。網站只顯示所給SQL文本,不需生產表或客戶記錄。
正確數不建立報表工作能力
六個匹配結果可提示覆習主題,但不建立大型聯接正確、報表對賬或生產查詢高效的結論。讀解析後換新資料;題組固定,按宣告SQLite環境核驗,無校準開發者檔、招聘線或資格,任何正確數都可看全文。
回顧:可空業務欄位不能單獨證明未匹配
新例左表l(id INTEGER PRIMARY KEY)含1、2;右表r(rid INTEGER PRIMARY KEY,lid INTEGER,score INTEGER)僅含(81,1,NULL)。按r.lid=l.id左聯接,WHERE r.score IS NULL會同時保留左1與左2:前者有真實匹配但score缺失,後者是補NULL行。把條件改為r.rid IS NULL才只保留左2,因為真實匹配行的rid是非NULL主鍵。先標真實行對再標補行,別把“某業務值缺失”直接當“沒有匹配”。兩條查詢已在SQLite 3.53.4記憶體庫核對,是不計分新例。
分項複習指南
統計匹配結果,不派開發者檔位
匹配答案計一道正確,其他有效選擇計零;每組六題,合計/24。全部有效選擇前不顯示個人正確數,無時間權重、部分分或默補缺答。4/6只是所給任務四個匹配結果,無百分位、招聘通過分或資格。
保留完整設定與逐題解釋
結果保留每段原創設定、最後語句、所選、答案及解析,零分、部分答對、全對均給四份全文。行列分隔只是顯示約定,不是額外返回值。核錯題要追蹤實際輸入及子句;公開指南給完整複習內容,不給個人成績。
宣告SQLite環境與有限輸入
每題用獨立全新SQLite 3.53.4記憶體庫和虛構輸入核驗,不是生產資料庫。方言、設定、約束、併發行為可不同,題組不建立跨引擎相同行為,也不評查詢調優、管理或真實報表。無計時,約十二分鐘是編輯估計,重測重複固定題組。
原創資料、查詢與解析
費馬編寫表資料、問題、干擾項、解析及指南,連結文件支援選定規則,不搬其例子或專有招聘題。本獨立練習無廠商背書或認證。程式碼按轉義文本顯示,選擇在本地核對,不執行訪問者查詢或發給所連資料庫。

