OCP 11G题库精华:SQL基础1Z0-051范例解析

5星 · 超过95%的资源 需积分: 31 57 下载量 97 浏览量 更新于2024-07-27 1 收藏 811KB PDF 举报
在OCP 11G的题库051中,本章节主要聚焦于Oracle数据库的SQL Fundamentals I部分,特别是在数据表结构和SQL命令的理解上。题目涉及了一个关于创建新表(new_sales)的问题,该新表试图从SALES表中通过子查询抽取prod_id, cust_id, 和time_id列,并为order_date列设置默认值SYSDATE。考生需要分析给出的CREATE TABLE语句并判断其有效性。 问题具体是:关于以下CREATE TABLE命令: ```sql CREATE TABLE new_sales (prod_id, cust_id, order_date DEFAULT SYSDATE) AS SELECT prod_id, cust_id, time_id FROM sales; ``` 选项分析: A. 命令认为新表NEW_SALES不会被创建,因为不能在列定义中指定DEFAULT值。然而,在Oracle SQL中,DEFAULT关键字用于为列提供一个默认值,即使它不能在CREATE TABLE语句中显式列出,如果允许NULL值,也可以为非主键列设置默认值。 B. 这个选项错误地认为所有在指定列上的NOT NULL约束会被传递到新表中。实际上,新表是在没有指定NOT NULL约束的情况下创建的,除非在原始SALES表中的相应列原本有NOT NULL约束。 C. 正确答案可能是C。由于Oracle SQL的规则,CREATE TABLE AS SELECT语句不会自动继承源表的NOT NULL约束,特别是当新表的列没有明确指定约束时。因此,新表NEW_SALES可能不会得到创建,除非默认值SYSDATE明确允许NULL值,或者在SALES表中有相应的NOT NULL约束被显式传递。 正确的解释是:尽管默认值可以用来初始化某些列,但如果期望将NOT NULL约束从源表转移到新表,需要明确地在CREATE TABLE语句中添加这些约束。如果原SALES表中的CUST_ID, PROD_ID或TIME_ID列没有NOT NULL约束,那么新表可能会由于缺少这些约束而无法正确创建。 总结来说,本题考察了考生对Oracle SQL基础的理解,包括默认值的使用、约束的传递以及CREATE TABLE语句的语法。在实际准备OCP 11G考试时,考生应深入理解这些概念,并能够根据题目的上下文进行正确判断。