2020年您應該知道的主要SQL面試問題
如果您正在準備任何與數據相關的工作,應該知道的問題

大多數與數據相關的工作都要求您了解SQL,并且不應讓SQL面試問題成為沒有工作的原因。 尤其是在查詢方面,它的學習速度非常快,您應該確保已準備好應對一些最常見的與SQL有關的面試問題。
這樣,我為您提供了與SQL有關的面試問題和答案的列表。 請享用!
注意:如果您不知道如何使用SQL查詢,則可以在此處五分鐘內學習SQL。
什么是SQL?
SQL代表結構化查詢語言。 根據Wikipedia的說法,SQL是一種特定于域的語言,用于編程,旨在管理關系數據庫管理系統中保存的數據或關系數據流管理系統中的流處理[1]。
什么是主鍵?
主鍵是一列(或一組列),可唯一標識表中的每一行。 通常,為此目的創建一個ID列。
什么是條款?
SQL子句是SQL語句中定義明確的部分,通常用于根據預定義條件過濾結果,但并非總是如此。 例如,ORDER BY是一個子句,但不過濾結果。
五個主要子句是TOP子句,WHERE子句,ORDER BY子句,GROUP BY子句和HAVING子句。
WHERE和HAVING子句有什么區別?
WHERE和HAVING都用于過濾表以滿足您設置的條件。 當它們與GROUP BY子句一起使用時,將顯示兩者之間的差異。 WHERE子句用于在分組之前過濾行(在GROUP BY子句之前),而HAVING子句用于在分組之后過濾行。
有哪些不同類型的聯接,并分別說明它們?

有四種不同類型的聯接:
- 內部聯接:返回兩個表中具有匹配值的記錄
- 左聯接:返回左表中的所有記錄以及右表中的匹配記錄
- 右連接:從右表返回所有記錄,并從左表返回匹配的記錄
- 完全連接:當左表或右表中存在匹配項時,返回所有記錄
UNION和JOIN有什么區別?
兩者都用于將來自一個或多個表的數據合并為一個結果。 區別在于JOIN語句將不同表的列合并為一個結果,而UNION語句將不同表的行合并為一個結果。
DELETE和TRUNCATE語句有什么區別?
DELETE用于從表中刪除一個或多個行。 您可以在使用delete語句后回滾數據。
TRUNCATE用于刪除表中的所有行,并且執行后不能回滾數據。
什么是視圖?
視圖也是一個表-它是另一個表或多個表上查詢的存儲結果集,用戶可以像其他任何表一樣從中查詢。
什么是子查詢?這兩種類型是什么?
子查詢(也稱為內部查詢或嵌套查詢)是另一個SQL查詢中的查詢,用于返回將在主查詢中用作進一步限制要檢索的數據的條件的數據[2]。
有兩種類型的子查詢:
- 關聯子查詢:關聯子查詢不能獨立于外部查詢進行評估,因為子查詢使用父語句的值。
- 不相關的子查詢:不相關的子查詢可被視為獨立查詢,并且子查詢的輸出將替換為主查詢中。
您可以在此處了解更多有關它們的信息。
集合函數和標量函數有什么區別? 給每個例子
聚合函數對多個值執行操作以返回單個值。 聚合函數通常與GROUP BY和HAVING子句一起使用。 聚合函數的一些示例包括:
- AVG()—計算值集合的平均值。
- COUNT()—計算特定表或視圖中的記錄總數。
- MIN()—計算一組值的最小值。
- MAX()—計算一組值的最大值。
- SUM()—計算值集合的總和。
- FIRST()—獲取值集合中的第一個元素。
- LAST()—獲取值集合中的最后一個元素。
標量函數根據輸入值返回單個值。 標量函數的一些示例包括:
- LEN()—計算給定字段(列)的總長度。
- UCASE()—將字符串值的集合轉換為大寫字符。
- LCASE()—將字符串值的集合轉換為小寫字符。
- CONCAT()—連接兩個或多個字符串。
- ROUND()—計算數字字段的四舍五入整數值(或小數點值)。
SQL和MySQL有什么區別?
重申一下,SQL是一種特定于域的語言,用于管理,檢索和操作結構化數據庫。 MySQL是一個關系數據庫管理系統,例如Oracle。
TLDR:SQL是一種語言,MySQL是數據庫。