马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
单选题
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是一个有用的数据类型,用于存储逻辑值(TRUE或FALSE)
示例: 在表界说中模仿布尔值
使用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语句(如 GRANT、REVOKE 等)时,也会触发隐式提交,这是因为权限的授予或打消是立即见效的,需要被立即确认
DML(数据操纵语言)语句如INSERT、UPDATE和DELETE通常需要显式实行COMMIT来提交事务。
隐式提交
- 当在一个存储过程或函数中实行DML语句时,事务大概会自动在语句实行竣事时提交事务。这是最常见的隐式提交情况。
- 在批处理语句中,如果用户一次性实行多个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日记
9. 下列子句中,哪些可以包罗子查询(C, D)
A. GROUP BY
B. ORDER BY
C. WHERE
D. SELECT
解析:
GROUP BY 用于对查询结果举行分组,后面跟随的是分组的列名
ORDER BY 用于对查询结果举行排序, 后面跟排序的列名或表达式
WHERE 用于筛选行, 子查询可以嵌套在WHERE子句中, 用来生成筛选条件
SELECT 用于选择列, 子查询可以嵌套在SELECT中, 用来生成计算列或作为表达式的一部门
示例: 作为计算列的一部门
示例: 作为表达式的一部门
假设我们想要找出销售总额凌驾所有产品均匀销售总额的产品ID和销售总额
- SELECT
- ProductID,
- SUM(Amount) AS TotalSales
- FROM
- Sales
- GROUP BY
- ProductID
- HAVING
- SUM(Amount) > (SELECT AVG(TotalSales) FROM (
- SELECT SUM(Amount) AS TotalSales FROM Sales GROUP BY ProductID) AS SubTotals);
复制代码 在这个示例中,子查询(SELECT AVG(TotalSales) FROM (SELECT SUM(Amount) AS TotalSales FROM Sales GROUP BY ProductID) AS SubTotals)起首计算所有产品的销售总额的均匀值,然后外层查询使用这个均匀值来过滤那些销售总额凌驾均匀值的产品。
判断题
1. INT类型占用4字节存储空间(√ )
2.同一用户下的表和索引不能具有相同的名称(√)
解析:
在数据库中, 同一用户下对象名称需具有唯一性, 表和索引属于对象
3. MYSQL中, 对于字符串型数据, 空字符串就是NULL,对于数值型数据0就是NULL(×)
解析:
MYSQL中(或大多数数据库系统中), 空字符串是一个确定的字符串值,表现没有字符串内容;NULL代表的是缺失值,未知值,二者含义不同. 数值型数据0是一个具体的数值,也和表现未知的NULL不同
4. 在MYSQL中,UPDATE语句可以有WHERE子句和LIMIT子句(√ )
解析:
WHERE子句用来指定更新的条件,只对满足条件的行举行更新;
LIMIT子句可以限制更新的行数,即只更新指定数量的行
5. 下面的SQL肯定不会走索引吗?(×)
select * from client where client_name is null.
解析:
当 client_name 列存在索引,而且WHERE子句中使用IS NULL或IS NOT NULL来检查NULL值时,通常不会使用索引。这是因为NULL值在数据库中表现缺失或未知的数据,索引通常不包罗NULL值(大概对NULL值有特殊的处理方式),因此索引对于优化这类查询的资助有限。
但是并不意味着空值判断肯定不会走索引
空值判断使用索引的大概性
部门索引(Partial Index):
在某些数据库系统中(如PostgreSQL),可以创建部门索引,只针对满足特定条件的行举行索引。比方,可以创建一个只索引client_name为NULL的行的索引。 如果有这样的部门索引存在,那么查询WHERE client_name IS NULL大概会使用这个索引。
- CREATE INDEX idx_client_name_null ON client (client_name) WHERE client_name IS NULL;
复制代码 函数索引(Functional Index): 在Oracle和PostgreSQL等数据库中,可以创建函数索引,即对列的表达式举行索引。虽然直接对NULL举行索引大概不常见,但如果有相关的函数索引,大概会间接使用索引。
oracle
- CREATE INDEX idx_client_name_null ON client (client_name) WHERE client_name IS NULL;
复制代码 虽然表面上看起来没有直接使用函数,但实际上,这里的WHERE client_name IS NULL子句可以被视为一种特殊的函数应用。这是因为它在索引创建时对client_name列举行了条件筛选,只有当client_name为NULL时,相应的行才会被包罗在索引中。这种条件筛选可以看作是对列值的一种“函数”处理,因为它改变了索引中包罗的数据。
示例:
使用函数索引优化字符串长度查询
假设我们有一个表employees,其中包罗员工的姓名(name)字段。我们经常需要查询姓名长度凌驾某个特定值的员工。
- CREATE INDEX idx_name_length ON employees (LENGTH(name));
复制代码 数据库优化
某些数据库系统大概会对NULL值举行特殊处理,使得在某些情况下可以使用索引。
比方,
对于非唯一索引而言,MySQL 8.0 之前的版本在内部实现中将NULL视为相称,而且在索引中仅存储一次。不外,从MySQL 8.0开始,这个活动有了变革,NULL在非唯一索引中可以被存储多次。这意味着在某些情况下,包罗NULL值的索引可以资助优化查询性能,特殊是在使用IS NULL或IS NOT NULL条件时。比方,查询WHERE age IS NULL可以直接使用索引,而不需要回表查询。
然而,当在索引列上举行NULL值判断时,索引大概会失效,导致数据库引擎放弃使用索引而举行全表扫描。比方,查询WHERE name IS NULL大概无法有用使用索引。为了缓解索引失效的标题,可以使用组合索引,使得纵然其中一个字段包罗NULL值,整体索引仍能被使用
6. CREATE TABLE 语句中有界说主键的选项(√ )
解析:
通过PRYMARY KEY关键词来界说主键, 可在界说列时直接声明, 也可以在列界说之后统一声明
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |