2025年sql筆試考試題及答案_第1頁
2025年sql筆試考試題及答案_第2頁
2025年sql筆試考試題及答案_第3頁
2025年sql筆試考試題及答案_第4頁
2025年sql筆試考試題及答案_第5頁
已閱讀5頁,還剩9頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

2025年sql筆試考試題及答案一、單項選擇題(每題2分,共20分)1.以下關(guān)于事務(wù)ACID特性的描述,錯誤的是()A.原子性(Atomicity)要求事務(wù)中的操作要么全部完成,要么全部不完成B.一致性(Consistency)確保事務(wù)執(zhí)行后數(shù)據(jù)庫從一個有效狀態(tài)轉(zhuǎn)移到另一個有效狀態(tài)C.隔離性(Isolation)指多個事務(wù)并發(fā)執(zhí)行時,每個事務(wù)感覺不到其他事務(wù)的存在D.持久性(Durability)要求事務(wù)提交后,數(shù)據(jù)變更僅保留在內(nèi)存中直至下次重啟答案:D(持久性要求變更必須持久化到存儲設(shè)備,而非僅內(nèi)存)2.某表結(jié)構(gòu)為`user_info(user_idINTPRIMARYKEY,usernameVARCHAR(50),reg_timeDATETIME,last_loginDATETIME)`,需查詢2024年1月1日之后注冊且最近一次登錄在2024年12月31日之后的用戶,正確的WHERE子句是()A.WHEREreg_time>'2024-01-01'ANDlast_login>'2024-12-31'B.WHEREreg_time>='2024-01-01'ORlast_login>='2024-12-31'C.WHEREreg_timeBETWEEN'2024-01-01'AND'2024-12-31'D.WHEREreg_time>'2024-01-01'ORlast_login>'2024-12-31'答案:A(需同時滿足兩個條件,用AND連接)3.以下關(guān)于索引的說法,正確的是()A.主鍵索引一定是唯一索引,但唯一索引不一定是主鍵索引B.為所有列添加索引可以最大程度提升查詢性能C.復(fù)合索引的順序不影響查詢效率,只需包含查詢條件中的列即可D.索引會完全避免全表掃描答案:A(主鍵自動創(chuàng)建唯一索引,唯一索引允許NULL且可有多列,主鍵不允許NULL且唯一)4.執(zhí)行`SELECTCOUNT(),COUNT(user_id)FROMorder_infoWHEREuser_idISNULL`,假設(shè)表中有10條user_id為NULL的記錄,其他字段無NULL,結(jié)果為()A.10,10B.10,0C.0,10D.0,0答案:B(COUNT()統(tǒng)計所有行,COUNT(user_id)統(tǒng)計user_id非NULL的行,此處user_id全為NULL,故為0)5.對于表`employee(dept_idINT,salaryDECIMAL)`,需查詢各部門平均工資高于全公司平均工資的部門,正確的SQL是()A.SELECTdept_id,AVG(salary)FROMemployeeGROUPBYdept_idHAVINGAVG(salary)>(SELECTAVG(salary)FROMemployee)B.SELECTdept_id,AVG(salary)FROMemployeeGROUPBYdept_idWHEREAVG(salary)>(SELECTAVG(salary)FROMemployee)C.SELECTdept_id,AVG(salary)FROMemployeeWHEREAVG(salary)>(SELECTAVG(salary)FROMemployee)GROUPBYdept_idD.SELECTdept_id,AVG(salary)FROMemployeeGROUPBYdept_idHAVINGAVG(salary)>AVG(salary)答案:A(HAVING子句用于過濾分組后的聚合結(jié)果,子查詢獲取全公司平均工資)6.以下關(guān)于窗口函數(shù)的說法,錯誤的是()A.窗口函數(shù)使用OVER()子句定義窗口范圍B.ROW_NUMBER()會為相同值的行分配不同的序號C.RANK()在相同值的行后會跳過序號(如1,1,3)D.DENSE_RANK()在相同值的行后不會跳過序號(如1,1,2)答案:C(RANK()相同值行序號相同,后續(xù)序號跳過,如1,1,3;DENSE_RANK()不跳過,如1,1,2)7.表`orders(order_idINT,user_idINT,order_timeDATETIME,amountDECIMAL)`,需查詢每個用戶最近一次下單的訂單金額,正確的SQL是()A.SELECTuser_id,amountFROM(SELECTuser_id,amount,ROW_NUMBER()OVER(PARTITIONBYuser_idORDERBYorder_timeDESC)ASrnFROMorders)tWHERErn=1B.SELECTuser_id,MAX(amount)FROMordersGROUPBYuser_idC.SELECTuser_id,amountFROMordersWHEREorder_time=MAX(order_time)GROUPBYuser_idD.SELECTuser_id,amountFROMordersGROUPBYuser_idHAVINGorder_time=MAX(order_time)答案:A(通過窗口函數(shù)按用戶分區(qū)并按時間倒序排序,取序號1的記錄)8.以下哪種JOIN操作會返回左表所有記錄,右表匹配的記錄,若右表無匹配則用NULL填充?()A.INNERJOINB.RIGHTJOINC.LEFTJOIND.FULLOUTERJOIN答案:C(LEFTJOIN保留左表所有行,右表無匹配時右表字段為NULL)9.執(zhí)行`UPDATEuserSETage=age+1WHEREgender='男'`時,若表中存在3條gender為'男'的記錄,其中1條age為NULL,最終這3條記錄的age值分別為()A.NULL+1(報錯),原age+1,原age+1B.NULL,原age+1,原age+1C.1,原age+1,原age+1D.0,原age+1,原age+1答案:B(NULL與任何數(shù)值運算結(jié)果仍為NULL,故原age為NULL的記錄更新后仍為NULL)10.以下關(guān)于索引失效的場景,錯誤的是()A.查詢條件使用函數(shù)(如WHEREYEAR(reg_time)=2024)B.復(fù)合索引的左列未被使用(如索引(age,name),查詢條件為WHEREname='張三')C.查詢條件使用ISNULL或ISNOTNULLD.查詢條件使用=、IN、BETWEEN等操作符答案:D(=、IN、BETWEEN通常能有效利用索引,而函數(shù)、非左前綴、類型不匹配等會導(dǎo)致失效)二、填空題(每空2分,共20分)1.SQL中用于限制分組后結(jié)果的子句是______。答案:HAVING2.事務(wù)的隔離級別從低到高依次為:讀未提交、______、可重復(fù)讀、串行化。答案:讀已提交3.若要將查詢結(jié)果寫入新表,可使用______語句。答案:SELECT...INTO4.窗口函數(shù)中,用于計算累計和的函數(shù)是______。答案:SUM()OVER()5.表`product(pidINT,pnameVARCHAR,categoryVARCHAR)`,若要統(tǒng)計每個分類下的商品數(shù)量,且只顯示數(shù)量大于10的分類,SQL語句為:SELECTcategory,COUNT()AScntFROMproduct______category______cnt>10答案:GROUPBY;HAVING6.若要查詢表中第11到20條記錄(按id升序),MySQL中可用______子句。答案:LIMIT10OFFSET107.約束中,______用于保證列值唯一且不允許NULL。答案:PRIMARYKEY8.子查詢分為關(guān)聯(lián)子查詢和______子查詢,前者依賴外層查詢的結(jié)果。答案:非關(guān)聯(lián)9.視圖是虛擬表,其數(shù)據(jù)______(填“存儲”或“不存儲”)在數(shù)據(jù)庫中。答案:不存儲10.索引分為聚集索引和非聚集索引,MySQL的InnoDB存儲引擎中,主鍵索引是______索引。答案:聚集三、簡答題(每題6分,共30分)1.簡述LEFTJOIN和INNERJOIN的區(qū)別,并舉例說明。答案:INNERJOIN僅返回兩表中滿足連接條件的記錄;LEFTJOIN返回左表所有記錄,右表無匹配時右表字段為NULL。例如,左表A有記錄(1,'a')、(2,'b'),右表B有記錄(1,'x'),INNERJOIN結(jié)果為(1,'a','x'),LEFTJOIN結(jié)果為(1,'a','x')、(2,'b',NULL)。2.什么是事務(wù)?為什么需要事務(wù)?答案:事務(wù)是一組原子性的數(shù)據(jù)庫操作,要么全部成功,要么全部回滾。事務(wù)用于保證數(shù)據(jù)的一致性,例如銀行轉(zhuǎn)賬(扣減A賬戶、增加B賬戶),若中間失敗,事務(wù)回滾可避免數(shù)據(jù)不一致。3.索引的優(yōu)缺點是什么?何時不建議使用索引?答案:優(yōu)點:加速查詢;缺點:增加寫操作(INSERT/UPDATE/DELETE)開銷,占用存儲空間。不建議使用索引的場景:表數(shù)據(jù)量小、列更新頻繁、列值重復(fù)率高(如性別列,只有男/女)。4.如何優(yōu)化慢查詢?請列舉至少3種方法。答案:(1)為查詢條件中的列添加索引;(2)避免在WHERE子句使用函數(shù)或表達式(如YEAR(date)=2024改為date>='2024-01-01');(3)優(yōu)化JOIN順序,小表驅(qū)動大表;(4)減少SELECT,只查詢需要的列;(5)使用EXPLAIN分析執(zhí)行計劃,查看是否全表掃描或索引失效。5.簡述窗口函數(shù)與聚合函數(shù)的區(qū)別。答案:聚合函數(shù)(如SUM、AVG)會將多行數(shù)據(jù)聚合為一行,減少結(jié)果行數(shù);窗口函數(shù)為每行計算一個值(基于定義的窗口范圍),不改變結(jié)果行數(shù)。例如,計算每個員工的工資與部門平均工資的差值時,窗口函數(shù)可保留所有員工記錄,而聚合函數(shù)需先分組再關(guān)聯(lián)。四、編程題(共30分)(注:以下題目基于電商數(shù)據(jù)庫,表結(jié)構(gòu)如下:)`user(user_idINTPRIMARYKEY,reg_timeDATETIME)`(用戶表,記錄用戶ID和注冊時間)`order(order_idINTPRIMARYKEY,user_idINT,order_timeDATETIME,amountDECIMAL)`(訂單表,記錄訂單ID、用戶ID、下單時間、金額)`order_item(order_idINT,product_idINT,quantityINT,priceDECIMAL)`(訂單項表,記錄訂單關(guān)聯(lián)的商品及數(shù)量、單價)1.(5分)查詢2024年注冊的用戶數(shù)量。答案:SELECTCOUNT()ASuser_cntFROMuserWHEREreg_time>='2024-01-01'ANDreg_time<'2025-01-01';2.(6分)查詢每個用戶的首單時間(最早下單時間)和首單金額。答案:SELECTt.user_id,MIN(t.order_time)ASfirst_order_time,t.amountASfirst_order_amountFROM(SELECTo.user_id,o.order_time,o.amount,ROW_NUMBER()OVER(PARTITIONBYo.user_idORDERBYo.order_time)ASrnFROMordero)tWHEREt.rn=1;3.(7分)查詢2024年第四季度(10-12月)銷售額最高的前10個商品(需關(guān)聯(lián)訂單項表,銷售額=數(shù)量×單價)。答案:SELECTduct_id,SUM(oi.quantityoi.price)ASsales_amountFROMorderoJOINorder_itemoiONo.order_id=oi.order_idWHEREo.order_time>='2024-10-01'ANDo.order_time<'2025-01-01'GROUPBYduct_idORDERBYsales_amountDESCLIMIT10;4.(6分)查詢注冊后30天內(nèi)下單的用戶數(shù)(即用戶注冊時間與首單時間間隔≤30天)。答案:WITHfirst_orderAS(SELECTuser_id,MIN(order_time)ASfirst_otFROMorderGR

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論