正在準備內容……

SQL 測驗

免費練習24道原創SQL結果判斷題,完整列出表結構與資料。按SQLite 3.53.4核驗,檢視篩選、聯接、聚合、視窗與約束解析及四篇完整指南;不用註冊,不計時。

24 題 · 約 12 分鐘 · 無需註冊原創練習題 · 逐題解析與複習指南免費

每題視為全新SQLite 3.53.4資料庫,先依次執行所示CREATE/INSERT設定,再核註釋後的最後語句。SELECT答案以|分列、;分行,不含表頭,NULL表示資料庫NULL,多行查詢明確輸出順序。兩道被拒INSERT選擇約束結果,不當作行集。兩語英文標識及值相同,說明解析雙語。無計時或速度獎勵,24題有效選擇後才給個人正確數。若查資料,按該條件理解。

本版SQL 測驗提供24道原創四選一題,每題完整列出CREATE TABLE、輸入行和最後語句,按全新SQLite 3.53.4記憶體庫核驗。四組六題覆蓋篩選與NULL、聯接與匹配、分組與聚合、視窗與約束;22條SELECT返回結果,另兩條INSERT觸發題給約束。完成後檢視0–24總正確數、四項0–6正確數、全部所選與逐題解析,四篇各七節完整指南在作答前後均可閱讀。適合練習有限輸入下的查詢推導,網頁不執行訪問者SQL或連線資料庫,不產生開發者檔位、招聘通過線或認證。

SQL 測驗練什麼?先讀資料庫、輸入與目標語句

本頁24道原創四選一題各自列明表定義、輸入行和最後要判斷的SQL。四組六題分別覆蓋篩選與NULL、聯接與匹配、分組與聚合、視窗與約束;22題判斷SELECT返回內容,另兩題判斷INSERT是否因約束被拒。它練習從給定資料推導結果,不要求連線資料庫、上傳檔案或在網頁輸入可執行SQL。

逐題按全新SQLite 3.53.4記憶體庫核驗,不能把前一道題留下的行帶入下一題。答案使用豎線分列、分號分行,NULL表示資料庫缺失值,不把表頭計入資料行。先確認問的是行集、聚合後的一行,還是失敗語句;同樣一個“0”與“沒有返回行”可能是不同答案。

篩選與NULL:只保留條件為真的行

WHERE保留條件為真的行,條件為假或NULL時不保留。普通等號與NULL比較不提供“這個值缺失”的判斷,應區分IS NULL;BETWEEN在本題數值條件中包含上下界。[1][2] 先逐行寫條件結果,再計算保留的id或數量,不要把NULL當作零或字串“NULL”。

獨立新例:samples四行(id,v)為(1,NULL)、(2,0)、(3,5)、(4,5)。WHERE v IS NULL只留id1;WHERE v=NULL沒有保留行;WHERE v BETWEEN 0 AND 5按id排序返回2、3、4。兩條值為5的行都保留,篩選本身不自動去重。若最後改成COUNT(*),應再把保留行數彙總成一行結果。

聯接:先數匹配行對,再看篩選與統計粒度

一個左錶行匹配多個右錶行時,聯接會產生多行,不應先假定那是重複錯誤。LEFT JOIN還為未匹配左行保留補NULL的行;ON決定匹配,WHERE隨後對結果篩選,因此移動條件可能改變輸出。[1] “每個物件一行”“每個匹配一行”和“每組統計一行”是不同結果粒度。

獨立新例:racks有10、20、30三行;pieces有(id,rack,n)=(1,10,4)、(2,10,9)、(3,20,2)。按rack=id內聯接得到3行,左聯接4行。把p.n>=8放WHERE只剩1行;放ON則保留3行,其中20、30補NULL。WHERE p.id IS NULL可有意找出未匹配的30,所以“右側WHERE總會去掉所有未匹配行”並不成立。

聚合與分組:分清行、非NULL值和組

COUNT(*)數行,COUNT(v)數非NULL值;SUM(v)對非NULL輸入求和。沒有可加輸入時,SQLite的SUM返回NULL,而COUNT(*)仍可返回0。[3] GROUP BY與HAVING進一步改變統計單位:先明確哪些行進組,再判斷各組是否滿足條件,不能把組條件直接當成單行篩選。

繼續使用新例samples:SELECT COUNT(*),COUNT(v),SUM(v)返回4|3|10;加WHERE v>9後返回0|0|NULL。另設ledger為(U,2)、(U,7)、(V,NULL)、(V,6):HAVING SUM(v)>=8僅留U總額9;若改成WHERE v>=6再分組,則U為7、V為6。兩種查詢針對不同問題,不是可以任意替換的“最佳化寫法”。

視窗函式:編號、並列名次與最終排序分別看

ROW_NUMBER給視窗內各行不同序號;RANK對同組並列後留出名次間隔,DENSE_RANK不留間隔。決定哪些行並列的是視窗ORDER BY,外層ORDER BY另行控制返回順序;給排名額外加id也可能改變並列關係。[4] 讀題時把視窗排序鍵和最終排序鍵分開寫。

獨立新例ranks的(id,score)為(1,30)、(2,30)、(3,18)、(4,6)。只按score降序排名,RANK依id為1、1、3、4,DENSE_RANK為1、1、2、3。ROW_NUMBER按score降序再id編號、最後按id降序顯示時,返回4|4; 3|3; 2|2; 1|1。顯示順序反轉,不會重新分配視窗編號。

視窗框架與CTE:明確當前行之前有哪些輸入

累計值不僅取決於排序,也取決於框架。題本明確使用ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW時,就按逐行範圍累計,不擅自換成預設框架。[4] CTE給中間查詢命名;判斷外層WHERE時,要先看視窗是否已經在內層對全體行計算,不能把外層條件提前代入。

繼續用ranks新例,按id和上述ROWS框架累加score,依次為30、60、78、84。若先給全部四行排名,再由外層取id3,它的RANK是3;這與先篩到只有id3、再對剩餘一行排名不同。複習時畫出中間行集,分別標註“先算什麼”“後篩什麼”,不要把SQL關鍵字的書寫順序當作全部語義。

約束結果:UNIQUE、NOT NULL與衝突處理

普通INSERT重複已有非NULL唯一值,會觸發本題UNIQUE約束;給明確NOT NULL列寫資料庫NULL也會失敗。SQLite在這裡對UNIQUE允許多個NULL,兩種約束不能互相替代。[5] 本題未指定OR IGNORE或OR REPLACE,不能為了得到預期行數自行補衝突策略。

獨立新例:CREATE TABLE tags(v TEXT UNIQUE)後依次插入兩條NULL,COUNT(*)為2;若已有文本x,再普通插入x,則UNIQUE失敗;另一表宣告v TEXT NOT NULL後插NULL,NOT NULL失敗。失敗題問的是最後一條語句,不要求推測完整應用事務、之前所有語句是否回滾或其他會話看到什麼。

正確數與完整複習:24題、四項記錄和28節指南

每題匹配答案鍵得1,其他有效選擇得0;四組六題,總正確數0–24,不計時或按速度加權。兩組新記錄[2,5,4,3]與[5,2,3,4]同為14,卻需要不同複習順序。先看所選答案、完整輸入和逐題解析,再定位漏看NULL、聯接倍數、篩選階段或視窗排序的具體位置。

任何正確數都能閱讀全部24題解釋和四篇各七節的完整指南。可先獨立寫出預期結果,再在可丟棄的本地記憶體庫復算;每次只改一行或一條條件,解釋結果變化。網頁本身只處理選項,不執行你輸入的SQL,也不需要真實業務資料。固定題本重做會受記憶影響,不能直接作為陌生任務進步的證明。

SQL方言與證據範圍:執行正確不等於職業認證

本版已按宣告SQLite版本逐題核對22個SELECT結果與兩項預期約束失敗;這些執行記錄可支援所給程式結果的核驗。不同引擎、版本、排序規則、資料型別和配置仍可能影響語義,官方文件也需要與實際環境對照。[1][2][3][4][5] 本題沒有測資料庫管理、生產查詢調優、許可權設計或併發事務。

中英文保持相同英文表名、資料值、語句和答案鍵,說明與解析雙語,但尚無跨語言測量等值或對應人群常模研究。結果提供複習線索,不換算專業等級、百分位、招聘通過分或廠商資格。若為某場面試或考試準備,應另核其資料庫方言、是否現場寫查詢、時限與評分方式。

分項複習指南

  • 篩選與NULL

    複習數值和區域篩選、IS NULL、NULL等號比較、包含兩端的BETWEEN及COALESCE後備值。

  • 聯接與匹配

    複習內外聯接、ON與WHERE、補NULL行、卡id計數及相關NOT EXISTS。

  • 分組與聚合

    複習行數與值計數、分組求和、HAVING、篩選後總額、去重計數及外層最大值。

  • 視窗與約束

    複習ROW_NUMBER、排名並列、累計總額、篩選CTE及兩種明確的INSERT約束失敗。

計分方法與使用範圍

統計匹配結果,不派開發者檔位

匹配答案計一道正確,其他有效選擇計零;每組六題,合計/24。全部有效選擇前不顯示個人正確數,無時間權重、部分分或默補缺答。4/6只是所給任務四個匹配結果,無百分位、招聘通過分或資格。

保留完整設定與逐題解釋

結果保留每段原創設定、最後語句、所選、答案及解析,零分、部分答對、全對均給四份全文。行列分隔只是顯示約定,不是額外返回值。核錯題要追蹤實際輸入及子句;公開指南給完整複習內容,不給個人成績。

宣告SQLite環境與有限輸入

每題用獨立全新SQLite 3.53.4記憶體庫和虛構輸入核驗,不是生產資料庫。方言、設定、約束、併發行為可不同,題組不建立跨引擎相同行為,也不評查詢調優、管理或真實報表。無計時,約十二分鐘是編輯估計,重測重複固定題組。

原創資料、查詢與解析

費馬編寫表資料、問題、干擾項、解析及指南,連結文件支援選定規則,不搬其例子或專有招聘題。本獨立練習無廠商背書或認證。程式碼按轉義文本顯示,選擇在本地核對,不執行訪問者查詢或發給所連資料庫。

常見問題

採用哪個SQL方言與輸入?

每題按SQLite 3.53.4全新記憶體庫核過,只用所示結構及虛構行,設定後核最後語句。這是明確環境,不聲稱所有SQL引擎設定相同。

選項怎樣顯示查詢返回行?

豎線分列、分號分行,不數表頭,NULL表示資料庫NULL,多行查詢宣告順序。兩道約束題問最後INSERT是否被拒,不把它當SELECT行。

需要資料庫賬戶或在此執行SQL嗎?

不用。讀所給表和語句再選結果,無訪問者SQL執行、私庫連線或檔案上傳。兩語程式碼與值相同,說明解析雙語。

全部答案及四份完整指南免費嗎?

是。完整有效作答後,不論正確數都給每個所選、答案及解析,開測前也可讀四份公開全文,不要求電子郵件、註冊、付款或購買證書。

正確數表示專業水平嗎,有計時嗎?

只統計固定原創題組匹配結果,無專業檔位、常模、僱主門檻或資格。無計時及速度獎勵,約十二分鐘是編輯估計。看答案重測可提高記憶,不證明遷移。

可以儲存或分享什麼?

答案留在瀏覽器,可選標籤頁草稿24小時失效,完成、退出清除或重測時刪,未存則重新整理丟進度。分享只有公開練習連結,不含答案、正確數、查詢提交或私有標識。

SQL 測驗是現場寫查詢,還是讀程式碼選結果?

本版是讀所給表與SQL後四選一,不提供訪問者SQL執行。題中設定與資料完整列出,能練結果推導,但不等同於從需求獨立編寫或調優查詢。

NULL、零和字串NULL有什麼區別?

NULL是資料庫缺失值,零是數值,帶引號的NULL可為文本。應按題面型別與表示式判斷;測試缺失用IS NULL,而不是假定= NULL會匹配缺失行。[2]

LEFT JOIN的WHERE條件一定會變成內聯接嗎?

不一定。拒絕補NULL行的條件可能去掉未匹配左行,但IS NULL等條件可以有意保留它們。要根據具體謂詞和目標粒度判斷,不能只憑條件寫在右側列上就下結論。[1]

COUNT(*)為0是否表示沒有返回行?

不一定。沒有GROUP BY的計數聚合可對空輸入返回一行,裡面的計數是0;普通選擇空輸入則可能沒有返回行。先讀最後SELECT表示式及分組結構。[1][3]

視窗ORDER BY可以替代最終ORDER BY嗎?

不能這樣預設。視窗排序用於相應函式的編號、排名或框架計算,最終返回順序由外層排序決定。本題多行結果明確排序;應分別核對兩處鍵及並列處理。[4]

為什麼UNIQUE列的NULL不一定觸發唯一約束?

在本題SQLite環境下,UNIQUE把NULL與其他值、包括其他NULL區別處理;限制缺失需要另看NOT NULL宣告。不要把該規則自動推廣到所有資料庫或其他約束形式。[5]

可以把結果換算成MySQL、PostgreSQL或認證考試分數嗎?

不能。題本、環境、題型、計時與評分不同,也沒有連結或等值研究。可以複習相關概念,正式準備以目標考試或職務的實際要求為準。

重測提高,是否已經證明SQL工作能力提升?

不能僅據固定題本正確數判斷。看過答案、記憶、查資料和閱讀方式都可能改變結果。可換資料或需求做獨立新任務,再結合真實工作證據回顧;本版不設職業能力等級。

參考資料