2023最新SQL面试问题与回答:50道高频SQL面试题完全指南
这是文章《SQL 面试问题与回答》的第1部分(共1部分)。
在几乎所有的面试中都会问到SQL面试题,因为数据库操作在应用程序中非常常见。SQL代表结构化查询语言,是一种用于数据库通信和关系数据库管理的特定领域编程语言。SQL包括用于数据库交互的标准命令,例如SELECT、INSERT、CREATE、DELETE、UPDATE、DROP等。通过这些命令,用户可以从数据库中检索和上传数据,创建和删除表元素,并在服务器和程序之间实现动态数据库交互。
SQL面试题

- SQL是什么?
SQL是一种特定领域的编程语言,允许您在优化的数据库管理系统中针对数据进行查询和操作。通过在SQL中实现命令,您可以读取、写入、选择和删除同一属性或表的条目或列。SQL还提供了一种非常高效的方法,可以在程序、网站或移动应用程序与数据库之间创建动态访问路径。例如,通过在用户网站上输入登录详细信息,SQL将这些登录信息传递给数据库进行验证和用户限制。
- 数据库和关系数据库之间有什么区别?
数据库或数据库管理系统(DBMS)和关系数据库管理系统(RDMS)都是由SQL用来存储数据和结构的。然而,每种类型的数据库管理系统在不同的用途下都有其优势。两者之间的主要区别在于,DBMS将您的信息保存为文件,而RDMS则将您的信息保存为表格形式。此外,正如关系这个关键字所暗示的那样,RDMS允许不同的表格之间通过主键、外键等建立关系。这在表格之间创建了一个动态的层次链,并对表格提供了有帮助的限制。DBMS通过层次方式或导航方式对其表格进行排序。当需要将数据存储在彼此独立的表格中,并且在填充或编辑表格时您不希望更改其他表格时,这种方法非常有用。
- SQL的基本结构是什么?
SQL是建立在关系操作结构之上的。它基于一些修改和增强。一个非常基本的SQL查询形式是:
select A1, A2, ..., An
from R1, R2, ..., Rm
where P
这里的An是属性,Rm是数据库内的关系,P是谓词或过滤器。
- SQL命令有哪些不同的分类?
SQL命令可分为以下四类:
- 数据定义语言(DDL):用于创建、删除和修改数据库对象,如表、索引等。
- 数据操纵语言(DML):用于对数据库中的数据进行增、删、改和查操作。
- 数据控制语言(DCL):用于控制用户对数据库对象的访问权限,如授权、回收权限等。
- 事务控制语言(TCL):用于管理数据库中的事务,如提交、回滚、保存点等操作。
- DML(数据操纵语言):提供数据操作功能
- DDL(数据定义语言):用于操作数据库结构
- TCL(事务控制语言):负责数据事务验证和错误处理
- DCL(数据控制语言):是安全语句,具有用户限制和数据访问权限功能,以促进数据安全性。
- SQL被用于什么目的?
SQL被服务器端程序员广泛使用并受欢迎,因为它能够以非常快速和简便的方式处理数据库中的大量数据条目。这为数据检索和操作带来了巨大的改进。为了进一步阐述,SQL提供了执行、检索、插入、更新、删除数据库条目的功能。它还允许创建结构,如表、视图和数据库,只需要提供一个唯一的名称。
- 定义SELECT、INSERT、CREATE、DELETE、UPDATE、DROP关键字。
- SELECT关键字:用于突出显示并获取表或视图中的行条目。它还可以与AS关键字一起使用以提供别名。要过滤SELECT语句,可以包含WHERE子句以提供过滤条件,并仅选择满足条件的所需条目。
- INSERT:允许在数据库表中添加或插入一行或多行。与VALUES关键字一起使用可以让您添加具有特定值的行。INSERT也可以与SELECT一起使用以插入预先选择的行。
- CREATE:是用于在SQL中创建元素的关键字。它通常与要创建的关键字一起使用,如CREATE DATABASE、CREATE TABLE、CREATE VIEW等。
- DELETE关键字:用于删除数据库中的记录。您应该始终小心使用它,以避免不必要的数据丢失。您可能会删除不想删除的记录。使用WHERE子句指定您希望删除的记录范围。
- UPDATE关键字:更新或更改现有记录中的现有数据。请注意,该记录必须已经存在。
- DROP关键字:删除或删除数据库中的表。
- SQL和PL/SQL之间的主要区别是什么?
SQL或结构化查询语言是一种用于与关系数据库通信的语言。它提供了一种操作和创建数据库的方式。另一方面,PL/SQL是SQL的一种方言,用于增强SQL的功能。它由Oracle Corporation在90年代初开发。它在SQL中添加了编程语言的过程特性。
- 数据定义语言是什么?
DDL或数据定义语言是指直接影响数据库结构的SQL命令。DDL是SQL命令分类的一种,它还包括数据操作语言(DML)、事务和安全性。DDL命令的一个特点是可以操作索引、对象、表、视图、触发器等语句。SQL中三个常用的DDL关键字是:
- 创建 – 用于创建一个表
创建表 表名 (列名 数据类型);
- 修改 – 用于修改表中的条目或已存在的列。
修改表 表名 [附加语法,如添加、删除、修改]
- 删除 – 用于删除或丢弃一个已存在的表以及其中的条目、约束、触发器、索引和权限。基本上是删除表。
删除表 表名;
- 数据操纵语言是什么?
DML或数据操作语言是一组被分类的命令,根据其能够为用户提供更改数据库中条目的权限。这可以通过在表中插入、检索、删除或更新数据来实现。以下是从这些核心功能中产生的常用DML语句的列表:
- SELECT – 用于突出显示表中的行并检索它。
SELECT [列名] FROM [表名] - UPDATE – 用于更新现有表中的条目。
UPDATE [表名] SET [值] - INSERT – 用于将条目插入到现有表中。
INSERT INTO [表名] - DELETE – 用于从现有表中删除条目
DELETE FROM [表名]
- 什么是事务控制语言(TCL)?
TCL是一类SQL命令,主要处理数据库事务和保存点。这些关键词将开发人员定义的SQL函数和逻辑实现到数据库的结构和行为中。这些TCL命令的示例包括:
- COMMIT – 用于提交事务
- ROLLBACK – 在发生错误时,通过此关键字调用事务回滚。
- SAVEPOINT – 表示回滚的还原点
- SET TRANSACTION – 设置事务的具体细节。
- 什么是数据控制语言(DCL)?
数据控制语言或DCL负责监督对用户的访问和限制,包括在SQL语句中所需的权限和权限。例如,DCL关键字有:
- GRANT – 这是一个DCL关键字,用于向用户提供对特定数据库的访问权限。
- REVOKE – 与GRANT关键字相反。撤销或收回给用户的特权。
- 定义数据库中的表和字段。
在数据库中,表被称为有组织的条目排列。它进一步分为单元格,其中包含表行的不同字段。字段指的是表示单个条目的数据结构。然后它们被进一步组织成记录。它们实际上保存了单个数据的基本单元。它们是数据内存分配的基本单元,并且可以访问。
- SQL中有哪些不同类型的键?
关键字是关系型数据库管理系统(RDMS)中的一个重要特性,它们实质上是将一个表与另一个表链接起来并通过管理列索引来促进快速数据检索和记录。不同类型的关键字包括:
- 主键——用于标识数据库表中的记录的唯一键。唯一意味着它不能为空值,并且在表中必须是唯一的。
- 候选键——独立识别一列或一组列的唯一字段,不需要对其他字段进行引用。
- 备用键——可以用作主键的替代键,但被认为是次要的。其区别在于备用键可以具有空值,只要列中有数据。这是一种也必须是唯一的候选键类型。
- 唯一键——除了空条目外,这些键还提供了防止行内重复数据的限制。
- 其他可用的关键字包括外键、超键和组合键。
- SQL中的不同类型的索引及其定义是什么?
- 唯一索引:防止在具有唯一索引列中出现重复条目。如果有主键可用,它们会自动生成。
- 聚集索引:用于根据键值对表格中的排序或编辑进行组织。每个表格只允许有一个聚集索引。
- 非聚集索引:相反,非聚集索引仅管理条目的逻辑顺序。它不管理排列,表格可以有多个非聚集索引。
- SQL和MySQL之间的区别是什么?
SQL是标准查询语言的缩写,是一种服务器编程语言,提供对数据库字段和列的交互。MySQL是一种数据库管理系统,而不是实际的编程语言,更具体地说是一种关系型数据库管理系统(RDMS)。然而,MySQL也实现了SQL语法。
- UNION和UNION ALL关键字在SQL中的作用及其区别是什么?
SQL中的UNION操作符将在SELECT语句中突出显示的多个集合合并在一起。集合的限制包括:(1)列数必须相同,(2)集合中的数据类型必须相同,以及(3)在SELECT语句中突出显示的列的顺序必须相同。它会自动消除SELECT语句中结果中的重复行。UNION ALL与UNION执行相同的功能,但它包括所有行,包括重复行。
SELECT C1, C2 FROM T1
UNION
SELECT Cx, Cy FROM T2;
- SQL中有哪些不同类型的连接操作?
使用JOIN关键字可以查询多个表中的条目。它配合不同的键值来查找这些条目,并且对字段之间的连接关系进行了考虑。
- 内连接:返回两个表中共有的行。
- 右连接:返回右边表的行,包括共有的行。
- 左连接:返回左边表的行,包括共有的行。
- 全连接:返回所有行,无论是否共有。
- 什么是规范化和反规范化?
归一化通过整理数据库中现有表格及其字段,以实现最小化的重复,用于尽量简化表格同时保留唯一字段。反规范化则允许从数据库中的所有规范化形式中检索字段。相对于归一化而言,它将冗余信息放入表格中。
- 我们什么时候可以使用WHERE子句和HAVING子句?
两个子句都接受用于检索字段的条件。区别在于WHERE子句仅用于静态非聚合列,而HAVING子句仅用于聚合列。
select order_id, SUM(sale_amount) as TotalSale
from SalesData
where quantity>1
group by order_id
having SUM(sale_amount) > 100;
- UNION、MINUS和INTERSECT之间有什么不同?
UNION关键字在SQL中用于合并多个SELECT查询,但会删除结果集中的重复项。INTERSECT关键字仅用于在多个表之间使用SELECT查询检索共同的行。MINUS关键字实质上是在两个SELECT查询之间进行减法运算。结果是第一个查询与第二个查询之间的差异。最终输出中将删除结果集中同时存在的任何行。
- 如何从表中选择10条记录?
- MySQL:使用limit子句,例如select * from Employee limit 10;
- Oracle:使用ROWNUM子句,例如SELECT * FROM Employee WHERE ROWNUM < 10;
- SQL Server:使用TOP子句,例如SELECT TOP 3 * FROM Employee;
- 在删除一个表中的元素导致另一个表中的元素被删除的情况下,如何保持数据库的完整性?
通过调用一个监听从表A中删除的任何元素并从表B中删除相应链接元素的SQL触发器来实现这一点。
- 将数据从表A复制到表B的过程是什么?
INSERT INTO TableB (columnOne, columnTwo, columnThree, ...)
SELECT columnOne, columnTwo, columnThree, ...
FROM TableA
WHERE added_condition;
- IN和EXISTS子句之间有什么区别?
两者之间的明显区别在于,相较于IN关键字,EXISTS关键字在执行速度上较快。这是因为IN关键字必须搜索所有现有记录,而EXISTS关键字在找到匹配记录后会自动停止。此外,IN语句在ResultSet内操作,而EXISTS关键字在虚拟表上操作。在这个上下文中,IN语句也不适用于与虚拟表相关联的查询,而EXISTS关键字则用于链接查询。
- 数据库管理中,ACID是什么的缩写?
ACID的全称是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。这个特性主要负责数据库系统的过程完整性。这意味着无论用户对数据库发起的数据事务是什么,都必须完整、准确,并具有持久性质。
- 在SQL中,触发器是什么?
数据库触发器是一个程序,它会在表或视图上发生某些事件(例如记录的插入、更新或删除)时自动执行。主要用于帮助我们维护数据库的完整性。
- 什么是自动增量?
当在表中插入新记录时,自动增量允许用户创建一个唯一的数字。在Oracle中,AUTO INCREMENT是关键字,在MySQL中为AUTO_INCREMENT,在SQL SERVER中可以使用IDENTITY关键字进行自增。通常,此关键字用于创建表的主键。
- 什么是排序规则(collation)?
排序是一套关于如何比较和排序字符的规则,同时也可以应用于字符串。在MSSQL和MySQL中,排序的工作原理基本相同,只有在某些排序选项(如UTF-8)上有所不同。除了正常的逐字符比较外,排序还可以根据ASCII表示来对字符串进行排序和比较。
- 递归存储过程是什么?
一个存储过程调用自身,直到达到某个边界条件。这个递归函数或过程帮助程序员可以无限次地使用同一组代码。
- SQL中使用哪些查询操作符用于模式匹配?
答案是LIKE操作符。LIKE操作符用于模式匹配,并且它可以被用作”-“。
- % – 匹配零个或多个字符。
- _(下划线)– 精确匹配一个字符。
- Hibernate 是什么,它与 SQL 有什么关系?
Hibernate是Java中的对象关系映射工具。Hibernate让我们能够编写面向对象的代码,并将其内部转换为本机SQL查询以针对关系数据库执行。Hibernate使用自己的语言,称为Hibernate查询语言(HQL),类似于SQL。区别在于HQL能够查询Hibernate的实体对象。Hibernate还有一种面向对象的查询语言,称为Criteria Query。对于那些在前端应用程序中主要使用对象的开发人员来说,这非常有益和有帮助,而Criteria Query可以满足这些对象的需求,甚至添加了类似SQL的安全性和限制访问等功能。
- 如何解决Oracle中的”ORA-00904: invalid identifier”错误?
通常,这个错误是由于在调用Oracle数据库中的列名时出现的语法错误导致的,注意错误代码中的ORA标识符。确保您输入了正确的列名。此外,要特别注意别名,因为它们是错误中作为无效标识符被引用的对象。
- 什么是SQL分析器?
SQL Profiler是一个图形用户界面,允许数据库开发人员监控和跟踪其数据库引擎的活动。它记录每个事件的活动并提供故障和差异的分析。它基本上是SQL中的诊断功能,可以调试性能问题,并提供更灵活的方式来查看跟踪文件中的哪个部分导致SQL事务阻塞。
- 我们如何将一个SQL数据库与现有的Android应用程序链接起来?
连接这两者将需要一个JDBC(Java Database Connectivity)驱动程序。此外,您还需要在build.gradle文件中添加相应的依赖项以及所需的权限和授权。
参考:维基百科