內容概覽本文介紹的面試題包括以下內容。SQL 基礎知識,包括 SQL 應用程序、SQL 語句、SQL 命令和 SQL 查詢的類型等。SQL 中的函數。包括聚合函數和標量函數,以及 SQL 內置函數和用戶定義函數。高級命令...
內容概覽
本文介紹的面試題包括以下內容。
SQL 基礎知識,包括 SQL 應用程序、SQL 語句、SQL 命令和 SQL 查詢的類型等。
SQL 中的函數。包括聚合函數和標量函數,以及 SQL 內置函數和用戶定義函數。
高級命令。包括 Join、主鍵和外鍵、索引和關聯等主題。
數據庫設計。包括范式、反范式,以及 DELETE、TRUNCATE、DROP 等 SQL 語句。
高級查詢。包括子查詢(嵌套子查詢和相關子查詢)等。
通用問題
在考察你的 SQL 技術前,面試官可能會問一些有關 SQL 的通用問題。例如:
你對哪些 SQL 方言比較熟悉?
你如何評價自己對 SQL 的熟練程度?
你從事 SQL 的工作多久了?
雖然在你的簡歷中會提及這些信息,但你也要做好介紹這些信息的準備。當然,這類問題并沒有所謂的正確答案,但切忌在回答時胡編亂造。
就算你的 SQL 工作經驗有限,也不必要擔心,面試官看簡歷的時候就知道這一點了。但既然他們還有興趣面試你,就說明他們認為你有與他們公司需求相契合的點。
另外,哪怕你只使用過一種 SQL 方言,也沒關系。記住,各個 SQL 方言的相似度非常高,只熟悉其中一種也是可以的。
40 個初級 SQL 面試題
1.什么是SQL?
SQL 的全稱是 Structured Query Language,即結構化查詢語言,它是用來與關系型數據庫管理系統(RDBMS)交互的語言,包括從表中獲取、更新、插入和刪除數據,也就是我們常說的增刪改查。
2. 什么是 SQL 方言?
SQL 包括多種免費或付費的版本,這些不同的版本都被稱為 SQL 方言。各種 SQL 方言的語法非常相似,只是功能有些差別。如 Microsoft SQL Server、PostgreSQL、MySQL、SQLite、T-SQL、Oracle 等。
3. SQL的主要應用有哪些?
使用 SQL,可以實現以下功能。
創建、刪除和更新數據庫中的表。
訪問、操作和修改表中的數據。
從一個或多個表中提取和總結的信息。
在表中添加或刪除某些行或列。
總之,SQL 允許以多種方式查詢數據庫,還可以輕松地與 Python 或 R 等編程語言集成。
4.什么是 SQL 語句?舉一些例子。
SQL語句也叫 SQL 命令,由 SQL 引擎解釋并執行。SQL 語句包括 SELECT、CREATE、DELETE、DROP 和 REVOKE等。
5. 有哪些類型的 SQL 命令(或 SQL 子集)?
數據定義語言 (DDL) – 定義和修改數據庫的結構。
數據操作語言 (DML) – 訪問、操作和修改數據庫中的數據。
數據控制語言 (DCL) – 控制用戶對數據庫中數據的訪問,并授予或撤銷特定用戶或一組用戶的權限。
事務控制語言 (TCL) – 控制數據庫中的事務。
數據查詢語言 (DQL) – 對數據庫中的數據執行查詢以從中檢索必要的信息。
6. 請給出一些常見 SQL 命令。
DDL:CREATE、ALTER、TABLE、DROP、TRUNCATE、ADD COLUMN
DML:UPDATE、DELETE、INSERT
DCL:GRANT、REVOKE
TCL:COMMIT、SET TRANSACTION、ROLLBACK、SAVEPOINT
DQL:SELECT
7.什么是數據庫?
數據庫是一種結構化的存儲空間,數據保存在表中,可供提取、操作和匯總數據信息。
8. 什么是 DBMS?你知道哪些類型的 DBMS?
DBMS 是數據庫管理系統,可以對數據執行各種操作,如訪問、更新、整理、插入和刪除數據。
DBMS 有多種類型,如關系型、層次型、網絡型、圖型和面向對象型。這些類型的劃分基于數據在系統中的組織、結構與存儲方式。
9.什么是關系型數據庫管理系統?舉一些 RDBMS 的例子。
RDBMS,即關系型數據庫管理系統。它是最常見的數據庫管理系統,用于處理存儲表中的數據。SQL 是專門用于與關系型數據庫交互的語言。主流的關系型數據庫包括 MySQL、PostgreSQL、Oracle、MariaDB 等。
10. SQL中的表和字段是什么?
表是以表格形式存儲的有組織的數據。字段是列的別稱。
11. 什么是 SQL 查詢,你知道哪些類型的查詢?
SQL 查詢是用于查詢或修改數據庫中數據的 SQL 代碼。
SQL 查詢有兩種:選擇查詢和操作查詢。第一種用于檢索數據(包括限制、分組、排序數據,以及從多個表中提取數據等)。第二種 SQL 查詢用于創建、添加、刪除、更新、重命名數據等。
12.什么是子查詢?
子查詢也稱為內部查詢,是在一個查詢或外部查詢中的查詢。子查詢可能出現在 SELECT、FROM、WHERE 和 UPDATE 等子句中。
子查詢中還可以包含子查詢。最里面的子查詢首先運行,并將結果傳遞給它的外部查詢。
13.你知道哪些類型的 SQL 子查詢?
單行子查詢 – 最多返回一行。
多行子查詢 – 返回至少兩行。
多列子查詢 – 返回至少兩列。
相關子查詢 - 與外部查詢的信息相關的子查詢。
嵌套子查詢 – 子查詢嵌套在另一個子查詢中。
14.什么是約束,為什么使用約束?
定義表中列的數據類型的條件。約束可確保表中數據的完整性,并阻止不需要的操作。
15.你知道哪些 SQL 約束?
DEFAULT – 為列提供默認值。
UNIQUE – 只允許唯一值。
NOT NULL – 只允許非空值。
PRIMARY KEY – 必須是唯一值,且必須是非空值(NOT NULL和UNIQUE)。
FOREIGN KEY – 實現兩個或多個表之間共享的鍵。
16. 什么是 join?
用于從多個表中提取數據記錄的語句。SQL 表可以根據表之間的關系進行連接。
17. join 的類型都有哪些?
(INNER) JOIN – 只返回滿足兩個(或所有)表中定義的 join 條件的記錄。這是默認的 SQL 連接。
LEFT (OUTER) JOIN – 返回左表中的所有記錄及右表中滿足定義的 join 條件的記錄。
RIGHT (OUTER) JOIN – 返回右表中的所有記錄及左表中滿足定義的 join 條件的記錄。
FULL (OUTER) JOIN – 返回兩個(或所有)表中的所有記錄。它是左連接和右連接的組合。
18.什么是主鍵?
把表的一列或多列設置為主鍵可以約束該列中的值是唯一值,而且必須是非空值。主鍵是 NOT NULL 和 UNIQUE 約束的組合。主鍵確保表中的每條記錄都是唯一的,每個表都應該包含主鍵,但不能包含多個主鍵。
19. 什么是唯一鍵?
把表的一列或多列設置為 UNIQUE 可以約束該列中的值是唯一值,即便 NULL 值也只能是唯一的。
20.什么是外鍵?
把表的一列或多列設置為 FOREIGN KEY 可以將該列與另一個表(或多個表)中的主鍵相關聯。外鍵用于把數據庫的多個表連接起來。
21.什么是索引?
索引用于實現更快的數據檢索。索引可以顯著提高大型數據庫的查詢性能。
22. 你知道哪些類型的索引?
唯一索引 – 不允許表的列中存在重復項,便于維護數據完整性。
聚合索引 – 定義數據庫表中記錄的物理順序,并根據鍵值進行數據搜索。一張表只能有一個聚合索引。
非聚合索引 – 表的記錄順序與磁盤數據的物理順序不匹配。這意味著數據存儲在一個位置,非聚合索引存儲在另一個位置。一個表可以有多個非聚合索引。
23.什么是 schema?
schema 是表、存儲過程、索引、函數和觸發器等數據庫結構元素的集合,是數據庫的總體架構,指定了數據庫中對象之間的關系,并為它們定義不同的訪問權限。
24.什么是 SQL 注釋?
SQL 代碼注釋可以是單行注釋(--),也可以是多行注釋(/*comment_text*/)。SQL 引擎運行時會忽略代碼注釋。注釋是為了讓人更方便地閱讀代碼。
25.什么是 SQL 運算符?
用于執行特定操作的保留字符或關鍵字。SQL 運算符通常與 WHERE 子句一起使用,以設置過濾數據的條件。
26. 你知道哪些類型的 SQL 運算符?
算術運算符:+、-、*、/
比較運算符:>、<`、`=`、`>=
復合運算符:+=、-=、*=、/=
邏輯運算符:AND、OR、NOT、BETWEEN
字符串運算符:%、_、+、^
集合運算符:UNION、UNION ALL、INTERSECT、MINUS 或 EXCEPT
27. 什么是別名?
執行 SQL 查詢時為表(或表中的列)指定的臨時名稱。使用別名是為了提高代碼的可讀性,使代碼更加簡潔。別名的關鍵字是 AS:
1SELECT col_1 AS column
2FROM table_name;
28. 什么是子句?
SQL 查詢的條件,用于過濾數據以獲得查詢的結果。如,WHERE、LIMIT、HAVING、LIKE、AND、OR、ORDER BY 等。
29. SELECT 查詢中常用的語句有哪些?
主要有 FROM、GROUP BY、JOIN、WHERE、ORDER BY、LIMIT、HAVING 等。
30.如何創建表?
使用 CREATE TABLE。例如,要創建一個包含 3 列預定義數據類型的表。
1CREATE TABLE table_name (col_1 datatype,
2 col_2 datatype,
3 col_3 datatype);
31.如何更新表?
使用 UPDATE 語句。
1UPDATE table_name
2SET col_1 = value_1, column_2 = value_2
3WHERE condition;
32. 如何從數據庫中刪除表?
使用 DROP TABLE 聲明。語法是:DROP TABLE table_name;。
33. 如何獲取表中的記錄數?
使用聚合函數 COUNT():SELECT COUNT(*) FROM table_name;。
34.如何排序表中的記錄?
使用 ORDER BY 語句。
1SELECT * FROM table_name
2ORDER BY col_1;
默認排序為升序,使用關鍵字 DESC 可以指定降序的列。還可以實現多列排序,分別指定每一列是升序還降序。例如:
1SELECT * FROM table_name
2ORDER BY col_1 DESC, col_3, col_6 DESC;
35. 如何選擇表中的所有列?
在 SELECT 語句中使用星號 *。語法是:SELECT * FROM table_name;
36、如何從兩個表中選取共同的記錄?
使用 INTERSECT語句,示例如下。
1 SELECT * FROM table_1
2 INTERSECT
3 SELECT * FROM table_1;
37. 什么是 DISTINCT 語句,如何使用?
DISTINCT 可以與 SELECT 一起使用,以過濾掉重復項,并僅返回表中列的唯一值。示例如下。
1 SELECT DISTINCT col_1
2 FROM table_name;
38.什么是實體?舉一些例子。
實體是可以收集并存儲到數據庫表中的現實世界中的對象數據。每個實體對應于表中的一行,表的列描述其屬性。實體的示例包括銀行交易、學校學生、銷售的汽車等。
39.什么是關系?舉一些例子。
關系是實體之間的連接,是指數據庫中的多個表如何相互關聯。例如,可以在銷售數據表和客戶表中找到同一客戶的 ID。
40.什么是 NULL?它與 0 或空格有什么不同?
NULL 表示表格中的某個單元格不存在數據。
0 是有效的數值,空字符串是長度為 0 的合法字符串。
40 個中級 SQL 面試題
41. SQL 中什么是函數,為什么要使用函數?
函數是執行特定任務的一組 SQL 語句。函數接收輸入參數,對它們執行計算或其他操作,然后返回結果。函數有助于提高代碼可讀性,并避免重復相同的代碼片段。
42.你知道哪些類型的 SQL 函數?
聚合函數 – 針對處理分組表中列的記錄,并返回單個值(通常按組)。
標量函數 – 處理每個單獨的值,并返回單個值。
另一方面,SQL 函數可以是內置的,或用戶定義的(由用戶根據其特定需求創建)。
43.你知道哪些聚合函數?
AVG() – 返回平均值。
SUM() – 返回值的和。
MIN() – 返回最小值。
MAX() – 返回最大值。
COUNT() – 返回行數,包括具有空值的行數。
FIRST() – 返回列中的第一個值。
LAST() – 返回列中的最后一個值。
44.你知道哪些標量函數?
LEN()(或LENGTH()) – 返回字符串的長度,包括空格。
UCASE()(或 UPPER()) – 返回轉換為大寫的字符串。
LCASE()(或 LOWER()) – 返回轉換為小寫的字符串。
INITCAP() – 返回轉換為首字母大寫的字符串。
MID()(或 SUBSTR()) – 從字符串中提取子字符串。
ROUND() – 返回四舍五入到指定小數位數的數值。
NOW() – 返回當前日期和時間。
45. 什么是大小寫處理函數?舉一些例子。
大小寫處理函數是文本函數,用于更改文本數據的大小寫,可以將數據轉換為大寫、小寫或首字母大寫。
UCASE()(或 UPPER()) – 返回轉換為大寫的字符串。
LCASE()(或 LOWER()) – 返回轉換為小寫的字符串。
INITCAP()– 返回轉換為首字母大寫的字符串。
46. 什么是字符操作函數?舉一些例子。
字符操作函數代表字符函數的子集,它們用于修改文本數據。
CONCAT() – 連接多個字符串值,將后一個字符串附加到前一個字符串的末尾。
SUBSTR() – 返回滿足所提供的起點和終點的字符串的一部分。
LENGTH()(或 LEN()) – 返回字符串的長度,包括空格。
REPLACE() – 用一個子字符串替換提供的字符串中所有出現的已定義子字符串。
INSTR() – 返回給定字符串中定義的子字符串的數字位置。
LPAD()/RPAD() – 返回右對齊/左對齊值的左側/右側字符的填充。
TRIM() – 從提供的字符串的左側、右側或兩端刪除所有定義的字符及空格。
47. 局部變量和全局變量有什么區別?
局部變量只能在聲明該變量的函數內部訪問。
在函數外部聲明的全局變量存儲在內存結構中,可以在整個程序中使用。
48. ORDER BY 語句的默認排序是什么??如何更改?
ORDER BY 語句的默認排序是升序。要改為降序,需要添加 DESC 關鍵字,示例如下。
1SELECT * FROM table_name
2ORDER BY col_1 DESC;
49. 你知道哪些集合運算符?
UNION – 返回多個查詢語句的結果合并后的唯一記錄集(不包括重復項)。
UNION ALL – 返回多個查詢語句的結果合并后的記錄集(包括重復項)。
INTERSECT – 返回多個查詢語句的結果交集的記錄集。
EXCEPT(MySQL 和 Oracle 中為 MINUS) – 僅返回第一個語句查詢的結果,不返回第二個查詢的結果。
50. 查詢中使用什么運算符進行模式匹配?
LIKE 運算符與 % 和 _ 通配符結合使用。通配符 % 代表任意數量的字符,包括 0 個字符;_ 嚴格來說是一個字符。
51. 主鍵和唯一鍵有什么區別?
兩種類型的鍵都確保列中的值唯一,但主鍵唯一標識表中的每個記錄,唯一鍵則防止該列中出現重復項。
52.什么是復合主鍵?
表的主鍵,基于多個列。
53. SELECT 查詢中常見語句的出現順序是什么?
SELECT – FROM – JOIN – ON – WHERE – GROUP BY – HAVING – ORDER BY - LIMIT
54.解釋器執行 SELECT 查詢語句的順序是什么?
FROM – JOIN – ON – WHERE – GROUP BY – HAVING – SELECT – ORDER BY – LIMIT
55.什么是視圖,為什么要使用視圖?
視圖一種虛擬表,包含從一個或多個數據庫表(或其他視圖)中提取的數據。
視圖占用的空間很少,還可以簡化復雜的查詢,限制對數據的訪問以確保安全,實現數據獨立性,并匯總多個表中的數據。
56. 可以基于一個視圖再創建一個視圖嗎?
可以。這也叫嵌套視圖。但要避免嵌套多個視圖,因為代碼會變得難以理解,調試也更加困難。
57. 原表刪除后還可以使用視圖嗎?
不可以。刪除基表后,任何基于該表的視圖都將失效。使用這樣的視圖時,將收到錯誤消息。
58. 你知道哪些類型的 SQL 關系?
一對一 — 一個表中的每條記錄僅對應于另一個表中的一條記錄。
一對多 — 一個表中的每條記錄對應另一個表中的多條記錄。
多對多 — 兩個表中的每條記錄都對應于另一個表中的多條記錄。
59. BOOLEAN 數據字段的值有哪些?
在 PostgreSQL 中,BOOLEAN 類型的值包括 TRUE、FALSE 和 NULL。在其他 SQL 方言中,如 SQL Server,BIT 類型用于將布爾值存儲為整數 1(true)或 0(false)。
60. SQL 中的范式(normalization )是什么,為什么要使用范式?
范式是數據庫的設計過程,旨在減少數據冗余、提高數據一致性和完整性,讓查詢效率更高,也更靈活,常用的范式有第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。
61. SQL 中的非范式(denormalization )是什么,為什么要使用非范式?
非范式是與范式相反的過程:它引入數據冗余,并組合來自多個表的數據。在讀操作比寫操作更重要的情況下,非范式可以優化數據庫基礎設施的性能,有助于避免復雜的連接,并減少查詢運行的時間。
62. 重命名列與列的別名有什么區別?
重命名列意味著永久更改其在原始表中的實際名稱。
為列指定別名意味著在執行 SQL 查詢時為其指定一個臨時名稱,使代碼更易讀,更簡潔。
63. 嵌套子查詢和相關子查詢(correlated subquery)有什么區別?
相關子查詢是嵌套在外部查詢中的內部查詢,該查詢引用外部查詢中的值來執行,這意味著相關子查詢依賴于其外部查詢。相反,非相關子查詢不依賴于外部查詢的數據,并且可以獨立于外部查詢運行。
64. 聚合索引和非聚合索引的區別是什么?
聚合索引定義表中記錄的物理順序,并根據鍵值執行數據搜索,而非聚合索引的記錄順序與磁盤上實際數據的物理順序不匹配。一張表只能有一個聚合索引,但可以有多個非聚合索引。
65. CASE() 函數是什么?
SQL 中 if-then-else 邏輯的實現方式。CASE() 函數按順序檢查 WHEN 子句中的條件,在滿足第一個條件時返回 THEN 子句中的值。如果沒有滿足任何條件,則該函數將返回 ELSE 子句中的值(如果已提供),否則返回 NULL。
1 CASE
2 WHEN condition_1 THEN value_1
3 WHEN condition_2 THEN value_2
4 WHEN condition_3 THEN value_3
5 ...
6 ELSE value
7 END;
66. DELETE 和 TRUNCATE 的區別是什么?
DELETE 根據 WHERE 子句中的條件從表中刪除一行或多行記錄。
TRUNCATE 是用于刪除表中的所有行,但包含外鍵的表不能使用 TRUNCATE 語句。
DELETE 的速度比 TRUNCATE 慢。
67. DROP 和 TRUNCATE 的區別是什么?
DROP 從數據庫中完全刪除表,包括表結構、約束條件、多表關系及訪問權限。
TRUNCATE 刪除表中的所有行的數據,但不涉及表的結構和約束條件。
DROP 的速度比 TRUNCATE 慢。
兩者都是不可逆的。
68. HAVING 和 WHERE 語句有什么區別?
HAVING 對分組后的數據進行聚合處理。
WHERE 則核查每一行的數據。
如果兩個語句都出現在查詢中,優先級為 WHERE – GROUP BY – HAVING。
SQL 引擎按此順序進行解析。
69. 如何向表中添加記錄?
INSERT INTO 與 VALUES 結合使用。
1 INSERT INTO table_name
2 VALUES (value_1, value_2, ...);
70.如何刪除表中的記錄?
使用 DELETE 語句刪除記錄,可以搭配 WHERE 一起使用。
1 DELETE FROM table_name
2 WHERE condition;
可以刪除符合條件的多條記錄。
71.如何向表格添加列?
ALTER TABLE 與 ADD 結合在一起使用。
1 ALTER TABLE table_name
2 ADD column_name datatype;
72. 如何重命名表的列?
ALTER TABLE 與 RENAME COLUMN ... TO ... 一起使用,示例如下。
1 ALTER TABLE table_name
2 RENAME COLUMN old_column_name TO new_column_name;
73. 如何從表中刪除列?
ALTER TABLE 與 DROP COLUMN一起使用,示例如下。
1 ALTER TABLE table_name
2 DROP COLUMN column_name;
34. 如何選擇表中的所有偶數或奇數的記錄?
通過計算除以 2 的余數,實現這個操作。
在 PostgreSQL 或 My SQL 中,可以使用 MOD 函數;在 SQL Server 和 SQLite 中使用 % 運算符。
使用 MOD 選擇所有偶數記錄的示例代碼如下。
1SELECT * FROM table_name
2WHERE MOD(ID_column, 2) = 0;
使用 % 選擇所有偶數記錄的示例代碼如下。
1SELECT * FROM table_name
2WHERE ID_column % 2 = 0;
選擇所有奇數記錄時,其他的內容不變,用 <> 運算符替代 = 即可。
75、查詢時如何防止重復記錄?
在 SELECT 語句中使用 DISTINCT,或為該表創建唯一鍵。
76. 如何在表中插入多行數據?
使用 INSERT INTO 與 VALUES,示例如下。
1INSERT INTO table_name
2VALUES (value_1, value_2, ...),
3 (value_3, value_4, ...),
4 (value_5, value_6, ...),
5 ...;
77. 如何找到表中某一列的第 n 個最高值?
使用 OFFSET 子句。查找某列中的第 6 個最高值的示例如下。
1SELECT * FROM table_name
2ORDER BY column_name DESC
3LIMIT 1
4OFFSET 5;
78. 如何查找表格文本列中以某個字母開頭的值?
使用 LIKE 運算符和 % 與 _ 通配符。查找表中所有以 A 開頭的姓的示例如下。
1SELECT * FROM table_name
2WHERE surname LIKE 'A_';
假設姓里必須包含至少兩個字母。如果沒有這個假設則代表姓可以只是 A,示例如下。
1SELECT * FROM table_name
2WHERE surname LIKE 'A%';
79. 如何查找表中最后一個 id?
使用 MAX() 函數。在大部分 SQL 方言中的示例如下。
1SELECT id
2FROM table_name
3ORDER BY id DESC
4LIMIT 1;
在 SQL Server 中的示例如下。
1SELECT TOP 1 id
2FROM table_name
3ORDER BY id DESC
80. 如何從表中隨機選擇行?
在 ORDER BY、LIMIT 中使用 RAND() 函數。在 PostgreSQL 中,使用 RANDOM()。
從 MySQL 的表中返回 5 個隨機行的示例如下。
1SELECT * FROM table_name
2ORDER BY RAND()
3LIMIT 5;
結論
本文介紹了 80 個常見的 SQL 面試問題及其答案,希望能夠幫助你為面試做好準備。
原文地址:https://mp.weixin.qq.com/s?__biz=MzkzNTUyMDgzMQ==&mid=2247512041&idx=1&sn=76b018537439ecdba5c2b7b6ad1ecd38&chksm=c31bd271a118a33a2cd6c09b97dc141277f036f121f23fa77fa35635a522ca2ed6c450c173bd&scene=132&exptype=timeline_recommend_article_extendread_extendread_interest&show_related_article=1&subscene=189&scene=132#wechat_redirect
來源:本文內容搜集或轉自各大網絡平臺,并已注明來源、出處,如果轉載侵犯您的版權或非授權發布,請聯系小編,我們會及時審核處理。
聲明:江蘇教育黃頁對文中觀點保持中立,對所包含內容的準確性、可靠性或者完整性不提供任何明示或暗示的保證,不對文章觀點負責,僅作分享之用,文章版權及插圖屬于原作者。
Copyright?2013-2024 JSedu114 All Rights Reserved. 江蘇教育信息綜合發布查詢平臺保留所有權利
蘇公網安備32010402000125
蘇ICP備14051488號-3技術支持:南京博盛藍睿網絡科技有限公司
南京思必達教育科技有限公司版權所有 百度統計