搜尋
首頁資料庫mysql教程SQL面試基礎與中級問題

咱們進入正題吧。

我建立了一個 Awesome SQL Interview GitHub 儲存庫來準備面試問題和練習 SQL 查詢。我將 SQL 查詢分為三個部分:基礎 (L0)、中級 (L1) 和高階 (L2)。這是基本部分的解決方案。

這是 L1(中級)SQL 查詢練習,請先參考 L0 以獲得更好的練習。


注意:這些範例是在 MySQL 中測試的。對於 MS-SQL 或 Oracle 等其他資料庫,語法可能會有所不同。


L1:中級 SQL

  • 涉及使用多個表格、使用 JOIN、GROUP BY、HAVING 和複雜 WHERE 條件的查詢。
  • 子查詢、聚合函數和 case 語句簡介。

問題:

  1. 寫一個查詢來檢索「美國」和「法國」客戶的客戶名稱和城市。
  2. 如何取得在「舊金山」辦公室工作的所有員工的員工編號、姓氏和辦公室代碼?
  3. 寫一個查詢,使用訂單和客戶表找出每個客戶的訂單總數。
  4. 如何擷取已訂購超過 10 次的產品的 ProductName、QuantityInStock 和 buyPrice?
  5. 寫一個查詢來取得 customerNumber 為 103 的客戶所下訂單的 orderNumber、狀態和 customerName。
  6. 寫一個查詢來找出 orderdetails 表中每個訂單的總銷售額 (quantityOrdered * PriceEach)。
  7. 如何找到 orderdetails 表中每個 orderNumber 的平均訂購數量?
  8. 寫查詢,列出 orderdetails 表中總收入最高的產品線 (quantityOrdered * PriceEach)。
  9. 編寫一個查詢,透過連接員工表和辦公室表來顯示員工編號、名字、姓氏以及員工工作的辦公室名稱。
  10. 如何找到從未下過訂單的顧客?
  11. 編寫一個查詢來檢索 customerName 和每個客戶下的訂單總數(包括未下訂單的客戶)。
  12. 寫一個查詢來找出訂購產品數量大於 50 的所有訂單的產品名稱和訂購數量。
  13. 檢索已下訂單的客戶被分配為銷售代表的員工的員工編號、名字和訂單編號。
  14. 寫一個查詢,根據 buyPrice 計算 products 表中產品的平均價格。
  15. 如何取得產品表中前 3 個最昂貴的產品?
  16. 編寫一個查詢來檢索所有狀態為「已出貨」的訂單的 customerName、orderNumber 和 orderDate。
  17. 如何顯示每個產品線銷售的產品總數?
  18. 寫一個查詢來找出直接向員工編號 = 1143 的員工報告的員工。
  19. 寫一個查詢來計算訂單表中的訂單總數(按狀態分組)。
  20. 列出員工及其經理的姓名。

我也會提到錯誤的事情,知道什麼該做很重要,但也很重要什麼不該做,以及我們在哪裡犯了錯誤。讓我們再進入正題吧...


需要說明的解決方案

  1. 檢索「美國」和「法國」客戶的客戶名稱和城市的查詢。
    SQL Basic and Intermediate Questions for Interview

    • 或->如果條件很多,速度會稍微慢一些,因為查詢會逐一檢查每個條件。
    • 在->資料庫引擎在內部進行了稍微優化,特別是對於長列表。
    • 兩者都適合 2-3 種情況。對於可讀性和可擴展性而言,IN 更好,尤其是在處理較大的值列表時。
    • IS 用於檢查 IS NULL 或 IS NOT NULL 等條件,而不用於字串比較。
  2. 取得所有在「舊金山」辦公室工作的員工的員工編號、姓氏和辦公室代碼。
    SQL Basic and Intermediate Questions for Interview

  3. 使用訂單和客戶表查詢找出每位客戶的訂單總數。
    SQL Basic and Intermediate Questions for Interview

    • 在查詢中使用聚合函數時,請務必在 GROUP BY 子句中包含非聚合列。
    • 這確保 SQL 知道如何對行進行分組並避免在選擇其他列時出現歧義。
    • 在我們的範例中:customerNumber 和 customerName 必須都在 GROUP BY 子句中,因為我們將它們與 COUNT(*) 一起選擇。

    ?黃金法則:
    SELECT 清單中的每一列都必須:
    位於 GROUP BY 子句中,或
    使用聚合函數,如 COUNT()、SUM() 等

  4. 檢索已訂購超過10次的產品的產品名稱、庫存數量和購買價格?
    SQL Basic and Intermediate Questions for Interview

    • 這個查詢對於中小型資料庫來說是高效的,對於大型資料庫我們可以使用索引,並使用WHERE子句減少掃描數據,而不是僅僅依賴HAVING子句
  5. 取得 customerNumber 為 103 的客戶所下的訂單的 orderNumber、狀態和 customerName。
    SQL Basic and Intermediate Questions for Interview

    說明:

    • 使用的表:
      • 訂單:包含訂單號碼和狀態。
      • customers:包含 customerName。
    • 內連接:
      • 使用 customerNumber 欄位(公用鍵)組合訂單和客戶表。
    • WHERE 子句:
      • 過濾資料以僅包含 customerNumber = 103 的記錄。
    • 選擇的欄位:
      • o.orderNumber:訂單號碼。
      • o.status:訂單狀態。
      • c.customerName:下訂單的客戶姓名。
  6. 在 orderdetails 表中找出每筆訂單的總銷售額(訂購數量 * 每個價格)。
    SQL Basic and Intermediate Questions for Interview

  7. 在 orderdetails 表中找出每個 orderNumber 的平均訂購數量。
    SQL Basic and Intermediate Questions for Interview

    • 說明:
    • 訂單號碼:
      • 以 orderNumber 分組分組。
    • AVG(訂購數量):
      • 計算屬於同一 orderNumber 的所有行的平均訂購數量。
    • 分組依據:
      • 確保分別計算每個 orderNumber 的平均值。
  8. 查詢列出 orderdetails 表中總收入最高的產品線 (quantityOrdered * PriceEach)。
    SQL Basic and Intermediate Questions for Interview

    • 說明:
    • 產品線:
      • 將產品分類為不同的系列,例如「摩托車」或「飛機」。
    • SUM(od.quantityOrdered * od.priceEach):
      • 計算每個產品線的總收入。
    • 內連接:
      • 加入productCode 上的產品和訂單詳細資料表,以將產品線與其訂單詳細資料相關聯。
    • 依 p.productLine 分組:
      • 依每個產品線將結果分組。
    • 依總收入排序:
      • 依所得降序將分組結果排序,因此所得最高的先出現。
    • 限制 1:
      • 將結果限制為僅收入最高的產品線。
  9. 透過連接employees表和offices表來查詢顯示employeeNumber、firstName、lastName以及員工工作的辦公室名稱。
    SQL Basic and Intermediate Questions for Interview

    • CONCAT(列,'分隔符號',列,'分隔符號',列)
    • CONCAT_WS('分隔符號', 欄位)
  10. 尋找從未下過訂單的顧客
    SQL Basic and Intermediate Questions for Interview

    說明

    • LEFT JOIN: 從客戶表中檢索所有客戶,無論他們在訂單表中是否有匹配的行。
    • o.orderNumber IS NULL: 標識沒有任何對應訂單的客戶(即 orderNumber 為 NULL,因為訂單表中沒有符合項目)。
    • 專欄
      • 客戶編號: 客戶的唯一識別碼。
      • customerName: 客戶姓名。
  11. 查詢取得每位客戶的客戶名稱和下單總數(包括未下單的客戶)。 SQL Basic and Intermediate Questions for Interview

  12. 找出訂購產品數量大於 50 的所有訂單的產品名稱和訂購數量。
    SQL Basic and Intermediate Questions for Interview

  13. 檢索已下訂單的客戶被分配為銷售代表的員工的員工編號、名字和訂單編號。
    SQL Basic and Intermediate Questions for Interview

    說明:

    • 來自員工 e:
      • 我們從員工表(別名 e)開始,因為我們需要員工詳細信息,特別是員工編號和名字。
    • 加入客戶 c ON e.employeeNumber = c.salesRepEmployeeNumber:
      • 我們將來自員工的員工編號和來自客戶的 salesRepEmployeeNumber 加入客戶表(別名為 c)。這在員工(銷售代表)和客戶之間建立了關係。現在,我們可以確定為每位客戶分配了哪些員工。
    • JOIN 訂單 o ON c.customerNumber = o.customerNumber:
      • 我們進一步使用 customerNumber 將訂單表(別名為 o)與客戶表連接。這為我們提供了每位客戶所下的訂單。
    • 選擇 e.employeeNumber、e.firstName、o.orderNumber:
      • 最後,我們從員工表(銷售代表)中選擇員工編號和名字,並從訂單表中為每個下訂單的客戶選擇訂單編號。
  14. 查詢根據buyPrice計算products表格中產品的平均價格。
    SQL Basic and Intermediate Questions for Interview

  15. 取得產品表中前 3 個最昂貴的產品?

    SQL Basic and Intermediate Questions for Interview

  16. 重新擷取狀態為「已出貨」的所有訂單的 customerName、orderNumber 和 orderDate。
    SQL Basic and Intermediate Questions for Interview

  17. 顯示每個產品系列銷售的產品總數
    SQL Basic and Intermediate Questions for Interview

  18. 尋找直接向員工編號 = 1143 的員工報告的員工。
    SQL Basic and Intermediate Questions for Interview

  19. 查詢計算訂單表中的訂單總數,依狀態分組。
    SQL Basic and Intermediate Questions for Interview

  20. 列出員工及其經理的姓名。
    SQL Basic and Intermediate Questions for Interview


嘿,我的名字是Jaimin Baria,又名Cloud Boy...,如果您喜歡並學到了一些有用的東西,例如這篇文章,請添加評論,並訪問我的Awesome SQL Interview GitHub 存儲庫。

別忘了開始吧?

快樂編碼?‍?


其他貼文

  • SQL 實作:
    • 第 1 部分
      • L0:基本 SQL
      • L1:中級 SQL
      • L2:進階 SQL - 即將推出
  • 系統設計
    • 資料庫中ACID事務的實作
    • 系統設計中的 ACID 事務

?️ 讀者建議的修復

以上是SQL面試基礎與中級問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
MySQL字符串類型:存儲,性能和最佳實踐MySQL字符串類型:存儲,性能和最佳實踐May 10, 2025 am 12:02 AM

mySqlStringTypesimpactStorageAndPerformanCeaseAsfollows:1)長度,始終使用theSamestoragespace,whatcanbefasterbutlessspace-felfficity.2)varCharisvariable varcharisvariable length,morespace-morespace-morespace-effficitybuteftife buteftife butfority butfority textifforlyslower.3)

了解MySQL字符串類型:VARCHAR,文本,char等了解MySQL字符串類型:VARCHAR,文本,char等May 10, 2025 am 12:02 AM

mysqlStringTypesIncludeVarChar,文本,char,Enum和set.1)varCharisVersAtileForvariable-lengthStringStringSuptoPuptOuptoPepePecifiedLimit.2)textisidealforlargetStortStorStoverStoverStorageWithoutAutAdefinedLength.3)charlisfixed-lenftenge,for forConsistentDatalikeCodes.4)

MySQL中的字符串數據類型是什麼?MySQL中的字符串數據類型是什麼?May 10, 2025 am 12:01 AM

MySQLoffersvariousstringdatatypes:1)CHARforfixed-lengthstrings,2)VARCHARforvariable-lengthtext,3)BINARYandVARBINARYforbinarydata,4)BLOBandTEXTforlargedata,and5)ENUMandSETforcontrolledinput.Eachtypehasspecificusesandperformancecharacteristics,sochoose

如何向新的MySQL用戶授予權限如何向新的MySQL用戶授予權限May 09, 2025 am 12:16 AM

TograntpermissionstonewMySQLusers,followthesesteps:1)AccessMySQLasauserwithsufficientprivileges,2)CreateanewuserwiththeCREATEUSERcommand,3)UsetheGRANTcommandtospecifypermissionslikeSELECT,INSERT,UPDATE,orALLPRIVILEGESonspecificdatabasesortables,and4)

如何在MySQL中添加用戶:逐步指南如何在MySQL中添加用戶:逐步指南May 09, 2025 am 12:14 AM

toadduserInmysqleffect和securly,跟隨台詞:1)USEtheCreateUserStattoDaneWuser,指定thehostandastrongpassword.2)GrantNecterAryAryaryPrivilegesSustherthing privilegesgeStatement,usifementStatement,adheringtotheprinciplelastprefilegege.3)

mysql:添加具有復雜權限的新用戶mysql:添加具有復雜權限的新用戶May 09, 2025 am 12:09 AM

toaddanewuserwithcomplexpermissionsinmysql,loldtheSesteps:1)創建eTheEserWithCreateuser'newuser'newuser'@''localhost'Indedify'pa ssword';。 2)GrantreadAccesstoalltablesin'mydatabase'withGrantSelectOnMyDatabase.to'newuser'@'localhost';。 3)GrantWriteAccessto'

mysql:字符串數據類型和coltrationsmysql:字符串數據類型和coltrationsMay 09, 2025 am 12:08 AM

MySQL中的字符串數據類型包括CHAR、VARCHAR、BINARY、VARBINARY、BLOB、TEXT,排序規則(Collations)決定了字符串的比較和排序方式。 1.CHAR適合固定長度字符串,VARCHAR適合可變長度字符串。 2.BINARY和VARBINARY用於二進制數據,BLOB和TEXT用於大對像數據。 3.排序規則如utf8mb4_unicode_ci忽略大小寫,適合用戶名;utf8mb4_bin區分大小寫,適合需要精確比較的字段。

MySQL:我應該在Varchars上使用什麼長度?MySQL:我應該在Varchars上使用什麼長度?May 09, 2025 am 12:06 AM

最佳的MySQLVARCHAR列長度選擇應基於數據分析、考慮未來增長、評估性能影響及字符集需求。 1)分析數據以確定典型長度;2)預留未來擴展空間;3)注意大長度對性能的影響;4)考慮字符集對存儲的影響。通過這些步驟,可以優化數據庫的效率和擴展性。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

SublimeText3 英文版

SublimeText3 英文版

推薦:為Win版本,支援程式碼提示!

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用