内容概览本文介绍的面试题包括以下内容。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技术支持:南京博盛蓝睿网络科技有限公司
南京思必达教育科技有限公司版权所有 百度统计