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

SQL面試基礎與中級問題

Dec 30, 2024 am 01:25 AM

咱們進入正題吧。

我建立了一個 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

熱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

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

熱門話題

Java教學
1664
14
CakePHP 教程
1423
52
Laravel 教程
1317
25
PHP教程
1268
29
C# 教程
1246
24
mysql:簡單的概念,用於輕鬆學習 mysql:簡單的概念,用於輕鬆學習 Apr 10, 2025 am 09:29 AM

MySQL是一個開源的關係型數據庫管理系統。 1)創建數據庫和表:使用CREATEDATABASE和CREATETABLE命令。 2)基本操作:INSERT、UPDATE、DELETE和SELECT。 3)高級操作:JOIN、子查詢和事務處理。 4)調試技巧:檢查語法、數據類型和權限。 5)優化建議:使用索引、避免SELECT*和使用事務。

MySQL的角色:Web應用程序中的數據庫 MySQL的角色:Web應用程序中的數據庫 Apr 17, 2025 am 12:23 AM

MySQL在Web應用中的主要作用是存儲和管理數據。 1.MySQL高效處理用戶信息、產品目錄和交易記錄等數據。 2.通過SQL查詢,開發者能從數據庫提取信息生成動態內容。 3.MySQL基於客戶端-服務器模型工作,確保查詢速度可接受。

說明InnoDB重做日誌和撤消日誌的作用。 說明InnoDB重做日誌和撤消日誌的作用。 Apr 15, 2025 am 12:16 AM

InnoDB使用redologs和undologs確保數據一致性和可靠性。 1.redologs記錄數據頁修改,確保崩潰恢復和事務持久性。 2.undologs記錄數據原始值,支持事務回滾和MVCC。

MySQL:世界上最受歡迎的數據庫的簡介 MySQL:世界上最受歡迎的數據庫的簡介 Apr 12, 2025 am 12:18 AM

MySQL是一種開源的關係型數據庫管理系統,主要用於快速、可靠地存儲和檢索數據。其工作原理包括客戶端請求、查詢解析、執行查詢和返回結果。使用示例包括創建表、插入和查詢數據,以及高級功能如JOIN操作。常見錯誤涉及SQL語法、數據類型和權限問題,優化建議包括使用索引、優化查詢和分錶分區。

MySQL的位置:數據庫和編程 MySQL的位置:數據庫和編程 Apr 13, 2025 am 12:18 AM

MySQL在數據庫和編程中的地位非常重要,它是一個開源的關係型數據庫管理系統,廣泛應用於各種應用場景。 1)MySQL提供高效的數據存儲、組織和檢索功能,支持Web、移動和企業級系統。 2)它使用客戶端-服務器架構,支持多種存儲引擎和索引優化。 3)基本用法包括創建表和插入數據,高級用法涉及多表JOIN和復雜查詢。 4)常見問題如SQL語法錯誤和性能問題可以通過EXPLAIN命令和慢查詢日誌調試。 5)性能優化方法包括合理使用索引、優化查詢和使用緩存,最佳實踐包括使用事務和PreparedStatemen

為什麼要使用mysql?利益和優勢 為什麼要使用mysql?利益和優勢 Apr 12, 2025 am 12:17 AM

選擇MySQL的原因是其性能、可靠性、易用性和社區支持。 1.MySQL提供高效的數據存儲和檢索功能,支持多種數據類型和高級查詢操作。 2.採用客戶端-服務器架構和多種存儲引擎,支持事務和查詢優化。 3.易於使用,支持多種操作系統和編程語言。 4.擁有強大的社區支持,提供豐富的資源和解決方案。

MySQL與其他編程語言:一種比較 MySQL與其他編程語言:一種比較 Apr 19, 2025 am 12:22 AM

MySQL与其他编程语言相比,主要用于存储和管理数据,而其他语言如Python、Java、C 则用于逻辑处理和应用开发。MySQL以其高性能、可扩展性和跨平台支持著称,适合数据管理需求,而其他语言在各自领域如数据分析、企业应用和系统编程中各有优势。

MySQL索引基數如何影響查詢性能? MySQL索引基數如何影響查詢性能? Apr 14, 2025 am 12:18 AM

MySQL索引基数对查询性能有显著影响:1.高基数索引能更有效地缩小数据范围,提高查询效率;2.低基数索引可能导致全表扫描,降低查询性能;3.在联合索引中,应将高基数列放在前面以优化查询。

See all articles