19 個必讀的 SQL 面試問題和答案:適合 2022 年的初學者和經驗豐富的人

已發表: 2021-01-07

SQL面試問題和答案

擔心你的面試? 我們為您的 SQL 面試問題提供了保障。 這些是 Sql Interviews 中最常見的幾個問題。
無論您在軟件和 IT 行業選擇什麼工作角色,SQL 技能都是必須的。 即使在今天,RDBMS 仍然是世界上使用最廣泛的數據庫之一,因此,SQL 是開發領域不可或缺的一部分。 像 Uber、Netflix、Airbnb 等大公司,當然還有微軟使用 SQL 作為他們的主要數據庫管理工具。

SQL 在今天廣受歡迎的原因是它支持企業 IT 環境中的大量事務處理、分析應用程序和商業智能操作。

在這篇文章中,我們將幫助您開始了解 SQL 的基礎知識。 這就是為什麼我們創建了一個最常見的 SQL 面試問題列表。 希望 SQL 面試題對你的面試有所幫助。 這些SQL 面試問題將使您對 SQL 的基本概念以及您應該如何處理它有一個相對較好的了解。

頂級 SQL 面試問題和答案

1. 定義 SQL。

SQL 或結構化查詢語言是 Microsoft 創建的關係數據庫管理系統。 它是專門為與數據庫通信而設計的。 ANSI(美國國家標準協會)認為 SQL 是關係數據庫管理系統 (RDBMS) 的標準查詢語言。

它不僅用於維護 RDBMS,還用於對不同類型的數據執行廣泛的其他數據操作操作。 例如,SQL 用於創建數據庫、在數據庫中創建表、從數據庫中檢索數據、更新數據庫中的表、執行查詢等。

閱讀更多:用於數據科學的 SQL:為什麼使用 SQL

2. 定義數據庫。

數據庫是指一種結構化的數據形式,它以有組織的形式存儲在計算機中,以方便其對數據的訪問、存儲、檢索和管理。 數據庫本質上是模式、表、查詢、視圖等的集合。

3. RDBMS 與 DBMS 有何不同?

RDBMS 或關係數據庫管理系統與 DBMS 不同,因為 RDBMS 將數據存儲為表的集合,您可以在其中定義表的公共字段之間的關係,而在 DBMS 中,您不能這樣做。

與以表格形式存儲數據的 RDBMS 不同,DBMS 的功能更像是文件管理器,將數據存儲在數據庫中,而不是將其保存在文件系統中。

RDBMS 是許多現代數據庫管理系統的基礎,例如 MySQL、Microsoft SQL Server、Oracle、IBM DB2 和 Amazon Redshift。

4. 定義約束。

在 SQL 中,約束用於指定對錶的數據類型的限製或聲明與數據庫中表中的數據有關的規則。 可以在創建表期間或在使用 ALTER TABLE 命令創建表之後為 SQL 表中的單個字段和多個字段指定約束。

SQL 中的一些約束是:

  • 非空
  • 查看
  • 默認
  • 獨特
  • 首要的關鍵
  • 外鍵

5. 定義——主鍵、唯一鍵和外鍵。

主鍵是有助於唯一指定行的字段組合。 主鍵必須具有唯一值,並且它還包含隱式 NOT NULL 約束,這意味著主鍵不能具有 NULL 值。

唯一鍵約束用於確保列中的所有值都不同。 它有助於唯一地識別數據庫中的每條記錄。 與主鍵不同(每個表只定義一個主鍵),每個表可以定義多個唯一約束。

外鍵由一個表中的單個或一組字段組成,可用於引用另一個表的主鍵。 此鍵有助於維護兩個表之間關係的參照完整性。 包含外鍵約束的表稱為子表,而包含候選鍵的表稱為父表。

6. 定義連接。 有哪些不同類型的聯接?

Join 是一個 SQL 子句,旨在根據它們之間的相關列組合來自兩個或多個表的記錄或行。 Join 就像一個關鍵字,用於根據表的字段之間的關係從更多的表中查詢數據。 它們主要用於檢索數據。 但是,數據檢索很大程度上取決於表之間的關係。

有四種類型的連接:

  • Inner Join – 這用於返回表之間至少包含一個匹配值的記錄或行。
  • 右連接 - 這將返回表與右側表上的所有其他行之間的共同匹配的行。 簡而言之,右連接返回右側表中的所有行,而不管左側表中沒有可用的匹配項。
  • 左連接 - 與右連接一樣,左連接返回表之間共有的行以及位於左側表中的所有行,即使右側表中沒有可用的匹配項。
  • 完全連接 - 當任何單個表包含匹配的行時,此連接將返回行。 換句話說,它創建了一個包含右連接和左連接結果的集合。 因此,結果集包括左側表和右側表中的所有行。

7. 什麼是索引? 命名不同類型的索引。

在 SQL 中,索引是一種性能調整方法,可以更快地從表中檢索記錄。 它們加快了數據庫中的搜索過程——索引為每個值創建一個條目,從而更快地檢索數據。

索引用於通過僅瀏覽那些數據子集以找到正確的匹配項來查找與某些列匹配的行。

索引分為三種類型:

  • 唯一索引——該索引確保表中沒有兩行數據具有相同的鍵值,從而保持數據完整性。 您可以在定義主鍵時自動應用唯一索引。
  • 聚集索引 - 此索引有助於重新排序或重新排列表的物理順序並根據鍵值進行搜索。 在該索引中,數據庫中包含的行的順序與索引中的行的順序相對應。 這就是為什麼一張表只能有一個聚集索引。
  • 非聚集索引——該索引維護數據的邏輯順序。 它用於在表中創建一個引用原始表的單獨實體。 一個表可以有多個非聚集索引。

8. 什麼是AUTO_INCREMENT?

AUTO_INCREMENT 用於在向表中添加或輸入新記錄時自動生成唯一編號。 因為一張表只有一個主鍵,所以這個主鍵被添加為 AUTO_INCREMENT 字段,有助於在每次添加新記錄時遞增該字段。

默認情況下,AUTO-INCREMENT 值從 1 開始,每當插入新記錄時,它就會增加 1。

9. 定義查詢和子查詢。

查詢是為從一個或多個數據庫表中請求或檢索數據而編寫的代碼。 查詢可以是操作查詢或選擇查詢。

另一方面,子查詢是另一個查詢中的查詢。 它也稱為內部查詢或嵌套查詢。 子查詢用於限製或增強主查詢必須查詢的數據,從而限製或增強主查詢的結果。 通常,首先執行子查詢,然後將結果傳遞給主查詢。

有兩種類型的子查詢:

  • 相關子查詢 - 此子查詢不是獨立查詢。 但是,它可以引用主查詢的 FROM 中列出的表中的列。
  • 非相關子查詢——這是一個獨立的查詢,它的輸出在主查詢中被替換。

10. 定義觸發器。

觸發器是存儲的代碼或程序,在發生 INSERT、DELETE、UPDATE(DML) 語句等事件時自動執行。 它們也可以作為對數據定義語句 (DDL) 和數據庫操作(如 SERVER ERROR、LOGON 等)的響應而執行。觸發器有助於維護數據庫的完整性。

11. 解釋 ACID 屬性在事務中的作用。

遵循 ACID 屬性以在事務之前和之後保持數據庫中的一致性。

  • 原子性——這意味著必須完成一個事務。 它不應該中途離開。 如果一個事務失敗,整個事務就會失敗,而數據庫將保持不變。
  • 一致性——這旨在通過驗證輸入數據庫的數據來維護完整性約束。
  • 隔離 – 此屬性旨在控制並發性。
  • 持久性——此屬性確保一旦事務完成,儘管可能出現任何挑戰(例如,斷電、內部錯誤等),它仍保持提交狀態。

12. 區分 DELETE 和 TRUNCATE 命令。

DELETE 和 TRUNCATE 命令的核心區別如下:

  • DELETE 命令用於刪除或移除一個或多個現有表,而 TRUNCATE 命令刪除表內的所有數據。
  • DELETE 是 DML 命令,而 TRUNCATE 是 DDL 命令。
  • DELETE 允許您完成觸發,但 TRUNCATE 不允許您執行和触發。
  • 當外鍵約束引用表時,TRUNCATE 命令不起作用。 在這種情況下,您必須使用 DELETE 命令。

13. 命名 SQL 的不同子集。

SQL 的子集包括:

  • DDL(數據定義語言)——該語言使您能夠對數據庫執行大量操作,包括 SQL 命令,如 CREATE、ALTER 和 DELETE 對象。
  • DML(數據操作語言)——該語言允許您使用 INSERT、UPDATE 和 DELETE 等命令訪問和操作數據庫中的數據。
  • DCL(數據控制語言)——這種語言允許您通過使用 GRANT 和 REVOKE 等命令來控制對數據庫的訪問。

閱讀: 2020 年 9 大數據科學工具

14. 解釋數據完整性。

數據完整性定義了存儲在數據庫中的數據的準確性、一致性和可靠性。 此外,它有助於定義完整性約束,以便在將數據插入數據庫或應用程序時對數據實施業務規則。

數據完整性有四種:

  • 行完整性
  • 色譜柱完整性
  • 參照完整性
  • 用戶定義的完整性

15. 什麼是用戶自定義函數? 命名用戶定義函數的類型。

用戶定義的函數是專門為在需要時使用特定邏輯而編寫的函數。 這些功能消除了多次編寫相同邏輯的需要; 相反,您可以在需要時調用或執行用戶定義的函數。

用戶定義的函數分為三種類型:

  • 標量函數。
  • 內聯表值函數。
  • 多語句值函數。

16. 定義歸類。 命名不同類型的整理敏感度。

排序規則是指確定字符數據如何排序和比較的規則集合。 除了定義正確的字符序列來對字符數據進行排序之外,它還包含用於指定區分大小寫、重音符號、假名字符類型以及字符寬度的選項。

不同類型的校對敏感度包括:

  • 區分大小寫 – 字符“A”和“a”的處理方式不同。
  • 重音敏感度——字符“a”和“ a”的處理方式不同。
  • 假名敏感性 – 這會以不同的方式對待日文假名字符,如平假名和片假名。
  • 寬度敏感度——這將區別對待單字節(半角)字符和雙字節(全角)字符。

17. 存儲過程是什麼意思?

存儲過程是用於訪問 RDBMS 的應用程序的子例程(SQL 代碼)。 它支持模塊化編程概念,這意味著您可以創建一個存儲過程一次並保存它,並在需要時多次調用它。

這些過程存儲在數據庫數據字典中。 存儲過程的優點是它允許更快的查詢執行。 這不僅減少了網絡流量,還為數據提供了更好的安全性。

另一個優點是存儲過程具有附加功能,因為無法直接訪問數據的用戶可以使用存儲過程來獲得訪問權限。

但是,它也有一個缺點——存儲過程只能在數據庫中執行,通常會佔用數據庫服務器更多的內存。

18. 區分視圖和表。

以下是視圖和表之間的一些區別:

  • 視圖是指從數據庫中提取的虛擬表,而表是指包含有限列數和無限行數的結構化實體。
  • 視圖本身不能保存數據,而表包含數據並將其存儲在數據庫中。
  • 視圖允許您查詢包含在幾個不同表中的特定信息。 然而,一個表包含基本的客戶信息以及特徵對象的案例。

19. 定義臨時表。 你怎麼能創造一個?

臨時表是允許您存儲和處理中間結果的表。 這些表在不再使用時可以自動刪除。 在需要存儲臨時數據的情況下,臨時表會派上用場。

創建臨時表的語法是:

創建表#table_name();

以下查詢將創建一個臨時表:

創建表 #book(b_id int, b_cost int)

現在,我們將插入記錄。

插入 #book 值(1,100)

插入 #book 值(2,232)

從#book中選擇*

從世界頂級大學在線學習軟件開發課程獲得行政 PG 課程、高級證書課程或碩士課程,以加快您的職業生涯。

包起來

我們希望這份SQL 面試問答指南能夠幫助您加強和擴展您的 SQL 知識庫。

如果您想了解 SQL 以及有關全棧開發的更多信息,請查看 IIIT-B 和 upGrad 的全棧軟件開發執行 PG 計劃,該計劃是為工作專業人士創建的,並提供 10 多個案例研究和項目,實際動手操作研討會、與行業專家的指導、與行業導師的一對一交流、400 多個小時的學習和頂級公司的工作協助。

全棧軟件開發 PG 文憑

立即申請全棧開發的執行 PG 計劃