80 个常见的 SQL 面试问题与答案

:2024年06月05日 Python学研大本营
分享到:

内容概览本文介绍的面试题包括以下内容。SQL 基础知识,包括 SQL 应用程序、SQL 语句、SQL 命令和 SQL 查询的类型等。SQL 中的函数。包括聚合函数和标量函数,以及 SQL 内置函数和用户定义函数。高级命令...

内容概览

本文介绍的面试题包括以下内容。

  1. SQL 基础知识,包括 SQL 应用程序、SQL 语句、SQL 命令和 SQL 查询的类型等。

  2. SQL 中的函数。包括聚合函数和标量函数,以及 SQL 内置函数和用户定义函数。

  3. 高级命令。包括 Join、主键和外键、索引和关联等主题。

  4. 数据库设计。包括范式、反范式,以及 DELETE、TRUNCATE、DROP 等 SQL 语句。

  5. 高级查询。包括子查询(嵌套子查询和相关子查询)等。

通用问题

在考察你的 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 语句包括 SELECTCREATEDELETEDROPREVOKE等。

5. 有哪些类型的 SQL 命令(或 SQL 子集)?

  • 数据定义语言 (DDL) – 定义和修改数据库的结构。

  • 数据操作语言 (DML) – 访问、操作和修改数据库中的数据。

  • 数据控制语言 (DCL) – 控制用户对数据库中数据的访问,并授予或撤销特定用户或一组用户的权限。

  • 事务控制语言 (TCL) – 控制数据库中的事务。

  • 数据查询语言 (DQL) – 对数据库中的数据执行查询以从中检索必要的信息。

6. 请给出一些常见 SQL 命令。

  • DDLCREATEALTERTABLEDROPTRUNCATEADD COLUMN

  • DMLUPDATEDELETEINSERT

  • DCLGRANTREVOKE

  • TCLCOMMITSET TRANSACTIONROLLBACKSAVEPOINT

  • DQLSELECT

7.什么是数据库?

数据库是一种结构化的存储空间,数据保存在表中,可供提取、操作和汇总数据信息。

8. 什么是 DBMS?你知道哪些类型的 DBMS?

DBMS 是数据库管理系统,可以对数据执行各种操作,如访问、更新、整理、插入和删除数据。

DBMS 有多种类型,如关系型、层次型、网络型、图型和面向对象型。这些类型的划分基于数据在系统中的组织、结构与存储方式。

9.什么是关系型数据库管理系统?举一些 RDBMS 的例子。

RDBMS,即关系型数据库管理系统。它是最常见的数据库管理系统,用于处理存储表中的数据。SQL 是专门用于与关系型数据库交互的语言。主流的关系型数据库包括 MySQL、PostgreSQL、Oracle、MariaDB 等。

10. SQL中的表和字段是什么?

表是以表格形式存储的有组织的数据。字段是列的别称。

11. 什么是 SQL 查询,你知道哪些类型的查询?

SQL 查询是用于查询或修改数据库中数据的 SQL 代码。

SQL 查询有两种:选择查询和操作查询。第一种用于检索数据(包括限制、分组、排序数据,以及从多个表中提取数据等)。第二种 SQL 查询用于创建、添加、删除、更新、重命名数据等。

12.什么是子查询?

子查询也称为内部查询,是在一个查询或外部查询中的查询。子查询可能出现在 SELECTFROMWHEREUPDATE 等子句中。

子查询中还可以包含子查询。最里面的子查询首先运行,并将结果传递给它的外部查询。

13.你知道哪些类型的 SQL 子查询?

  • 单行子查询 – 最多返回一行。

  • 多行子查询 – 返回至少两行。

  • 多列子查询 – 返回至少两列。

  • 相关子查询 - 与外部查询的信息相关的子查询。

  • 嵌套子查询 – 子查询嵌套在另一个子查询中。

14.什么是约束,为什么使用约束?

定义表中列的数据类型的条件。约束可确保表中数据的完整性,并阻止不需要的操作。

15.你知道哪些 SQL 约束?

  • DEFAULT – 为列提供默认值。

  • UNIQUE – 只允许唯一值。

  • NOT NULL – 只允许非空值。

  • PRIMARY KEY – 必须是唯一值,且必须是非空值(NOT NULLUNIQUE)。

  • FOREIGN KEY – 实现两个或多个表之间共享的键。

16. 什么是 join?

用于从多个表中提取数据记录的语句。SQL 表可以根据表之间的关系进行连接。

17. join 的类型都有哪些?

  • (INNER) JOIN – 只返回满足两个(或所有)表中定义的 join 条件的记录。这是默认的 SQL 连接。

  • LEFT (OUTER) JOIN – 返回左表中的所有记录及右表中满足定义的 join 条件的记录。

  • RIGHT (OUTER) JOIN – 返回右表中的所有记录及左表中满足定义的 join 条件的记录。

  • FULL (OUTER) JOIN – 返回两个(或所有)表中的所有记录。它是左连接和右连接的组合。

18.什么是主键?

把表的一列或多列设置为主键可以约束该列中的值是唯一值,而且必须是非空值。主键是 NOT NULLUNIQUE 约束的组合。主键确保表中的每条记录都是唯一的,每个表都应该包含主键,但不能包含多个主键。

19. 什么是唯一键?

把表的一列或多列设置为 UNIQUE 可以约束该列中的值是唯一值,即便 NULL 值也只能是唯一的。

20.什么是外键?

把表的一列或多列设置为 FOREIGN KEY 可以将该列与另一个表(或多个表)中的主键相关联。外键用于把数据库的多个表连接起来。

21.什么是索引?

索引用于实现更快的数据检索。索引可以显著提高大型数据库的查询性能。

22. 你知道哪些类型的索引?

  • 唯一索引 – 不允许表的列中存在重复项,便于维护数据完整性。

  • 聚合索引 – 定义数据库表中记录的物理顺序,并根据键值进行数据搜索。一张表只能有一个聚合索引。

  • 非聚合索引 – 表的记录顺序与磁盘数据的物理顺序不匹配。这意味着数据存储在一个位置,非聚合索引存储在另一个位置。一个表可以有多个非聚合索引。

23.什么是 schema?

schema 是表、存储过程、索引、函数和触发器等数据库结构元素的集合,是数据库的总体架构,指定了数据库中对象之间的关系,并为它们定义不同的访问权限。

24.什么是 SQL 注释?

SQL 代码注释可以是单行注释(--),也可以是多行注释(/*comment_text*/)。SQL 引擎运行时会忽略代码注释。注释是为了让人更方便地阅读代码。

25.什么是 SQL 运算符?

用于执行特定操作的保留字符或关键字。SQL 运算符通常与 WHERE 子句一起使用,以设置过滤数据的条件。

26. 你知道哪些类型的 SQL 运算符?

  • 算术运算符+-*/

  • 比较运算符&gt;<`、`=`、`>=

  • 复合运算符+=-=*=/=

  • 逻辑运算符ANDORNOTBETWEEN

  • 字符串运算符%_+^

  • 集合运算符UNIONUNION ALLINTERSECTMINUSEXCEPT

27. 什么是别名?

执行 SQL 查询时为表(或表中的列)指定的临时名称。使用别名是为了提高代码的可读性,使代码更加简洁。别名的关键字是 AS

1SELECT col_1 AS column

2FROM table_name;

28. 什么是子句?

SQL 查询的条件,用于过滤数据以获得查询的结果。如,WHERELIMITHAVINGLIKEANDORORDER BY 等。

29. SELECT 查询中常用的语句有哪些?

主要有 FROMGROUP BYJOINWHEREORDER BYLIMITHAVING 等。

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 查询中常见语句的出现顺序是什么?

SELECTFROMJOINONWHEREGROUP BYHAVINGORDER BY - LIMIT

54.解释器执行 SELECT 查询语句的顺序是什么?

FROMJOINONWHEREGROUP BYHAVINGSELECTORDER BYLIMIT

55.什么是视图,为什么要使用视图?

视图一种虚拟表,包含从一个或多个数据库表(或其他视图)中提取的数据。

视图占用的空间很少,还可以简化复杂的查询,限制对数据的访问以确保安全,实现数据独立性,并汇总多个表中的数据。

56. 可以基于一个视图再创建一个视图吗?

可以。这也叫嵌套视图。但要避免嵌套多个视图,因为代码会变得难以理解,调试也更加困难。

57. 原表删除后还可以使用视图吗?

不可以。删除基表后,任何基于该表的视图都将失效。使用这样的视图时,将收到错误消息。

58. 你知道哪些类型的 SQL 关系?

  • 一对一 — 一个表中的每条记录仅对应于另一个表中的一条记录。

  • 一对多 — 一个表中的每条记录对应另一个表中的多条记录。

  • 多对多 — 两个表中的每条记录都对应于另一个表中的多条记录。

59. BOOLEAN 数据字段的值有哪些?

在 PostgreSQL 中,BOOLEAN 类型的值包括 TRUEFALSENULL。在其他 SQL 方言中,如 SQL Server,BIT 类型用于将布尔值存储为整数 1true)或 0false)。

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 则核查每一行的数据。

如果两个语句都出现在查询中,优先级为 WHEREGROUP BYHAVING

SQL 引擎按此顺序进行解析。

69. 如何向表中添加记录?

INSERT INTOVALUES 结合使用。

1    INSERT INTO table_name

2    VALUES (value_1, value_2, ...);

70.如何删除表中的记录?

使用 DELETE 语句删除记录,可以搭配 WHERE 一起使用。

1    DELETE FROM table_name

2    WHERE condition;

可以删除符合条件的多条记录。

71.如何向表格添加列?

ALTER TABLEADD 结合在一起使用。

1    ALTER TABLE table_name

2    ADD column_name datatype;

72. 如何重命名表的列?

ALTER TABLERENAME COLUMN ... TO ... 一起使用,示例如下。

1    ALTER TABLE table_name

2    RENAME COLUMN old_column_name TO new_column_name;

73. 如何从表中删除列?

ALTER TABLEDROP 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 INTOVALUES,示例如下。

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 BYLIMIT 中使用 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

[我要纠错]
文:宋聪乔&发表于江苏
关键词: 内容 概览 本文 介绍 试题

来源:本文内容搜集或转自各大网络平台,并已注明来源、出处,如果转载侵犯您的版权或非授权发布,请联系小编,我们会及时审核处理。
声明:江苏教育黄页对文中观点保持中立,对所包含内容的准确性、可靠性或者完整性不提供任何明示或暗示的保证,不对文章观点负责,仅作分享之用,文章版权及插图属于原作者。

点个赞
0
踩一脚
0

您在阅读:80 个常见的 SQL 面试问题与答案

Copyright©2013-2024 JSedu114 All Rights Reserved. 江苏教育信息综合发布查询平台保留所有权利

苏公网安备32010402000125 苏ICP备14051488号-3技术支持:南京博盛蓝睿网络科技有限公司

南京思必达教育科技有限公司版权所有   百度统计

最热文章
最新文章
  • 卡尔蔡司镜片优惠店,镜片价格低
  • 苹果原装手机壳