2026年OracleOCA数据库管理员认证考试真题题库_第1页
2026年OracleOCA数据库管理员认证考试真题题库_第2页
2026年OracleOCA数据库管理员认证考试真题题库_第3页
2026年OracleOCA数据库管理员认证考试真题题库_第4页
2026年OracleOCA数据库管理员认证考试真题题库_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

2026年OracleOCA数据库管理员认证考试真题题库第一部分:选择题(每题2分,共40题,共80分)1.关于Oracle数据库实例,以下哪项描述是正确的?A.一个实例可以同时挂载并打开多个数据库。B.一个数据库在同一时间只能被一个实例挂载和打开。C.实例启动时,必须指定要挂载的数据库名称。D.实例的后台进程在数据库关闭后会立即全部终止。答案:B解析:在单实例环境中,一个Oracle数据库在同一时间只能被一个实例挂载和打开。选项A错误,一个实例一次只能挂载一个数据库。选项C错误,实例启动(NOMOUNT状态)时不需要数据库名称,挂载(MOUNT)时才需要。选项D错误,部分后台进程(如PMON)在实例完全关闭前可能仍会运行。2.用户SCOTT执行了以下语句:`CREATETABLEemp_copyASSELECTFROMemp;`随后他尝试删除原表:`DROPTABLEemp;`但操作失败。最可能的原因是什么?2.用户SCOTT执行了以下语句:`CREATETABLEemp_copyASSELECTFROMemp;`随后他尝试删除原表:`DROPTABLEemp;`但操作失败。最可能的原因是什么?A.当前用户没有DROPANYTABLE权限。B.表`emp`上存在未提交的事务。C.表`emp_copy`通过外键约束引用了表`emp`。D.表`emp`被另一个用户锁定了。答案:C解析:`CREATETABLE...ASSELECT`不会自动创建外键约束,但题目中`emp_copy`可能通过某种方式(例如,在创建后通过ALTERTABLE添加)引用了`emp`表的主键。如果存在启用的外键约束引用`emp`,则直接删除`emp`会违反参照完整性,导致失败。选项A,SCOTT通常可以删除自己拥有的表。选项B和D会导致等待或报错,但错误信息通常不同,最符合“失败”描述的参照完整性约束违反是C。3.查看当前数据库字符集,应该查询以下哪个数据字典视图?A.`NLS_DATABASE_PARAMETERS`B.`NLS_INSTANCE_PARAMETERS`C.`NLS_SESSION_PARAMETERS`D.`V$NLS_PARAMETERS`答案:A解析:`NLS_DATABASE_PARAMETERS`显示数据库的永久性NLS参数,如字符集。`NLS_INSTANCE_PARAMETERS`显示实例参数。`NLS_SESSION_PARAMETERS`显示当前会话参数。`V$NLS_PARAMETERS`也显示会话参数。4.管理员需要确保即使没有活动的重做日志文件组,数据库也能继续运行。他应该采取什么措施?A.创建更多的重做日志文件组。B.将数据库置于归档日志模式。C.为每个重做日志组添加更多的成员。D.增加重做日志缓冲区的大小。答案:C解析:重做日志组是循环使用的。当一个组写满后,LGWR会切换到下一个组。如果下一个组因为介质故障(例如成员文件损坏)而无法写入(即该组所有成员都不可用),实例会挂起。为每个组添加多个成员(多路复用)可以防止因单个成员文件损坏导致整个组不可用,从而保证数据库持续运行。选项A增加组数不能解决单个组所有成员损坏的问题。选项B(归档)与可用性相关,但主要针对恢复。选项D影响性能,不解决文件损坏问题。5.以下哪个SQL语句会在执行时隐式地提交当前事务?A.`CREATEINDEX`B.`SELECT...FORUPDATE`C.`SAVEPOINTs1;`D.`ROLLBACKTOs1;`答案:A解析:在Oracle中,DDL语句(如`CREATEINDEX`)会在执行前后自动执行隐式提交。`SELECT...FORUPDATE`是DML,不会提交。`SAVEPOINT`和`ROLLBACKTO`是事务控制语句,不会提交事务。6.关于SQL查询:`SELECTdeptno,AVG(sal)FROMempWHEREAVG(sal)>2000GROUPBYdeptno;`执行结果是?A.显示每个部门平均工资大于2000的部门编号和平均工资。B.报告一个错误。C.先计算所有部门的平均工资,然后过滤出大于2000的部门。D.显示所有部门的平均工资,但只列出大于2000的值,其他为NULL。答案:B解析:聚合函数(如`AVG`)不能在`WHERE`子句中直接用于过滤分组结果。过滤分组结果应使用`HAVING`子句。正确的写法是:`SELECTdeptno,AVG(sal)FROMempGROUPBYdeptnoHAVINGAVG(sal)>2000;`。7.控制文件包含以下哪些信息?(选择所有正确答案)A.数据库名称和创建时间戳B.表空间和数据文件的名字与位置C.当前重做日志序列号D.用户的密码哈希值E.归档日志的历史记录答案:A,B,C,E解析:控制文件是二进制文件,记录数据库的物理结构,包括数据库名、数据文件和重做日志文件的位置、当前日志序列号、检查点信息、RMAN备份元数据等。用户密码哈希值存储在数据字典表(如`USER$`)中,而非控制文件。8.执行`ALTERSYSTEMSWITCHLOGFILE;`命令的主要作用是什么?A.强制进行一次日志切换,无论当前重做日志组是否已满。B.仅当当前重做日志组已满时,才进行日志切换。C.手动触发数据库检查点。D.备份当前活动的重做日志文件。答案:A解析:`ALTERSYSTEMSWITCHLOGFILE`命令强制日志写入进程(LGWR)停止写入当前重做日志组,并开始写入下一个可用的重做日志组,实现手动日志切换。这与组是否已满无关。9.使用`WHERElast_nameLIKE‘_A%’`条件,会匹配以下哪个字符串?A.`‘A’`B.`‘BAKER’`C.`‘ADAMS’`D.`‘CLARK’`答案:B解析:模式`‘_A%’`中,下划线(`_`)匹配任意单个字符,百分号(`%`)匹配零个或多个字符。因此该模式匹配:第二个字符是‘A’的任何字符串。`‘BAKER’`的第二个字符是‘A’,匹配。`‘A’`只有一个字符,不匹配。`‘ADAMS’`的第一个字符是‘A’,第二个是‘D’,不匹配。`‘CLARK’`的第二个字符是‘L’,不匹配。10.关于序列(SEQUENCE),以下哪项描述是错误的?A.序列的`CACHE`选项可以提高性能,但可能在实例故障时导致序列值出现间隙。B.序列的`CYCLE`选项允许序列值在达到限制后循环重用。C.使用`NEXTVAL`伪列会递增序列的当前值,并且该递增操作会立即提交,无法回滚。D.两个不同的会话可以同时获取到同一个序列的相同`CURRVAL`值。答案:D解析:`CURRVAL`返回当前会话对特定序列最后一次获取的`NEXTVAL`值。在其他会话中,除非它们自己也调用了`NEXTVAL`,否则调用`CURRVAL`会报错(“序列尚未在此会话中定义”)。因此,不同会话通常不会同时拥有相同的`CURRVAL`。A、B、C描述均正确。11.你需要查询所有员工的姓名及其经理的姓名,即使某些员工没有经理(即`mgr`列为NULL)也应包括在内。应该使用哪种连接?A.内连接(INNERJOIN)B.左外连接(LEFTOUTERJOIN)C.右外连接(RIGHTOUTERJOIN)D.全外连接(FULLOUTERJOIN)答案:B解析:题目要求返回所有员工(左表`empe1`)及其经理信息(右表`empe2`,通过`e1.mgr=e2.empno`连接)。即使员工没有经理(`e1.mgrISNULL`),该员工记录也应保留。这符合左外连接的特性:返回左表所有行,右表匹配不上则用NULL填充。12.在Oracle中,用于获取最近一次隐式游标属性(如`SQL%ROWCOUNT`)的SQL语句是?A.最近执行的一条DML或DDL语句。B.最近执行的一条SELECT语句。C.最近执行的一条COMMIT或ROLLBACK语句。D.最近打开的显式游标所对应的语句。答案:A解析:隐式游标属性(`SQL%FOUND`,`SQL%NOTFOUND`,`SQL%ROWCOUNT`)总是关联最近执行的DML(INSERT,UPDATE,DELETE,MERGE)或单行SELECTINTO语句。DDL语句执行后会重置这些属性。单独的SELECT语句(非INTO)不使用隐式游标。13.关于索引,以下哪项说法最准确?A.在主键列上创建唯一索引会显著降低INSERT操作的速度。B.在WHERE子句中经常使用的列上创建索引,总是能提高查询性能。C.位图索引适合用于具有大量唯一值(高基数)的列。D.函数索引允许在基于列表达式或函数的查询条件上使用索引。答案:D解析:函数索引是基于列表达式或函数结果创建的索引。当查询的WHERE子句使用相同的表达式时,优化器可以考虑使用该索引。A错误,主键索引虽然增加INSERT开销,但这是维护数据完整性必须的,且通常B树索引效率很高。B错误,如果表很小或数据分布导致全表扫描更优,索引可能不会被使用。C错误,位图索引适合低基数(少量唯一值)的列,高基数列通常用B树索引。14.执行`GRANTSELECTONscott.empTOhrWITHGRANTOPTION;`后,用户HR可以做什么?A.只能查询`scott.emp`表。B.可以查询和修改`scott.emp`表。C.可以查询`scott.emp`表,并可以将该SELECT权限授予其他用户。D.可以查询`scott.emp`表,并可以修改该表的结构。答案:C解析:`WITHGRANTOPTION`允许被授权者(HR)将获得的权限(此处是SELECT)再授予其他用户。它不授予额外的对象权限(如UPDATE)或DDL权限(如ALTER)。15.哪个后台进程负责将脏缓冲区写入数据文件?A.DBWn(DatabaseWriter)B.LGWR(LogWriter)C.CKPT(CheckpointProcess)D.SMON(SystemMonitor)答案:A解析:数据库写进程(DBWn)负责将数据库缓冲区缓存中已修改的脏缓冲区写入数据文件。LGWR负责写重做日志缓冲区。CKPT负责更新控制文件和数据文件头中的检查点信息,触发DBWn写脏块。SMON负责系统监控和实例恢复等。16.你需要查找所有包含名为`SALARY`列的表。应该查询哪个数据字典视图?A.`USER_TABLES`B.`USER_TAB_COLUMNS`C.`USER_COLUMNS`D.`ALL_TAB_COLS`答案:B解析:`USER_TAB_COLUMNS`视图显示当前用户拥有的所有表、视图和簇的列信息。`USER_TABLES`只显示表的信息,没有列细节。`USER_COLUMNS`不是标准视图。`ALL_TAB_COLS`是`USER_TAB_COLUMNS`的超集,显示当前用户有权限访问的所有对象的列信息,但用`USER_TAB_COLUMNS`查询自己拥有的对象更直接。17.关于表空间,以下哪项操作是不可能的?A.将表空间从读写(READWRITE)状态更改为只读(READONLY)状态。B.将系统表空间(SYSTEM)更改为只读状态。C.重命名一个非系统表空间。D.将一个表空间设置为脱机(OFFLINE)状态。答案:B解析:系统表空间(SYSTEM)和辅助系统表空间(SYSAUX)存储数据字典和核心对象,必须始终处于在线和读写状态,不能被设置为只读或脱机(临时脱机用于恢复除外,但常规操作不允许)。A、C、D都是对普通表空间的有效操作。18.分析以下语句:`DELETEFROMemployeesWHEREemployee_id=100;`执行后,但未提交。此时另一个会话查询`employees`表,能看到`employee_id=100`的记录吗?A.总是能看到。B.永远看不到。C.取决于该会话的隔离级别。D.只有在该会话也执行了删除操作后才看不到。答案:C解析:在Oracle默认的读已提交(ReadCommitted)隔离级别下,未提交的修改对其他会话不可见。因此,另一个会话的查询看不到已删除但未提交的行。如果另一个会话使用读未提交(ReadUncommitted)隔离级别(Oracle不支持)或修改了当前会话的可见性设置,则可能看到。因此,结果取决于隔离级别。Oracle默认是读已提交,所以通常看不到,但选项C最严谨。19.要查看当前数据库实例的SGA各组件的大小,可以使用以下哪个视图?A.`V$SGA`B.`V$SGAINFO`C.`V$SGASTAT`D.`V$MEMORY_DYNAMIC_COMPONENTS`答案:B解析:`VSGAI20.使用`INSERT`语句时,以下哪种方法是正确的插入多行数据的方式?A.使用多个`VALUES`子句,如`INSERTINTOtableVALUES(...),(...),(...);`B.使用`INSERTALL`语句。C.使用`SELECT...UNIONALL`作为子查询。D.在PL/SQL循环中执行单行`INSERT`。答案:C解析:在OracleSQL中,标准的多行插入语法是通过子查询实现的,例如:`INSERTINTOtable_name(col1,col2)SELECTval1a,val2aFROMdualUNIONALLSELECTval1b,val2bFROMdual;`。选项A的语法在Oracle中无效(MySQL等支持)。选项B的`INSERTALL`用于条件或多表插入,语法不同。选项D是过程化方法,非单条SQL语句。21.关于约束,以下哪项描述是正确的?A.外键约束必须引用主键列。B.唯一约束(UNIQUE)允许列中存在多个NULL值。C.检查约束(CHECK)不能包含子查询。D.禁用约束(DISABLE)会删除该约束。答案:C解析:检查约束的条件必须是确定性的布尔表达式,不能包含子查询、序列(CURRVAL/NEXTVAL)、LEVEL等。A错误,外键可以引用唯一约束列。B错误,唯一约束视NULL为未知值,多个NULL不违反唯一性(但具体行为可能因数据库而异,Oracle中唯一约束允许多个NULL)。D错误,禁用约束只是使其失效,定义仍在数据字典中,可以重新启用。22.执行`ALTERTABLEordersADDCONSTRAINTpk_ordersPRIMARYKEY(order_id);`时,如果`order_id`列已有重复值,会发生什么?A.约束被创建,但标记为禁用。B.语句执行成功,重复值被自动删除。C.语句失败,并报错。D.约束被创建,但仅对后续插入的数据有效。答案:C解析:创建主键约束时,数据库会检查现有数据是否违反约束(唯一且非空)。如果存在重复值或NULL值,约束创建将失败,并报告违反唯一性或非空约束的错误。23.在Oracle中,用于执行动态SQL(DDL或带参数的DML)的最佳内置包是?A.`DBMS_SQL`B.`DBMS_DDL`C.`EXECUTEIMMEDIATE`D.`DBMS_OUTPUT`答案:C解析:`EXECUTEIMMEDIATE`是PL/SQL中用于执行动态SQL语句(包括DDL、DML和会话控制语句)的语句。`DBMS_SQL`包也提供动态SQL功能,但语法更复杂,通常用于非常动态的场景(如列数未知)。`DBMS_DDL`包用于执行特定的DDL操作。`DBMS_OUTPUT`用于输出调试信息。24.以下哪个不是有效的Oracle数据类型?A.`TIMESTAMPWITHLOCALTIMEZONE`B.`INTERVALYEARTOMONTH`C.`CLOB`D.`STRING`答案:D解析:`STRING`不是Oracle内置数据类型。Oracle中用于变长字符数据的主要类型是`VARCHAR2`。A、B、C都是有效的Oracle数据类型。25.关于视图,以下哪项描述是错误的?A.简单视图通常可以直接进行DML操作。B.复杂视图(如包含聚合函数、连接)通常不可更新。C.创建视图时使用`WITHCHECKOPTION`可以确保通过视图进行的插入或更新操作的结果对视图可见。D.删除基表会自动删除基于该表的所有视图。答案:D解析:删除基表不会自动删除视图。视图的定义仍然存在于数据字典中,但变为无效(状态为`INVALID`)。当再次查询该视图时,会收到错误。A、B、C描述均正确。26.你需要查找当前正在等待锁资源的会话信息。应该优先查询哪个动态性能视图?A.`V$SESSION`B.`V$LOCK`C.`V$LOCKED_OBJECT`D.`V$SESSION_WAIT`答案:A解析:`VSESSIO27.函数`ROUND(123.456,-1)`的返回值是?A.123.5B.120C.123.46D.123.4答案:B解析:`ROUND`函数的第二个参数指定舍入到小数点后几位。如果为负数,则舍入到小数点左边相应的位数。`ROUND(123.456,-1)`表示舍入到十位,结果为120。28.哪个命令用于将表`employees`中`last_name`列的数据类型从`VARCHAR2(20)`修改为`VARCHAR2(50)`,并且保留现有数据?A.`ALTERTABLEemployeesMODIFYlast_nameVARCHAR2(50);`B.`ALTERTABLEemployeesALTERCOLUMNlast_nameVARCHAR2(50);`C.`ALTERTABLEemployeesCHANGElast_nameVARCHAR2(50);`D.`ALTERCOLUMNlast_nameINemployeesTOVARCHAR2(50);`答案:A解析:在Oracle中,使用`ALTERTABLE...MODIFY`语句来修改现有列的定义,包括数据类型(在兼容的情况下)、大小等。选项B、C、D的语法在Oracle中无效。29.关于事务,以下哪项是“原子性”特性的描述?A.事务完成后,对数据的修改是永久的。B.事务执行过程中,中间状态对其他事务不可见。C.事务内的所有操作要么全部完成,要么全部不完成。D.并发执行的事务结果应与串行执行的结果一致。答案:C解析:原子性(Atomicity)保证事务是一个不可分割的工作单元,事务中的操作要么全部发生,要么全部不发生。A是持久性(Durability)。B是隔离性(Isolation)。D是隔离性的一个更高要求(可串行化)。30.要查看某个用户(如HR)拥有的所有系统权限,应该查询哪个数据字典视图?A.`USER_SYS_PRIVS`B.`DBA_SYS_PRIVS`C.`SESSION_PRIVS`D.`ROLE_SYS_PRIVS`答案:B解析:`DBA_SYS_PRIVS`显示数据库中授予所有用户和角色的系统权限。要查看特定用户(如HR)的系统权限,可以查询`SELECTFROMDBA_SYS_PRIVSWHEREGRANTEE='HR';`。`USER_SYS_PRIVS`显示当前用户的系统权限。`SESSION_PRIVS`显示当前会话生效的所有权限(包括通过角色获得的)。`ROLE_SYS_PRIVS`显示角色的系统权限,但不是直接查询用户。31.执行不完全恢复后,必须使用以下哪个命令打开数据库?A.`ALTERDATABASEOPENRESETLOGS;`B.`ALTERDATABASEOPEN;`C.`ALTERDATABASEOPENNORESETLOGS;`D.`STARTUPOPEN;`答案:A解析:不完全恢复(如基于时间、SCN或日志序列的恢复)会将数据库恢复到过去的某个时间点。由于重做日志序列在恢复点之后被重置,必须使用`OPENRESETLOGS`选项来打开数据库。这会创建新的数据库化身(incarnation),并重置日志序列号从1开始。32.关于`NVL`和`COALESCE`函数,以下哪项描述是正确的?A.`NVL`只能接受两个参数,而`COALESCE`可以接受多个参数。B.`NVL`在第一个参数为NULL时返回第二个参数,而`COALESCE`返回第一个非NULL参数。C.两者在功能上完全等价,可以互换使用。D.`NVL`会进行隐式数据类型转换,而`COALESCE`要求所有参数数据类型一致。答案:B解析:`NVL(expr1,expr2)`:如果`expr1`为NULL,返回`expr2`;否则返回`expr1`。`COALESCE(expr1,expr2,...,exprn)`:返回参数列表中第一个非NULL的表达式。A描述不准确,`NVL`确实只有两个参数,`COALESCE`有多个,但这不是核心区别。C错误,功能相似但有区别(如参数数量、`COALESCE`是ANSI标准)。D不准确,两者都有数据类型转换规则。33.哪个后台进程在实例恢复期间负责前滚(RollForward)操作?A.SMONB.PMONC.RECOD.CKPT答案:A解析:系统监控进程(SMON)负责在实例启动时执行崩溃恢复。这包括前滚(重应用)实例崩溃时尚未写入数据文件但已记录在重做日志中的已提交和未提交更改。34.`SELECTTO_CHAR(SYSDATE,‘YYYY-MM-DD’)FROMdual;`如果当前日期是2026年7月15日,输出是什么?A.`26-07-15`B.`2026-7-15`C.`2026-07-15`D.`15-JUL-26`答案:C解析:格式模型`‘YYYY-MM-DD’`表示四位年份、两位月份、两位日期,用连字符分隔。因此2026年7月15日会被格式化为`‘2026-07-15’`。35.需要暂时禁用表`orders`上的所有外键约束以执行大规模数据加载,使用哪个语句最合适?A.`ALTERTABLEordersDISABLECONSTRAINTALL;`B.`ALTERTABLEordersDISABLEALLCONSTRAINTS;`C.编写PL/SQL循环,逐个禁用外键约束。D.删除所有外键约束,加载后再重新创建。答案:C解析:Oracle没有直接禁用表上所有外键约束的单个DDL语句。`DISABLEALLCONSTRAINTS`会禁用所有约束(包括主键、唯一键等),可能导致数据完整性问题,且语法可能因版本而异。最佳实践是编写脚本(PL/SQL循环)查询`USER_CONSTRAINTS`,针对约束类型为‘R’(外键)且属于`orders`表的约束,动态执行`ALTERTABLE...DISABLECONSTRAINT...`。选项D风险高,不推荐。36.关于`GROUPBY`子句,以下哪项描述是正确的?A.`SELECT`列表中所有非聚合列都必须包含在`GROUPBY`子句中。B.`GROUPBY`子句中必须包含`SELECT`列表中的所有列。C.`GROUPBY`子句只能基于单列。D.`GROUPBY`子句必须在`WHERE`子句之前使用。答案:A解析:这是SQL标准。在包含聚合函数(如SUM,AVG,COUNT)的查询中,`SELECT`列表中的任何非聚合表达式(列或列表达式)都必须出现在`GROUPBY`子句中。B错误,`GROUPBY`可以只包含部分非聚合列(如果其他列是聚合的)。C错误,可以基于多列。D错误,`GROUPBY`在`WHERE`之后。37.要释放表`large_table`中由于大量`DELETE`操作产生的高水位线(HWM)以下的空闲空间,可以使用以下哪个命令?A.`DROPTABLElarge_table;`B.`TRUNCATETABLElarge_table;`C.`ALTERTABLElarge_tableDEALLOCATEUNUSED;`D.`ALTERTABLElarge_tableSHRINKSPACE;`答案:D解析:`ALTERTABLE...SHRINKSPACE`(需要表支持行移动`ENABLEROWMOVEMENT`)可以回收表段中高水位线以下的碎片空间,并可选地降低高水位线。`TRUNCATE`会删除所有数据并重置高水位线,但也会删除所有数据,不符合“释放空闲空间但保留数据”的场景(题目隐含保留数据)。`DEALLOCATEUNUSED`只释放高水位线以上的未使用空间,不处理HWM以下的碎片。38.在`WHERE`子句中使用`BETWEEN10AND20`,等价于以下哪个条件?A.`>10AND<20`B.`>=10AND<20`C.`>10AND<=20`D.`>=10AND<=20`答案:D解析:`BETWEEN`是包含端点的,即`BETWEENlowANDhigh`等价于`low<=column<=high`。39.关于`MERGE`语句,以下哪项描述是错误的?A.它可以根据条件执行`INSERT`和`UPDATE`操作。B.它必须同时包含`UPDATE`和`INSERT`子句。C.可以使用`DELETE`子句作为`UPDATE`的一部分。D.它用于将源表的数据合并到目标表中。答案:B解析:`MERGE`语句可以根据匹配条件选择执行`UPDATE`或`INSERT`,但这两个子句都是可选的。可以只包含`UPDATE`或只包含`INSERT`。A、C、D描述正确。40.如果希望确保一个数字列的值始终为正数,应该使用哪种约束?A.`NOTNULL`B.`UNIQUE`C.`CHECK`D.`DEFAULT`答案:C解析:检查约束(`CHECK`)允许定义必须满足的条件。例如:`CONSTRAINTpositive_valueCHECK(column_name>0)`。`NOTNULL`确保非空。`UNIQUE`确保唯一。`DEFAULT`提供默认值。第二部分:实操题(共5题,每题10分,共50分)41.表创建与数据操作背景:需要创建一个`products`表来管理产品信息。要求:1.表名:`products`2.列定义:`product_id`:数字,主键。`product_id`:数字,主键。`product_name`:变长字符串,最大50字符,非空。`product_name`:变长字符串,最大50字符,非空。`category`:变长字符串,最大30字符。`category`:变长字符串,最大30字符。`price`:数字,精度10位,小数2位,必须大于0。`price`:数字,精度10位,小数2位,必须大于0。`last_updated`:时间戳,默认值为系统当前时间戳。`last_updated`:时间戳,默认值为系统当前时间戳。3.创建后,插入以下两行数据:(1,‘Laptop’,‘Electronics’,999.99,DEFAULT)(1,‘Laptop’,‘Electronics’,999.99,DEFAULT)(2,‘DeskChair’,‘Furniture’,149.50,DEFAULT)(2,‘DeskChair’,‘Furniture’,149.50,DEFAULT)4.更新`product_id`为1的产品价格,增加10%。请写出完整的SQL语句序列。答案与解析:```sql1.创建表CREATETABLEproducts(product_idNUMBERPRIMARYKEY,product_nameVARCHAR2(50)NOTNULL,categoryVARCHAR2(30),priceNUMBER(10,2)CHECK(price>0),last_updatedTIMESTAMPDEFAULTSYSTIMESTAMP);2.插入数据INSERTINTOproducts(product_id,product_name,category,price,last_updated)VALUES(1,'Laptop','Electronics',999.99,DEFAULT);INSERTINTOproducts(product_id,product_name,category,price,last_updated)VALUES(2,'DeskChair','Furniture',149.50,DEFAULT);或者使用一条语句插入多行(通过SELECTUNIONALL)INSERTINTOproducts(product_id,product_name,category,price)SELECT1,'Laptop','Electronics',999.99FROMdualUNIONALLSELECT2,'DeskChair','Furniture',149.50FROMdual;3.更新数据UPDATEproductsSETprice=price1.10SETprice=price1.10WHEREproduct_id=1;可选:提交更改COMMIT;```解析:本题考察基本的DDL和DML。创建表时定义了主键、非空、检查约束和默认值。插入数据时对默认值列使用`DEFAULT`关键字。更新操作使用表达式计算新价格。42.查询与连接背景:现有`employees`表和`departments`表。`employees`表结构:`employee_id`(NUMBER,PK),`first_name`(VARCHAR2),`last_name`(VARCHAR2),`salary`(NUMBER),`department_id`(NUMBER,FK)。`departments`表结构:`department_id`(NUMBER,PK),`department_name`(VARCHAR2),`location_id`(NUMBER)。要求:编写一个查询,列出所有部门(包括没有员工的部门)的名称(`department_name`),以及该部门员工的最高工资(`max_salary`)。如果某个部门没有员工,则`max_salary`显示为NULL。结果按`max_salary`降序排列(NULL值排在最后)。答案与解析:```sqlSELECTd.department_name,MAX(e.salary)ASmax_salaryFROMdepartmentsdLEFTOUTERJOINemployeeseONd.department_id=e.department_idGROUPBYd.department_nameORDERBYmax_salaryDESCNULLSLAST;```解析:需要使用外连接(`LEFTOUTERJOIN`)来包含没有员工的部门。连接条件在`ON`子句中指定。使用聚合函数`MAX`计算每个部门的最高工资。`GROUPBY`子句必须包含非聚合列`d.department_name`。`ORDERBY`中使用`NULLSLAST`确保NULL值在排序末尾。43.子查询与聚合背景:继续使用`employees`表。要求:查找工资高于其所在部门平均工资的所有员工。显示员工`last_name`、`salary`、`department_id`以及该部门的平均工资(别名为`dept_avg_salary`)。答案与解析:```sql方法1:使用相关子查询SELECTe1.last_name,e1.salary,e1.department_id,(SELECTAVG(e2.salary)FROMemployeese2WHEREe2.department_id=e1.department_id)ASdept_avg_salaryFROMemployeese1WHEREe1.salary>(SELECTAVG(e2.salary)FROMemployeese2WHEREe2.department_id=e1.department_id);方法2:使用内联视图(FROM子句子查询)和连接(更高效,更常用)SELECTe.last_name,e.salary,e.department_id,d.avg_salASdept_avg_salaryFROMemployeeseJOIN(SELECTdepartment_id,AVG(salary)ASavg_salFROMemployeesGROUPBYdepartment_id)dONe.department_id=d.department_idWHEREe.salary>d.avg_sal;```解析:方法1使用相关子查询,对于外层查询的每一行,子查询计算其所在部门的平均工资。方法2使用内联视图(派生表)`d`先计算每个部门的平均工资,然后与`employees`表连接并进行过滤。方法2通常性能更好,尤其是表大时。44.数据字典查询要求:编写一个查询,显示当前用户拥有的所有表(`table_name`)及其所在表空间(`tablespace_name`)。同时,对于每个表,显示其行数(使用`NUM_ROWS`,注意可能需要先收集统计信息)。如果`NUM_ROWS`为NULL,则显示‘N/A’。按表名排序。答案与解析:```sql首先,确保统计信息相对最新(在实际环境中,统计信息可能已由自动作业收集)EXECDBMS_STATS.

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论