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