数据开发岗位: 面试测试题(2025年)

单选题

1.以下哪种方式只能用于等价连接 (A)

A HASH JOIN

B NESTED LOOPS

C SORT MERGE JOIN

解析:

A 哈希连接

通常只能用于等价连接

它通过在一张表上构建哈希表,然后扫描另一张表并利用哈希值进行匹配,一般是等值条件

B 嵌套循环连接

等价连接和非等价连接均可以. 它通过内外两层循环来匹配两张表的数据, 外层循环读取一张表的每一行,内层循环遍历另一张表进行匹配,连接条件可以是各种比较条件, 包括 等号(此时是等价连接)

C 排列合并连接

2. 下面哪个语句会报错 (A)

A . ALTER SEQUENCE seq1 START WITH 1;

B. ALTER SEQUENCE seq1 NOMINVALUE;

C. ALTER SEQUENCE seq1 NOCACHE;

D. ALTER SEQUENCE seq1 MAXVALUE 90;

解释:

A 在大多数数据库中, 序列(SEQUNECE) 一旦创建, 其起始值不能通过ALTER SEQUENCE修改

B 是设置序列无最小值

C 设置序列不缓存值

D 设置序列的最大值为90

3.表T中,C1列的差异值有100万,C2列的差异值有100. 当查询下面的sql时, 关于索引的说法正确的是 SELECT COUNT(*) FROM T WHERE C1=1 AND C2=2; (B)

A . 索引(C2,C1) 比索引(C1,C2) 效率高

B. 索引(C1,C2) 比索引(C2,C1) 效率高

C. 索引(C1,C2) 和索引(C2,C1) 效率一样高

解析:

4. 下面哪个类型不是oracle支持的内部数据类型

A. FLOAT

B. INTEGER

C. CHAR

D. DATETIME

解析:

A. FLOAT oracle支持的浮点数据类型,用于存储带小数的数值

B. INTEGER oracle 支持的整数数据类型

C. CHAR oracle支持的固定长度字符数据类型

D. DATETIME 在MySQL 和 SQL Server 中是标准数据类型,存储日期和时间,

在MYSQL中的格式为YYYY-MM-DD HH:MM:SS;

ORACLE中存储日期和时间常用的是DATE和TIMESTAMP类型

5.如果只需要存储日期(比如交易日), 以下哪个类型占用的存储空间最小(B)

A. VARCHAR2

B. DATE

C. NUMBER

D. TIMESTAMP

解析:

A. VARCHAR2

  • 特点 :VARCHAR2 是一种可变长度的字符类型,用于存储字符串

  • 存储空间:VARCHAR2 的存储空间取决于实际存储的字符串长度。如果存储日期(如"2025-03-05"),至少需要占用 10 个字符的空间(每个字符通常占用 1 字节),加上长度信息,实际占用空间可能更大。

B. DATE

  • 特点:DATE 是专门用于存储日期和时间的类型,包含年、月、日、时、分、秒。

  • 存储空间 :在大多数数据库系统中,DATE 类型通常占用 7 字节 的固定空间(具体实现可能因数据库而异,但通常为固定大小)。

C. NUMBER

  • 特点 :NUMBER 是一种数值类型,用于存储数字

  • 存储空间:NUMBER 的存储空间取决于其精度和范围。如果用 NUMBER 来存储日期(如通过序列化日期为数字),可能需要占用较大的空间(例如,存储年月日为一个数字,如 20250305,可能需要占用 4 字节或更多)。

  • 适用性:NUMBER 不适合直接存储日期,因为它无法直接表示日期的结构(如年、月、日)。

D. TIMESTAMP

  • 特点:TIMESTAMP 是一种更精确的日期时间类型,包含年、月、日、时、分、秒,以及小数秒(纳秒)。

  • 存储空间 :TIMESTAMP 通常占用 11 字节 或更多(具体取决于数据库实现),因为它需要存储更精确的时间信息。

  • 适用性 :虽然可以存储日期,但占用空间比 DATE 类型大,且对于只需要存储日期(如交易日)的场景,精度过高是不必要的

6. 某会话对T表进行了一个INSERT操作, 但是还没有提交,下面说法正确的是 (D)

A. 其他会话对T表的INSERT操作将会被阻塞,直到该会话提交或回滚

B. 其他会话对T表的SELECT 操作将会被阻塞, 直到该会话提交或回滚

C. 该会话可以查询T表, 但只有提交后才能查到这些新插入的记录

D. 即使未提交, 该会话也可以查询到这些新插入的记录

解释:

A:不正确。其他会话对T表的INSERT操作不会被阻塞,除非数据库系统使用了某种形式的锁机制来管理并发写入,但这与事务是否提交无关。

B:不正确。其他会话对T表的SELECT操作通常不会被阻塞,除非存在锁竞争。在大多数情况下,SELECT操作可以并发执行,除非事务隔离级别设置为可重复读或串行化。

C:不正确。**该会话在事务中可以查询到新插入的记录,即使事务尚未提交。**这是因为事务内部的操作是可见的。

D :事务的局部性:在一个数据库事务中,一个会话(或事务)对数据的更改对其他会话是不可见的,直到该事务提交。但是,事务内部的操作是可见的,这意味着事务中的操作可以"看到"该事务中之前所做的所有更改。

未提交读(Uncommitted Read):虽然在大多数数据库系统中,未提交的更改对其他事务是不可见的,但在同一事务内部,即使更改尚未提交,事务也可以"看到"这些更改。这是事务隔离级别的一个特性,确保事务内部操作的一致性。

自动提交(Autocommit):在某些数据库系统中,每个单独的SQL语句都被视为一个事务,并且默认情况下是自动提交的。在这种情况下,即使没有显式的提交语句,每个操作也会立即对当前会话可见。

7.Oracle中, 用于PL/SQL程序输出调试信息的内置程序包是(A)

A. DBMS_OUTPUT

B. DBMS_STANDARD

C. DBMS_LOB

D. DBMS_ALERT

解释:

A. DBMS_OUTPUT 通过PUT_LIINE等过程可以把变量值,提示信息等输出到控制台, 方便调试程序

B. DBMS_STANDARD Oracle的系统标准包,定义了一些基本的数据类型,异常信息和子程序等

C. DBMS_LOB 主要用于处理大对象数据类型(如CLOB,BLOB等), 提供了一系列操作大对象数据的函数和过程

D. DBMS_ALERT 用于数据库会话之间进行异步通信和事件通知

8.某个事务由两条语句组成, 第一条语句被成功执行,但是第二条由于违反约束而失败,此时会出现什么情况?(C)

C. 整个事务都会回滚

解释:

事务具有原子性,即事务中的操作要么全部成功提交,要么全部失败回滚. 当一条事务由多条语句组成,只要其中任何一条语句因为违反约束或者是其他原因执行失败, 整个事务就会回滚, 之前成功执行的语句结果也会被撤销, 以保证数据的一致性和完整性

8. 下面哪个赋值语句效率更高(B)

A. SELECT 1 INTO V FROM DUAL;

B. V :=1;

解析:

A. SELECT 1 INTO V FROM DUAL; 是通过SQL查询的方式从dual 表(oracle中的伪表,用于单行单列查询) 中选取值1并赋值给变量V, 这需要进行SQL解析,执行查询等一系列操作

B. V :=1; 是PL/SQL中的直接赋值语句,直接将值1赋值给变量V

9.在Oracle中, 当控制一个显示游标时,下面哪个命令包含INTO子句(C)

A. OPEN

B. CURSOR

C. FETCH

D. CLOSE

解释:

A. OPEN 语句用于打开游标, 语法: OPEN 游标名

B. CURSOR 用于声明游标的关键字

语法: CURSOR 游标名 IS select语句

C. FETCH 语句用于从游标中提取数据, 并把数据存储到变量中,

语法: FETCH 游标名 INTO 变量列表

D. CLOSE 语句用于关闭游标; 语法: CLOSE 游标名

10. Oracle中, 不属于游标属性的是(D)

A. %NOTFOUND

B. %FOUND

C. %ISOPEN

D. %ROWTYPE

解释:

游标的4个属性如下

游标名%ROWCOUNT:返回游标中已处理的行数

游标名%FOUND:是否存在,为true时,表示游标有数据, false表示没有数据

游标名%NOTFOUND:和 FOUND 相反,为 true 表示游标中没有数据,比如用 fetch into 取数据,取完最后一条后,会变为true

游标名%ISOPEN:判断游标是否打开,为true 时,表示游标打开, false表示关闭

%ROWTYPE

用于声明一个记录变量,该变量的字段与表或游标中的列具有相同的名称和数据类型。

用法:

表 %ROWTYPE:用于声明一个变量,其结构与表中的一行完全一致。

复制代码
DECLARE
  record_variable table_name%ROWTYPE;

游标 %ROWTYPE:用于声明一个变量,其结构与游标查询返回的行一致

复制代码
DECLARE
  CURSOR cursor_name IS SELECT column_list FROM table_name;
  record_variable cursor_name%ROWTYPE;

11. 按照NAME字段降序排列,写法正确的是(A)

A. ORDER BY NAME DESC

解析:

desc是降序; asc是升序(默认)

多选题

1.下列哪些声明是不合法的 (A)

A. DECLARE v_name, v_dept varchar2(10);

B. DECLARE v_date boolean;

C. DECLARE v_amount number(10, 2) :=5000;

D. DECLARE v_test number(10);

解析:

A. 正确的声明为

DECLARE v_name varchar2(10);

DECLARE v_dept varchar2(10);

B. Oracle数据库中没有 boolean的数据类型; 可以通过 NUMBER(1)CHAR(1) 来模拟布尔值; 但在PL/SQL(Oracle的程序设计语言)中,BOOLEAN是一个有效的数据类型,用于存储逻辑值(TRUEFALSE

示例: 在表定义中模拟布尔值

使用NUMBER(1)

复制代码
CREATE TABLE example (
    id NUMBER PRIMARY KEY,
    is_active NUMBER(1) CHECK (is_active IN (0, 1)) -- 0 表示 FALSE,1 表示 TRUE
);

使用CHAR(1)

复制代码
CREATE TABLE example (
    id NUMBER PRIMARY KEY,
    is_active CHAR(1) CHECK (is_active IN ('Y', 'N')) -- 'Y' 表示 TRUE,'N' 表示 FALSE
);

示例 : PL/SQL中使用BOOLEAN类型

复制代码
DECLARE
    is_active BOOLEAN := TRUE;
BEGIN
    IF is_active THEN
        DBMS_OUTPUT.PUT_LINE('Active');
    ELSE
        DBMS_OUTPUT.PUT_LINE('Inactive');
    END IF;

MySQL 提供了 BIT 类型,但也可以使用 TINYINT 来存储布尔值

复制代码
CREATE TABLE example (
    id INT PRIMARY KEY,
    is_active TINYINT(1) DEFAULT 0 -- 0 表示 FALSE,1 表示 TRUE
);

2.以下关于NULL的说法正确的有(A, B, C, D)

A. 索引中不存储索引列全为NULL的记录

B. 所有对NULL进行的算术运算,结果都是NULL

C. count(column) 不包括对NULL的统计,但count(*) 包括对NULL的统计

D. 对字段进行降序排序时,如果不指定NULL的排序规则, 则NULL排在最后

解释:

A. 这是为了节省空间和提高索引效率

D. 在Oracle中,NULL值被认为是未知的,它既不是大于也不是小于任何其他值,所以在升序排序时,它被认为"小于"任何其他值,而在降序排序时,它被认为"大于"任何其他值

  • **降序排序(ORDER BY ... DESC)**时,NULL值会排在最后。

  • **升序排序(ORDER BY ... ASC)**时,NULL值会排在最前。

3. 以下哪些不是DML (C, D)

A. DELETE

B. INSERT

C. TRUNCATE

D. CREATE

解析:

AB : 删除(delete)和插入行(insert)是DML数据操纵语言

CD: 是DDL数据定义语言; TRUNCATE清空表中所有数据; CREATE创建数据库对象

4.下面哪些语句会隐式提交事务?(A, B)

A. CREATE

B. TRUNCATE

C. UPDATE

D. SELECTE

解析;

某些语句会隐式地提交事务,这意味着它们不仅执行了指定的操作,而且还自动结束了当前的事务,并开始了一个新的事务。

A. CREATE

创建新的数据库对象,如表、索引、视图、触发器等。在大多数数据库系统中,CREATE 语句会隐式提交事务。这是因为创建数据库对象是一个不可逆的操作,一旦创建成功,对象就存在于数据库中,因此需要立即将这个更改提交,以确保数据库的一致性和完整性。

B. TRUNCATE

用于快速删除表中的所有行。与 DELETE 语句不同,TRUNCATE 不会逐行删除数据,而是直接释放表的数据页,这使得操作非常快。由于 TRUNCATE 也是一个不可逆的操作,它通常也会隐式提交事务,以确保数据库的一致性。

C. UPDATE

用于修改表中的数据。通常不会隐式提交事务。这是因为 UPDATE 操作是可逆的,可以通过 ROLLBACK 命令撤销。因此,UPDATE 操作通常发生在一个事务中,直到显式地执行 COMMIT 或 ROLLBACK 命令

D. SELECT

数据查询语言(DQL), 用于查询数据, 不涉及事务提交操作,更不会隐式地提交事务

隐式提交

>>部分DDL语句

>>在存储过程/函数中使用的DML语句

>>一次性执行多个DML语句或者多个查询语句(批处理)

常见的DDL语句会有隐式提交的有(不是全部DDL语句都有)

  • CREATE, ALTER, DROP, TRUNCATE, RENAME

执行DCL语句(如 GRANTREVOKE 等)时,也会触发隐式提交,这是因为权限的授予或撤销是立即生效的,需要被立即确认

DML(数据操作语言)语句如INSERTUPDATEDELETE通常需要显式执行COMMIT来提交事务。

隐式提交

  1. 当在一个存储过程或函数中执行DML语句时,事务可能会自动在语句执行结束时提交事务。这是最常见的隐式提交情况。

  2. 在批处理语句中,如果用户一次性执行多个DML语句或者多个查询语句,Oracle会自动将这些操作合并为一个批处理语句,并在执行完毕后进行隐式提交操作

5. 以下关于绑定变量的说法正确的有(B, C, D)

A. 同一个SQL的所有绑定变量可以具有相同的命名

B. 存在数据倾斜的情况下, 使用绑定变量可能生成较差的执行计划

C. 绑定变量可以降低SQL注入攻击的风险, 提高安全性

D. 绑定变量可以降低硬解析

解析:

A. 在SQL中使用绑定变量时,通常建议每个绑定变量都有唯一的名称,以避免混淆和潜在的错误

B. 存在数据倾斜的情况下, 由于绑定变量在SQL解析阶段无法获得具体值, 优化器可能生成不符合实际数据分布的执行计划

C.绑定变量将数据和SQL分离,恶意用户难以通过输入改变SQL结构, 从而降低SQL注入攻击的风险

D. 绑定变量使相似的SQL语句可以复用执行计划,减少SQL语句硬解析次数, 提高数据库性能

6. 以下哪些是Oracle支持的正则表达式函数(A, B, C,D)

A. REGEXP_REPLACE

B. REGEXP_LIKE

C. REGEXP_INSTR

D. REGEXP_SUBSTR

解析:

A. REGEXP_REPLACE 使用正则表达式匹配字符串,并将指定的部分替换为指定的部分

B. REGEXP_LIKE 使用正则表达式判断一个字符串是否匹配的正则表达式,返回true或false

C. REGEXP_INSTR 使用正则表达式在字符串中搜索指定字符串,返回匹配项的起始位置

D. REGEXP_SUBSTR 使用正则表达式从字符串中提取匹配的子字符串

7.以下哪些函数可以用作分析函数

A. LAG

B. COUNT

C. RANK

D. ROW_NUMBER

解析:

A. LAG

LAG 是一个分析函数,它从当前行向前(即向结果集的开始方向)查看,并返回指定列中给定偏移量的值。如果没有指定偏移量,默认为1。

B. COUNT

COUNT 通常用作聚合函数,用于计算分组中的行数。然而,COUNT 也可以作为分析函数使用,当它与OVER子句一起使用时,可以计算直到当前行的所有行的数量。

C. RANK

RANK 是一个分析函数,它为结果集中的每个行分配一个唯一的排名,如果两个值相同,则分配相同的排名,并在后续的排名中留下空位。

D. ROW_NUMBER

ROW_NUMBER 是一个分析函数,它为结果集中的每个行分配一个唯一的连续整数,通常用于数据的排序。

因此,所有这些函数(A、B、C、D)都可以用作分析函数,只要它们与OVER子句一起使用

复制代码
SELECT column1, COUNT(column1) OVER() AS total_count, 
       RANK() OVER(ORDER BY column2) AS rank, 
       ROW_NUMBER() OVER(ORDER BY column3) AS row_num, 
       LAG(column4, 1) OVER(ORDER BY column5) AS prev_value
FROM table_name;

8. 以下关于truncate 和delete 的说法正确的有(A, B, C)

A. delete不能降低高水位线, 但被释放的空间可以被再次使用

B. truncate 产生的redo(重做)日志比delete少得多

C. 整表删除时,通常truncate比delete快

D. truncate删除的数据可以被闪回

解释:

B. truncate是DDL操作, 会快速删除表中所有的数据, 产生的redo日志很少

delete是DML操作,会为每一条删除记录产生redo日志

待续....

相关推荐
Baihai_IDP2 小时前
为什么 AI 巨头们放弃私有壁垒,争相拥抱 Agent Skills
人工智能·面试·llm
Moment2 小时前
Agent 开发本质上就是高级点的 CRUD
前端·后端·面试
哈里谢顿13 小时前
0305乒乓xx agent运维开发岗面试记录
面试
哈里谢顿13 小时前
0309面试二总结
面试
哈里谢顿13 小时前
0309面试一记录
面试
哈里谢顿13 小时前
0310面试二记录
面试
哈里谢顿14 小时前
0310面试记录一
面试
boooooooom16 小时前
讲清 Proxy + effect + track/trigger 流程
javascript·vue.js·面试
豆苗学前端17 小时前
彻底讲透浏览器缓存机制,吊打面试官
前端·javascript·面试
zone773917 小时前
006:RAG 入门-面试官问你,RAG 为什么要切块?
后端·算法·面试