2022 年 50 个 SQL 面试问题和答案

2022年 10月 12日 142.2k 0

以下是 SQL 面试问题和答案,适合新手和经验丰富的候选人获得他们梦想的工作。

1. 什么是 DBMS?

数据库管理系统 ( DBMS ) 是控制数据库的创建、维护和使用的程序。DBMS 可以称为文件管理器,它管理数据库中的数据,而不是将其保存在文件系统中。


2. 什么是关系型数据库?

RDBMS 代表关系数据库管理系统。RDBMS 将数据存储到表的集合中,表的列之间通过公共字段相关联。它还提供关系运算符来操作存储在表中的数据。

示例:SQL Server。


3.什么是SQL?

SQL 代表结构化查询语言,它用于与数据库进行通信。这是一种标准语言,用于执行从数据库中检索、更新、插入和删除数据等任务。

标准SQL 命令是 Select。


4. 什么是数据库?

数据库只不过是一种有组织的数据形式,便于访问、存储、检索和管理数据。这也称为可以通过多种方式访问​​的结构化数据形式。

示例:学校管理数据库、银行管理数据库。


5.什么是表和字段?

表是在具有列和行的模型中组织的一组数据。列可以分类为垂直,行是水平的。表具有指定数量的称为字段的列,但可以具有任意数量的行,称为记录。

例子:

表:员工。

字段:员工 ID、员工姓名、出生日期

数据:201456,大卫,1960 年 11 月 15 日


6.什么是主键?

主键是唯一指定行的字段的组合。这是一种特殊的唯一键,它具有隐式的 NOT NULL 约束。这意味着,主键值不能为 NULL。

7. 什么是唯一键?

唯一键约束唯一标识数据库中的每条记录。这为列或列集提供了唯一性。

主键约束在其上定义了自动唯一约束。但不是,在唯一密钥的情况下。

每个表可以定义许多唯一约束,但每个表只能定义一个主键约束。


8. 什么是外键?

外键是一个表,它可以与另一个表的主键相关联。需要通过用另一个表的主键引用外键来在两个表之间创建关系。


9. 什么是联接?

这是一个关键字,用于根据表的字段之间的关系从更多的表中查询数据。使用 JOIN 时,键起着重要作用。


10、join有哪些类型,分别解释一下?

有多种类型的连接可用于检索数据,这取决于表之间的关系。

  • 内部联接。

当表之间至少有一个匹配的行时,内连接返回行。

  • 右加入。

右连接返回表和右侧表的所有行之间共有的行。简单地说,即使左侧表中没有匹配项,它也会返回右侧表中的所有行。

  • 左连接。

左连接返回表和左侧表的所有行之间共有的行。简单地说,即使右侧表中没有匹配项,它也会返回左侧表中的所有行。

  • 完全加入。

当任一表中存在匹配行时,完全连接返回行。这意味着,它返回左侧表中的所有行和右侧表中的所有行。


11. 什么是归一化?

规范化是通过组织数据库的字段和表来最小化冗余和依赖性的过程。规范化的主要目的是添加、删除或修改可以在单个表中创建的字段。


12. 什么是非规范化?

DeNormalization 是一种用于从较高范式到较低范式的数据库中访问数据的技术。它也是通过合并相关表中的数据将冗余引入表的过程。


13. 有哪些不同的归一化?

借助案例研究,可以很容易地理解数据库规范化。正常形式可以分为6种形式,下面分别解释-。

 

数据库范式 数据库范式

  • 第一范式(1NF):

这应该从表中删除所有重复的列。为相关数据创建表并识别唯一列。

  • 第二范式(2NF):

满足第一范式的所有要求。将数据子集放在单独的表中,并使用主键在表之间创建关系。

  • 第三范式(3NF):

这应该满足 2NF 的所有要求。删除不依赖于主键约束的列。

  • 第四范式(4NF):

如果没有数据库表实例包含两个或多个描述相关实体的独立和多值数据,则它处于第 4范式

  • 第五范式(5NF):

一个表只有在 4NF 中才属于第 5 范式,并且不能在不丢失数据的情况下将其分解为任何数量的较小表。

  • 第六范式(6NF):

第六范式尚未标准化,但是,数据库专家已经讨论了一段时间。希望我们能在不久的将来对第 6 范式有一个清晰和标准化的定义……


14. 什么是视图?

视图是一个虚拟表,它由表中包含的数据子集组成。视图实际上并不存在,并且存储空间更少。视图可以有一个或多个表的数据组合,它取决于关系。


15. 什么是索引?

索引是允许更快地从表中检索记录的性能调整方法。索引为每个值创建一个条目,检索数据会更快。


16. 有哪些不同类型的索引?

有三种类型的索引-。

  • 唯一索引。

如果列是唯一索引的,则此索引不允许该字段具有重复值。定义主键时可以自动应用唯一索引。

  • 聚集索引。

这种类型的索引重新排序表的物理顺序并根据键值进行搜索。每个表只能有一个聚集索引。

  • 非聚集索引。

NonClustered Index 不会改变表的物理顺序并保持数据的逻辑顺序。每个表可以有 999 个非聚集索引。


17. 什么是光标?

数据库游标是一个控件,可以遍历表中的行或记录。这可以看作是指向一组行中的一行的指针。游标对于诸如检索、添加和删除数据库记录等遍历非常有用。


18. 什么是关系,它们是什么?

数据库关系定义为数据库中表之间的连接。有多种数据基础关系,它们如下:

  • 一对一的关系。
  • 一对多关系。
  • 多对一关系。
  • 自参照关系。

19. 什么是查询?

数据库查询是为了从数据库中获取信息而编写的代码。查询可以设计成与我们对结果集的期望相匹配。简单地说,是对数据库的一个问题。


20.什么是子查询?

子查询是另一个查询中的查询。外部查询称为主查询,内部查询称为子查询。子查询总是先执行,子查询的结果传递给主查询。让我们看看子查询语法——

MySQL 子查询教程与示例

MyFlix 视频库的一个常见客户抱怨是电影标题数量少。管理层希望为片名最少的类别购买电影。您可以使用类似的查询

SELECT category_name FROM categories WHERE category_id =( SELECT MIN(category_id) from movies);


21.子查询有哪些类型?

有两种类型的子查询——相关和非相关。

关联子查询不能被视为独立查询,但它可以引用主查询列表中列出的表中的列。

Non-Correlated 子查询可以被认为是独立查询,子查询的输出被替换到主查询中。


22.什么是存储过程?

存储过程是一个由许多 SQL 语句组成的函数来访问数据库系统。几个 SQL 语句被合并到一个存储过程中,并在需要时随时随地执行它们。


23.什么是触发器?

数据库触发器是自动执行以响应数据库中表或视图上的某些事件的代码或程序。主要是,触发器有助于维护数据库的完整性。

示例:当将新学生添加到学生数据库时,应在考试、分数和出勤表等相关表中创建新记录。


24. DELETE 和 TRUNCATE 命令有什么区别?

DELETE 命令用于从表中删除行,而 WHERE 子句可用于条件参数集。在 delete 语句之后可以执行 Commit 和 Rollback。

TRUNCATE 从表中删除所有行。截断操作无法回滚。


25. 什么是局部变量和全局变量,它们的区别是什么?

局部变量是可以在函数内部使用或存在的变量。其他函数不知道它们,并且这些变量不能被引用或使用。每当调用该函数时,都可以创建变量。

全局变量是可以在整个程序中使用或存在的变量。在全局中声明的相同变量不能在函数中使用。每当调用该函数时,都无法创建全局变量。


26. 什么是约束?

约束可用于指定对表的数据类型的限制。可以在创建或更改表语句时指定约束。约束样本是。

  • 非空。
  • 查看。
  • 默认。
  • 独特的。
  • 首要的关键。
  • 外键。

27. 什么是数据完整性?

数据完整性定义了存储在数据库中的数据的准确性和一致性。它还可以定义完整性约束,以便在数据输入应用程序或数据库时对数据实施业务规则。


28. 什么是自动增量?

自动增量关键字允许用户创建一个唯一编号,以便在将新记录插入表时生成。Oracle中可以使用AUTO INCREMENT关键字,SQL SERVER中可以使用IDENTITY关键字。

大多数情况下,只要使用 PRIMARY KEY,就可以使用这个关键字。


29.集群索引和非集群索引有什么区别?

聚集索引用于通过更改记录的存储方式轻松地从数据库中检索数据。数据库按设置为聚集索引的列对行进行排序。

非聚集索引不会改变它的存储方式,而是在表中创建一个完全独立的对象。它在搜索后指向原始表行。


30. 什么是数据仓库?

数据仓库是来自多个信息源的数据的中央存储库。这些数据被整合、转换并可供挖掘和在线处理使用。仓库数据有一个称为数据集市的数据子集。


31.什么是自加入?

自联接设置为用于与自身进行比较的查询。这用于将列中的值与同一表中同一列中的其他值进行比较。

ALIAS ES 可用于同表比较。


32. 什么是交叉连接?

交叉连接定义为笛卡尔积,其中第一个表中的行数乘以第二个表中的行数。如果假设在交叉连接中使用 WHERE 子句,那么查询将像 INNER JOIN 一样工作。


33. 什么是用户定义函数?

用户定义函数是为在需要时使用该逻辑而编写的函数。不必多次编写相同的逻辑。相反,可以在需要时调用或执行函数。


34. 用户定义函数有哪些类型?

三种类型的用户定义函数是。

  • 标量函数。
  • 内联表值函数。
  • 多语句值函数。

标量返回单元,变体定义了返回子句。其他两种类型的返回表作为返回。


35. 什么是排序规则?

排序规则被定义为一组规则,这些规则决定了如何对字符数据进行排序和比较。这可用于比较 A 和其他语言字符,还取决于字符的宽度。

ASCII 值可用于比较这些字符数据。


36. 不同类型的校对敏感度有哪些?

以下是不同类型的校对敏感度 -。

  • 区分大小写 – A 和 a 以及 B 和 b。
  • 口音敏感度。
  • Kana Sensitivity – 日文假名字符。
  • 宽度敏感度——单字节字符和双字节字符。

37. 存储过程的优缺点?

存储过程可以用作模块化编程 - 意味着创建一次,存储并在需要时多次调用。这支持更快的执行而不是执行多个查询。这减少了网络流量并为数据提供了更好的安全性。

缺点是只能在数据库中执行,占用数据库服务器更多的内存。


38. 什么是在线事务处理 (OLTP)?

在线事务处理 (OLTP) 管理基于事务的应用程序,可用于数据输入、数据检索和数据处理。OLTP 使数据管理变得简单而高效。与 OLAP 系统不同,OLTP 系统的目标是为实时事务提供服务。

示例 – 每天的银行交易。


39. 什么是条款?

SQL 子句被定义为通过为查询提供条件来限制结果集。这通常会从整个记录集中过滤一些行。

示例 – 具有 WHERE 条件的查询

具有 HAVING 条件的查询。


40.什么是递归存储过程?

一个存储过程,它自己调用直到它达到某个边界条件。此递归函数或过程可帮助程序员多次使用同一组代码。


41. 什么是联合、减号和交互命令?

UNION 运算符用于合并两个表的结果,并消除表中的重复行。

MINUS 运算符用于从第一个查询返回行,而不是从第二个查询返回行。第一个和第二个查询的匹配记录以及来自第一个查询的其他行将显示为结果集。

INTERSECT 运算符用于返回两个查询返回的行。


42. 什么是 ALIAS 命令?

别名可以赋予表或列。此别名可以在 WHERE 子句中引用以标识表或列。

例子:

Select st.StudentID, Ex.Result from student st, Exam as Ex where st.studentID = Ex. StudentID

这里,st 是指 student表的别名,Ex 是指exam表的别名。


43. TRUNCATE 和 DROP 语句有什么区别?

TRUNCATE 从表中删除所有行,并且不能回滚。DROP 命令从数据库中删除一个表并且操作不能回滚。


44. 什么是聚合函数和标量函数?

聚合函数用于评估数学计算并返回单个值。这可以从表中的列中计算出来。标量函数根据输入值返回单个值。

例子:

聚合 – max(), count – 根据数字计算。

标量——UCASE()、NOW()——根据字符串计算。


45. 如何从现有表创建一个空表?

示例:

Select * into studentcopy from student where 1=2

在这里,我们将student表复制到另一个具有相同结构的表中,并且没有复制任何行。


46. 如何从两个表中取出共同的记录?

通用记录结果集可以通过-来实现。

Select studentID from student INTERSECT Select StudentID from Exam

47. 如何从表中获取备用记录?

可以获取奇数和偶数行号的记录-。显示偶数-。

Select studentId from (Select rowno, studentId from student) where mod(rowno,2)=0

显示奇数-。

Select studentId from (Select rowno, studentId from student) where mod(rowno,2)=1

from (Select rowno, studentId from student) where mod(rowno,2)=1.[/sql]


48. 如何从表中选择唯一记录?

使用 DISTINCT 关键字从表中选择唯一记录。

Select DISTINCT StudentID, StudentName from Student.

49. 用于获取字符串前 5 个字符的命令是什么?

有很多方法可以获取字符串 - 的前 5 个字符。

Select SUBSTRING(StudentName,1,5) as studentname from student
Select LEFT(Studentname,5) as studentname from student

50.查询中使用哪个运算符进行模式匹配?

LIKE 运算符用于模式匹配,可以用作-。

  1. % – 匹配零个或多个字符。
  2. _(下划线) – 只匹配一个字符。

例子 -。

Select * from Student where studentname like 'a%'
Select * from Student where studentname like 'ami_'

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论