2020年您應(yīng)該知道的主要SQL面試問(wèn)題
如果您正在準(zhǔn)備任何與數(shù)據(jù)相關(guān)的工作,應(yīng)該知道的問(wèn)題

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

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