SQL - 使用 DDL 語句練習題



1.Oracle 資料庫中 DDL 的全稱是什麼?

  1. 資料刪除語言
  2. 資料定義語言
  3. 資料委派語言
  4. 虛擬資料語言

答案:B. DDL 是 SQL 的一個類別,代表資料定義語言。其他 SQL 型別包括 DML、DCL 和 TCL。

2.DDL 語句用於以下哪些 Oracle 資料庫物件?

  1. 子查詢

答案:A. DDL 包含 CREATE、ALTER 和 ANALYZE 等命令,用於在資料庫模式中建立表、檢視儲存的子程式和包。

3.Oracle 資料庫中包含資料的基本儲存單元是什麼?

  1. 檢視
  2. 查詢

答案:D. 表是 Oracle 資料庫中資料的物理儲存的基本單元。

4.以下哪個選項最能定義檢視?

  1. 它是表的簡寫形式
  2. 它是來自一個或多個表的子集的邏輯表示
  3. 它只有一行一列
  4. 以上都不是

答案:B. 檢視是一個查詢,它像一個視窗一樣格式化一個或多個表中包含的資料。檢視不包含任何物理資料,而只是一個在執行時建立的查詢。

5. 以下哪些是資料庫物件?

  1. 序列
  2. 同義詞
  3. 以上所有

答案:D. 物理儲存在資料庫模式中的物件是資料庫物件。

6. 以下哪些資料庫物件生成數值?

  1. 檢視
  2. 索引
  3. 序列

答案:D. 序列用於生成唯一的數值,從一個確定的值開始,並以指定的因子遞增。可以建立一個序列來生成一系列整數。序列生成的值可以儲存在任何表中。序列是使用 CREATE SEQUENCE 命令建立的。

7.以下哪些資料庫物件為物件提供替代名稱?

  1. 同義詞
  2. 序列
  3. 檢視
  4. 索引

答案:A. 同義詞為資料庫物件提供永久別名。公共同義詞可供任何資料庫使用者使用。私有同義詞僅可供建立它的使用者使用。同義詞是使用 CREATE SYNONYM 命令建立的。同義詞是使用 DROP SYNONYM 命令刪除的。只有具有 DBA 許可權的使用者才能刪除公共同義詞。

8.以下哪些資料庫物件可以提高某些查詢的效能?

  1. 同義詞
  2. 檢視
  3. 索引

答案:D.

9. 什麼時候可以建立表?

  1. 當資料庫沒有被任何使用者使用時
  2. 當資料庫新建立時
  3. 它可以在任何時候建立,即使使用者正在使用資料庫
  4. 以上都不是

答案:C. 可以建立索引以加快查詢過程。當存在索引時,DML 操作始終較慢。Oracle 11g 會自動為 PRIMARY KEY 和 UNIQUE 約束建立索引。顯式索引是使用 CREATE INDEX 命令建立的。如果查詢條件或排序操作基於用於建立索引的列或表示式,則 Oracle 11g 可以自動使用索引。

10. 關於表,以下哪項是正確的?

  1. 不必指定表的大小
  2. 每個表的大小相同
  3. 表可以線上修改
  4. 以上都不是

答案:A, C.

11. 建立了一個名為 123_A 的表來儲存組織中的員工人數。表名有什麼錯誤?

  1. 表名不能以數字開頭
  2. 這個名字沒有錯。
  3. 命名錶時不能使用下劃線
  4. 以上都不是

答案:A. 根據物件命名約定,表名必須以字母開頭。

12. 表名可以包含多少個字母?

  1. 1-20 個字元
  2. 1-10 個字元
  3. 1-30 個字元
  4. 1-50 個字元

答案:C. 表名不能超過 30 個字元。

13 以下哪些字元可以用於命名錶?

  1. A 到 Z
  2. a 到 z
  3. 0 到 9
  4. 以上所有

答案:D. 根據 Oracle 的標準命名約定,物件名稱可以包含任何大小寫的字母。強制要求第一個位置為字母,其餘位置可以是字母和數字的混合。

14. 以下哪些特殊字元可以用於命名錶?

  1. @
  2. #
  3. $
  4. _(下劃線)

答案:B, C, D. 命名錶時,不允許使用其他特殊字元(除了 (#, $, _))。不建議在表名中使用特殊字元。

15. 關於表名,以下哪項是正確的?

  1. 表可以具有與同一使用者擁有的其他物件使用的名稱相同的名稱
  2. 序列和表可以具有相同的名稱
  3. 檢視和表可以具有相同的名稱
  4. 表名不得重複同一使用者擁有的其他物件的名稱

答案:D. 根據名稱空間,表名不能與任何其他模式物件相同。共享相同名稱空間的模式物件包括表、檢視、序列、私有同義詞、儲存過程、儲存函式、包、物化檢視和使用者定義型別。

16.您建立一個表並將其命名為 COUNT。CREATE TABLE 指令碼的結果是什麼?

  1. 表將不會建立
  2. 表將被建立,並且會自動在名稱 COUNT_ 後新增下劃線
  3. 將丟擲 ORA 錯誤
  4. 表 COUNT 將在沒有任何錯誤的情況下建立

答案:A, C. 您不能使用與 Oracle 伺服器保留字相同的名稱建立表。

17. 您使用帶引號的識別符號 '' 建立一個表。您將如何引用此表?

  1. 'table_name'
  2. "table_name"
  3. A 或 B 均可
  4. 以上都不是

答案:B. 如果使用帶引號的識別符號建立了表名,則必須使用雙引號進行定址。不建議使用帶引號的識別符號。帶引號的識別符號區分大小寫

18. 您建立了一個名為 EMPLOYEES 的表。以下哪些是可能的?

  1. 可以將其稱為 eMPLOYEES
  2. 可以將其稱為 EMPLoyees
  3. 可以將其稱為 employees
  4. 以上所有

答案:D. 在 Oracle 中,未帶引號的物件名稱不區分大小寫。

19. 以下哪些是建立表的先決條件?

  1. CREATE TABLE 許可權
  2. 儲存空間
  3. 表中的資料
  4. 以上都不是

答案:A, B. 使用者必須擁有 CREATE TABLE 許可權,並且必須有足夠的儲存空間來分配表段的初始擴充套件。

20. 建立表的語法是什麼?

  1. CREATE TABLE [schema.] table (column datatype [DEFAULT expr] [,..] );
  2. CREATE TABLE INTO [schema.] table (column datatype [DEFAULT expr] [,..] );
  3. CREATE TABLE VALUES [schema.] table (column datatype [DEFAULT expr] [,..] );
  4. 以上都不是

答案:A.

21. 選擇建立表時必須指定的元素。

  1. 列名
  2. 列資料型別
  3. 列大小
  4. 以上所有

答案:D. 表必須至少包含一列,其資料型別規範以及精度(如果需要)。

22. 一個名為“Kevin”的使用者想要訪問另一個名為“Jonathan”的使用者擁有的表。以下哪些對 Kevin 有效?

  1. Select * from Kevin.employees;
  2. Select * from jonathan.employees;
  3. A 或 B 均可
  4. 以上都不是

答案:B.

23. 關於模式,以下哪項是正確的?

  1. 模式由資料庫使用者擁有,並且與該使用者具有相同的名稱
  2. 每個使用者擁有一個模式
  3. 模式物件包括資料庫連結
  4. 以上所有

答案:D. 資料庫中的使用者空間稱為模式。模式包含使用者擁有或訪問的物件。每個使用者可以擁有自己的單個模式。

24. 關於表,以下哪項是正確的?

  1. 為表提供了預設值
  2. 在 INSERT 語句期間,可以為表的列提供預設值
  3. A 或 B 均可
  4. 以上都不是

答案:B. 可以使用 DEFAULT 關鍵字在定義期間為列指定預設值。

25. 建立表時,以下哪些可以與 DEFAULT 選項一起使用?

  1. 字串
  2. 表示式
  3. SQL 函式
  4. 以上所有

答案:D. 列的預設值可以是文字或使用 SQL 函式的派生值。

26. 以下哪個命令用於查看錶的結構?

  1. UPDATE
  2. SHOW
  3. DESCRIBE
  4. SPOOL

答案:C. DESCRIBE 是一個 SQL*Plus 命令,用於列出表的結構。

27.列上的 CHECK 約束的限制是多少?

  1. 無限制
  2. 1
  3. 2
  4. 4

答案:A. Oracle 對列上的檢查約束沒有限制。

28. 以下哪個命令將刪除表 employees?(假設表結構如給定)

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
  1. DROP employees
  2. DROP TABLE employees
  3. TRUNCATE employees
  4. 以上都不是

答案:B.

29. 關於名稱空間,以下哪項是正確的?

  1. 它是物件型別組
  2. 在名稱空間中,所有物件名稱都應由模式和名稱唯一標識
  3. 不同名稱空間中的相同型別的物件可以共享相同的名稱
  4. 以上所有

答案:D. 名稱空間定義了一組物件型別,其中所有名稱都必須由模式和名稱唯一標識。不同名稱空間中的物件可以共享相同的名稱。

30. 以下哪些物件型別共享相同的名稱空間?

  1. 同義詞
  2. 檢視
  3. 以上所有

答案:D.

31. 關於表和索引,以下哪項是正確的?

  1. 在同一個模式中,索引和表可以具有相同的名稱。
  2. 在同一個模式中,索引和表不能具有相同的名稱。
  3. A和B都不對。
  4. 以上都不是

答案:A. 由於索引和約束共享相同的名稱空間,因此表和索引可以具有相同的名稱。

32. 建立表時,哪些說法是正確的?

  1. 建立表時,應為每一列分配資料型別。
  2. 為列分配資料型別不是強制性的。
  3. 必須為表分配資料型別,而不是為列分配資料型別。
  4. 以上都不是

答案:A. 為了構建表的結構,每一列都必須擁有行為屬性,例如資料型別和精度。

33. 假設您建立了一個如下所示的表

CREATE TABLE employees
(emp_id NUMBER(4),
last_name VARCHAR2 (20)
);

Oracle 將為 LAST_NAME 列分配多少空間?

  1. 如果沒有行,則 Oracle 不會為 last_name 列分配任何空間。
  2. 如果填充了行,則 Oracle 將為 last_name 列分配無限空間。
  3. A和B都不對。
  4. 以上選項都不正確。

答案:A.

34. VARCHAR2 資料型別的尺寸範圍是多少?

  1. 1 位元組到 2 位元組
  2. 1 位元組到 2000 位元組
  3. 1 位元組到 4000 位元組
  4. 以上都不是

答案:C. 在 Oracle 11g Release 2 之前,字串資料型別 VARCHAR2 最多可以包含 4000 位元組。

35. CHAR 資料型別的尺寸範圍是多少?

  1. 1 位元組到 2 位元組
  2. 1 位元組到 2000 位元組
  3. 1 位元組到 4000 位元組
  4. 1 位元組到 3000 位元組

答案:B. 在 Oracle 11g Release 2 之前,字串資料型別 CHAR 最多可以包含 2000 位元組。

36. 關於 CHAR 資料型別,哪些說法是正確的?

  1. 如果資料長度與列長度不一致,則將被替換為 NULL 值。
  2. 如果資料長度與列長度不一致,則將用空格填充。
  3. 資料必須與 CHAR 尺寸中指定的尺寸相同,否則會丟擲 ORA 錯誤。
  4. 以上都不是

答案:B. CHAR 為值提供固定長度的儲存,而 VARCHAR2 是靈活的。如果將長度小於 CHAR 精度的值插入 CHAR 列,則剩餘長度將被填充到列值中。

37. 以下哪個是用於可變長度二進位制資料的型別?

  1. VARCHAR
  2. VARCHAR2
  3. RAW
  4. NVARCHAR2

答案:C.

38. NUMBER 資料型別允許的精度是多少?

  1. 1 到 20
  2. 1 到 4K
  3. 1 到 30
  4. 1 到 38 位數字

答案:D. 在 Oracle 11g Release 2 之前,主要資料型別 NUMBER 的最大精度為 38 位數字。

39. NUMBER 資料型別允許的刻度是多少?

  1. 1 到 20
  2. -84 到 100
  3. -84 到 127
  4. 以上都不是

答案:C.

40. 以下哪些是日期和時間資料的資料型別?

  1. TIMESTAMP
  2. INTERVAL DAY TO SECOND
  3. TIMESTAMP WITH LOCAL TIMEZONE
  4. 以上所有

答案:D.

41. 以下哪些資料型別用於大型物件?

  1. CLOB
  2. BLOB
  3. RAW
  4. 以上所有

答案:A, B. SQL 中的 LOB 資料型別有 BLOB、CLOB 和 BFILE。

42. 如果插入的值比 VARCHAR2 資料型別列定義的長度短,會發生什麼情況?

  1. 它將丟擲一個 ORA 錯誤。
  2. 它將成功插入,並且該值將佔用其所需的儘可能多的空間。
  3. 它將被插入,並且剩餘的空間將用空格填充。
  4. 以上都不是

答案:B. VARCHAR2 包含可變長度字元資料。

43. Oracle 中的 NUMBER (8, 2) 是什麼意思?

  1. 這意味著總共有 8 位數字,小數點前 6 位,小數點後 2 位。
  2. 這意味著總共有 10 位數字,小數點前 8 位,小數點後 2 位。
  3. 這意味著小數點前 2 位,小數點後 8 位。
  4. 以上都不是

答案:A. p 表示精度,即小數點左側和右側的數字總數,最多 38 位;s 或刻度表示小數點右側的位數。例如:NUMBER(7, 2) 可以儲存高達 99999.99 的數值。如果未指定精度或刻度,則該列預設為 38 位精度。

44. 以下哪個查詢將建立一個沒有行的表?

  1. CREATE TABLE emp AS SELECT 0 from dual;
  2. CREATE TABLE emp AS SELECT * from employees where 1=1;
  3. CREATE TABLE emp AS SELECT * from employees where 1=2;
  4. CREATE TABLE emp AS SELECT 0 from employees;

答案:C. 直接路徑操作 CTAS (CREATE TABLE .. AS SELECT..) 可用於複製現有表的結構而不復制資料。

45. 以下哪個語句將向已建立的表中新增一列?

  1. ALTER TABLE table_name add column (job varchar2(20));
  2. ALTER TABLE table_name add job varchar2(20);
  3. ALTER TABLE table_name add (job varchar2(20));
  4. ALTER TABLE table_name add column (job);

答案:C. ALTER TABLE 命令允許使用者向表中新增新列。在新建表中建立列的相同規則也適用於向現有表中新增列。新列必須由列名和資料型別(以及寬度,如果適用)定義。還可以分配預設值。區別在於新列新增到現有表的末尾——它將是最後一列。

46. 以下哪個語句將修改已存在列的資料型別?

  1. ALTER TABLE table_name MODIFY (job varchar2(10) );
  2. ALTER TABLE table_name MODIFY job varchar2(10);
  3. ALTER TABLE table_name MODIFY column (job varchar2(10) );
  4. ALTER TABLE table_name MODIFY (job varchar2(10) );

答案:A. ALTER TABLE..MODIFY 用於修改表中的列定義。允許的更改包括增加列精度、在資料型別族內更改資料型別或更改列的預設值。

47. 以下哪個語句將從表中刪除一列?

  1.  ALTER TABLE table_name DROP (job varchar2(10) );
  2. ALTER TABLE table table_name DROP COLUMN (job varchar2(10) );
  3. ALTER TABLE table table_name DROP COLUMN (job);
  4. ALTER TABLE table_name MODIFY (job varchar2(10) );

答案:C. ALTER TABLE..DROP COLUMN 可用於從表中刪除一列。

48. 以下哪個將列 emp_id 重新命名為 empno?

  1. ALTER TABLE employees RENAME column emp_id to empno;
  2. ALTER TABLE employees RENAME emp_id to empno;
  3. ALTER TABLE employees RENAME column emp_id to empno;
  4. 以上都不對;

答案:A. ALTER TABLE..RENAME 可用於重命名錶中已存在的列。

49. 您需要將 employees 表標記為只讀。要獲得所需結果,您將執行以下哪個語句?

  1. ALTER TABLE employees set READ;
  2. ALTER TABLE employees READ ONLY;
  3. ALTER TABLE employees READ_ONLY;
  4. ALTER TABLE employees set READ ONLY;

答案:B. 可以將表標記為只讀,使其對 DML 和 DDL 語句處於被動狀態。只讀功能是在 Oracle 11g 中引入的。

50. 關於 DDL 語句,以下哪些說法是正確的?

  1. DDL 命令成為正在進行的事務的一部分。
  2. DDL 命令是自動提交的,並結束正在進行的活動事務。
  3. 如果 DDL 命令失敗,當前事務仍將提交。
  4. 如果 DDL 命令失敗,當前事務將回滾。

答案:B. 只有在 DDL 命令成功執行且沒有錯誤時,它才是自動提交的。如果 DDL 命令失敗,則會話中的正在進行的事務仍然處於活動狀態,並且不會提交到資料庫中。

51. 如果在發出 DDL 的表上存在活動事務,會發生什麼情況?

  1. 事務回滾。
  2. 事務提交併終止。
  3. A 和 B 都正確。
  4. 以上都不是

答案:B.

52. 以下哪個命令將刪除 SQL 語句中未使用的列?

  1. ALTER TABLE tablename DROP COLUMN column_name;
  2. ALTER TABLE tablename DROP unused columns;
  3. ALTER TABLE tablename set unused column;
  4. ALTER TABLE tablename DROP columns;

答案:C. SET UNUSED 命令僅刪除表中未使用的列,並且速度更快。

53. 當嘗試刪除標記為只讀的表時會發生什麼情況?

  1. 它將丟擲一個錯誤。
  2. 它將不再是隻讀的,但也不能被刪除。
  3. 它將被刪除,不會出現錯誤。
  4. 它將保持不變。

答案:C. DROP 命令會影響未設定為只讀的表的字典定義,因此可以刪除。

考慮以下語句,並回答後面的問題 54 和 55。

CREATE TABLE departments 
(dept_id NUMBER (2),
 dept_name VARCHAR2(14),
 create_date DATE DEFAULT SYSDATE); 

54. 如果從語句中刪除 DEFAULT 子句規範會發生什麼情況?

  1. 指令碼將丟擲錯誤,因為 DATE 列必須指定預設值。
  2. 系統生成的預設值將分配給該列。
  3. 表將建立,並且 CREATE_DATE 列沒有預設值。
  4. 以上都不是

答案:C.

55. 關於以上語句,哪些說法是正確的?

  1. 它將自動提交會話中的事務。
  2. 它將在模式中建立 DEPARTMENTS 表。
  3. 它將為 CREATE_DATE 列設定預設值。
  4. 以上都不是

答案:A, B, C.

56. BLOB 資料型別列最多可以儲存多少資料?

  1. 1 KB
  2. 2 GB
  3. 4 GB
  4. 3 KB

答案:C. 根據 Oracle 11g,BLOB 中可以容納的最大資料大小為 4GB。

57. CLOB 和 BLOB 資料型別有什麼區別?(選擇最合適的答案)

  1. CLOB 是字元資料,BLOB 是二進位制資料。
  2. CLOB 是最多 2GB 的字元資料,BLOB 是最多 4GB 的二進位制資料。
  3. CLOB 是最多 4GB 的字元資料,BLOB 是最多 4GB 的二進位制資料。
  4. 以上都不是

答案:C. CLOB 是字元大型物件,用於儲存字元檔案,如 PDF、文件和文字檔案,而 BLOB 是二進位制 LOB,用於儲存媒體檔案。

58. 以下哪個是 ROWID?

  1. 它是賦予一組行的序列號,從 1 開始。
  2. 它是賦予表中行的字母數字地址。
  3. A 和 B 都正確。
  4. 以上都不是

答案:B. 它是表示其表中行唯一地址的 Base-64 系統。

59. 用於儲存儲存在外部檔案(最多 4GB)中的二進位制資料的型別是什麼?

  1. BLOB
  2. CLOB
  3. CFILE
  4. BFILE

答案:D. BFILE 是一種外部 LOB 型別,用於引用外部媒體檔案。內部 LOB 型別是 BLOB 和 CLOB,分別用於儲存在資料庫中的二進位制大型檔案和字元大型檔案。

60. 使用子查詢建立的表有什麼特點?

  1. 使用子查詢建立表時,不會複製 VARCHAR2 資料型別列。
  2. 使用子查詢建立表時,不會複製 CLOB 資料型別列。
  3. 使用子查詢建立表時,不會複製 LONG 列。
  4. 以上都不是

答案:C. 使用 CTAS 方法建立表不會複製 LONG 列。

61. 以下哪個資料型別不能與 GROUP BY 和 ORDER BY 子句一起使用?

  1. CLOB
  2. VARCHAR2
  3. CHAR
  4. LONG

答案:D. LONG 資料型別不能在 GROUP BY 和 ORDER BY 子句中使用。

62. 表最多可以包含多少個 LONG 列?

  1. 不能包含。
  2. 最多 2 個。
  3. 至少 2 個。
  4. 只能 1 個。

答案:D. 表最多隻能包含一列 LONG 型別列。

63. 以下哪個資料型別不能在 SQL 中受約束?

  1. VARCHAR2
  2. LONG
  3. CHAR
  4. DATE

答案:B. 無法在 LONG 型別列上建立約束。

64. 如果需要帶有小數秒的日期,可以使用以下哪個資料型別?

  1. DATE
  2. VARCHAR2
  3. TIMESTAMP
  4. 以上都不是

答案:C. TIMESTAMP 資料型別提供了更精確的日期值資訊。它提供小數秒和時區資訊。

65. 您需要在列中儲存天、小時、分鐘和秒的間隔。哪個資料型別可以幫助您?

  1. TIMESTAMP
  2. INTERVAL YEAR TO MONTH
  3. INTERVAL DAY TO SECOND
  4. 以上都不是

答案:C.

66. 您需要查詢 2011 年 6 月和 2012 年 6 月有多少員工入職。以下哪個資料型別可以幫助您?

  1. INTERVAL DAY TO SECOND
  2. TIMESTAMP
  3. DATE
  4. INTERVAL YEAR TO MONTH

答案:D.

67. 關於約束,哪些說法是正確的?

  1. 它們在行級別強制執行規則。
  2. 它們在表級別強制執行規則。
  3. 建立表時必須建立約束。

  4. 以上都不是

答案:B. 約束是對新增到表的**資料**應用的規則。它表示業務規則、策略或流程。違反約束的資料不會新增到表中。約束可以在建立表時作為 CREATE TABLE 命令的一部分包含在內,也可以使用 ALTER TABLE 命令新增到現有表中。基於複合列(多於一列)的約束必須使用表級方法建立。

68. 約束如何提供幫助?

  1. 它們限制表的儲存容量,從而節省資料庫空間
  2. 它們阻止對錶的修改
  3. 如果存在依賴項,則它們會阻止刪除表
  4. 以上都不是

答案:C. 約束是對新增到表的**資料**應用的規則。它表示業務規則、策略或流程。違反約束的資料不會新增到表中。

69. RAW 資料型別列可以儲存的最大長度的可變長度二進位制字串是多少?

  1. 10 GB
  2. 1 TB
  3. 2 GB
  4. 4 GB

答案:C.

70. 以下哪些是 Oracle 中有效的約束?

  1. INDEX
  2. GENERAL
  3. UNIQUE
  4. PRIMARY KEY

答案:C, D. NOT NULL 約束只能使用列級方法建立。PRIMARY KEY 約束不允許在指定的列中出現重複值或 NULL 值。一個表中只能有一個 PRIMARY KEY 約束。FOREIGN KEY 約束要求列條目與表中引用的列條目匹配或為 NULL。UNIQUE 約束類似於 PRIMARY KEY 約束,但允許在指定的列中儲存 NULL 值。CHECK 約束確保資料在新增到表之前滿足給定條件。

71. 以下哪些 DML 操作會考慮列上的約束?

  1. INSERT
  2. UNION
  3. DELETE
  4. UPDATE

答案:A, C, D. 所有 DML 操作都遵守表列上的約束。

72. 什麼時候可以建立約束?

  1. 建立表時
  2. 建立表後
  3. A 和 B 都正確。
  4. 以上都不是

答案:C. 約束可以在建立表時作為 CREATE TABLE 命令的一部分包含在內,也可以使用 ALTER TABLE 命令新增到現有表中。

73. 約束儲存在哪裡?

  1. 在 SGA 中
  2. 在表中
  3. 在資料字典中
  4. 以上都不是

答案:C.

74. 你建立了一個約束但沒有命名它。將為該約束分配什麼預設名稱?

  1. SYS_Cn
  2. SYS_constraint
  3. SYS_Const
  4. SYS_C0

答案:A. 預設情況下,Oracle 會為約束分配一個通用名稱 SYS_Cn,其中 n 是一個整數,用於保持約束名稱的唯一性。

75. 列級約束和表級約束在功能上有什麼區別?

  1. 列級約束應用於表的**所有**列
  2. 表級約束應用於表的**所有**列
  3. 它們在功能上相同,只有語法不同
  4. 以上都不是

答案:C. 從功能上講,表級約束和列級約束的工作方式類似。複合約束只能在表級定義。

76. 關於列級約束,以下哪一項是正確的?

  1. 它們可以在建立表之前建立
  2. 它們可以在定義列之前建立
  3. 它們在定義列時包含在內
  4. 以上都不是

答案:C. 列級約束與列規範一起定義。

77. 關於 SQL 中的 NOT NULL 約束,以下哪一項是正確的?

  1. 它們應該在表級定義
  2. 它們應該在列級定義
  3. 它們應該只定義在一個列上
  4. 它們應該只定義在一行上

答案:B. NOT NULL 約束只能使用列級方法建立。

請考慮以下語句並回答後續的第 78 和 79 題

CREATE TABLE employees (
emp_id NUMBER (6)  CONSTRAINT emp_emp_id_PK PRIMARY KEY,
first_name VARCHAR2(20),
last_name VARCHAR2(20),
hire_date DATE 
); 

78. 在上述語句中建立了哪種型別的約束?

  1. 列級約束
  2. 表級約束
  3. 命名約束
  4. 規範約束

答案:A. 列級約束是在列定義時建立的。

79. 可以對上述語句進行哪些修改以使其成為表級約束?

  1. CONSTRAINT emp_emp_id_PK PRIMARY KEY
  2. CONSTRAINT emp_emp_id_PK PRIMARY KEY (EMP_ID)
  3. CONSTRAINT emp_emp_id_PK EMP_ID PRIMARY KEY
  4. CONSTRAINT PRIMARY KEY emp_emp_id_PK

答案:B.

80. 關於 PRIMARY KEY 約束,以下哪一項是正確的?

  1. 它會隱式地將 NOT NULL 約束應用於其定義所在的列
  2. 它會隱式地將 UNIQUE KEY 約束應用於其定義所在的列
  3. 它會隱式地將 CHECK 約束應用於其定義所在的列
  4. 它會隱式地將 DEFAULT 約束應用於其定義所在的列

答案:A. PRIMARY KEY 約束不允許在指定的列中出現重複值或 NULL 值。一個表中只能有一個 PRIMARY KEY 約束。

81. 關於 UNIQUE KEY 約束,以下哪一項是正確的?

  1. UNIQUE KEY 約束和 PRIMARY KEY 約束相同
  2. 如果列上沒有定義 NOT NULL,則 UNIQUE KEY 約束允許 NULL 值
  3. 當在列上定義 UNIQUE KEY 約束時,可以有兩行內容完全相同
  4. 以上都不是

答案:B. UNIQUE 約束類似於 PRIMARY KEY 約束,但允許在指定的列中儲存 NULL 值。

請考慮以下語句並回答後續的第 82 和 83 題

CREATE TABLE employees (
emp_id NUMBER (6)
first_name VARCHAR2(20),
last_name VARCHAR2(20),
job VARCHAR2(20),
hire_date DATE 
CONSTRAINT emp_job_UK UNIQUE (job)); 

82. 以下哪個語句解釋了上面的 CREATE TABLE 指令碼?

  1. 此表不能有兩個相同的作業 ID
  2. 此表可以有兩個或多個相同的作業 ID
  3. 此表可以在 JOB 列中包含 NULL 值
  4. 以上都不是

答案:A, C. JOB 列上的 UNIQUE 約束將限制重複值,但允許空值。

83. 如果將約束 emp_job_UK 修改為 emp_job_PK PRIMARY KEY (job),結果會怎樣?

  1. 只有當 JOB 列中沒有 NULL 值時,此更改才能發生
  2. 此更改可以在沒有任何限制的情況下發生
  3. 此更改將更改列 JOB 的值
  4. 以上都不是

答案:A.

84. 關於 UNIQUE key 約束,以下哪一項是正確的?

  1. 當在列上定義 UNIQUE 約束時,會隱式地建立一個唯一的鍵索引
  2. 當在列上定義 UNIQUE 約束時,會隱式地建立一個 PRIMARY KEY 約束
  3. 當在列上定義 UNIQUE 約束時,會隱式地建立一個 NOT NULL 約束
  4. 以上都不是

答案:A. 當對錶實施唯一約束時,Oracle 會在列上內部建立一個唯一鍵索引以限制值的重複。

85. 以下關於索引的哪一項是正確的?

  1. 如果對錶執行 UPDATE 語句,則也需要手動更新索引
  2. 如果對錶執行 DELETE 語句,則也需要手動刪除索引
  3. 刪除表時,索引會自動刪除
  4. 如果對錶執行 UPDATE 語句,則相應的索引也會更新。

答案:C, D.

86. 以下哪個 CREATE TABLE 語句有效?

  1. CREATE TABLE EMPLOYEES 
    (emp_id NUMBER (2) PRIMARY KEY,
    first_name VARCHAR(20),
    last_name VARCHAR(20),
    hire_date DATE NOT NULL); 
  2. CREATE TABLE EMPLOYEES 
    (emp_id NUMBER (2) PRIMARY KEY NOT NULL,
    first_name VARCHAR(20),
    last_name VARCHAR(20),
    hire_date DATE NOT NULL PRIMARY KEY); 
  3. CREATE TABLE EMPLOYEES 
    (emp_id NUMBER (2) PRIMARY KEY,
    first_name VARCHAR(20),
    last_name VARCHAR(20),
    hire_date DATE NOT NULL UNIQUE);
  4. CREATE TABLE EMPLOYEES 
    (emp_id NUMBER (2),
    first_name VARCHAR(20),
    last_name VARCHAR(20),
    hire_date DATE NOT NULL,
    CONSTRAINT emp_emp_id_PK PRIMARY KEY (emp_id)); 

答案:A, C, D. 所有 CREATE TABLE 指令碼都是有效的。

87. 一個表可以有多少個 PRIMARY KEY 約束?

  1. 0
  2. 無限
  3. 2
  4. 1

答案:D. 一個表只能有一個主鍵。

88. 你想在 EMP_ID 上設定一個 CHECK 約束,使其等於透過其獲取值的序列的當前值。以下哪個語句可以幫助你實現這一點?

  1. Emp_id NUMBER (10) CONSTRAINT emp_emp_id_chk CHECK (emp_id = EMPNO.CURRVAL);
  2. Emp_id NUMBER (10) CONSTRAINT emp_emp_id_chk CHECK (emp_id = EMPNO.NEXTVAL);
  3. Emp_id NUMBER (10) CONSTRAINT emp_emp_id_chk CHECK (EMPNO.CURRVAL);
  4. 以上都不是

答案:D. 你不能在 CHECK 約束中使用 CURRVAL、NEXTVAL、LEVEL 和 ROWNUM 偽列

89. 以下哪個命令可以幫助將外部索引鍵值轉換為 NULL?

  1. ON DELETE CASCADE
  2. ON DELETE SET NULL
  3. CASCADE
  4. REFERENCES

答案:B.

90. 你需要向 EMPLOYEES 表新增一個約束,該約束限制新增薪水低於 10000 的員工。以下哪個命令可以提供所需的結果?

  1. ALTER TABLE employees ADD CONSTRAINT emp_emp_sal_CHECK CHECK (salary >= 10000); 
  2. ALTER TABLE employees ADD CHECK CONSTRAINT emp_emp_sal_CHECK (salary>10000); 
  3. ALTER TABLE employees ADD CONSTRAINT CHECK emp_emp_sal_CHECK (salary = 10000); 
  4. ALTER TABLE employees ADD CONSTRAINT emp_emp_sal_CHECK (salary < 10000); 

答案:A.

91. 你需要向 EMPLOYEES 表新增一個約束,該約束強制所有員工的 HIRE_DATE 等於 SYSDATE-7。以下哪個語句可以提供所需的結果?

  1. ALTER TABLE employees ADD CHECK CONSTRAINT emp_emp_sal_CHECK  ( to_char(hire_date,'DD-MON-YY') = SYSDATE -7); 
  2. ALTER TABLE employees ADD CONSTRAINT CHECK emp_emp_sal_CHECK ( to_char(hire_date,'DD-MON-YY') = SYSDATE -7); 
  3. ALTER TABLE employees ADD emp_emp_sal_CHECK CHECK ( to_char(hire_date,'DD-MON-YY') = SYSDATE -7); 
  4. 以上都不是

答案:D. 你不能在 CHECK 約束中使用 SYSDATE、UID、USER 和 USERENV 函式。

請考慮以下查詢並回答後續的第 92 到 94 題

CREATE TABLE EMPLOYEES 
(emp_id NUMBER (2),
first_name VARCHAR(20),
last_name VARCHAR(20),
dept_id NUMBER (10),
hire_date DATE DEFAULT SYSDATE 
CONSTRAINT emp_emp_id_PK PRIMARY KEY (emp_id, hire_date)
CONSTRAINT emp_dept_FK FOREIGN KEY (dept_id) 
REFERENCES departments (dept_id)
); 

92. 以下哪個語句解釋了 CREATE TABLE 指令碼?

  1. 在 DEPT_ID 列的表級上定義了一個 FOREIGN KEY 約束
  2. 定義的 FOREIGN KEY 約束引用了 DEPARTMENTS 表中的 DEPT_ID
  3. A 和 B 都正確。
  4. 以上都不是

答案:C. 當我們為引用完整性定義 FOREIGN KEY 約束時,會使用 FOREIGN KEY 和 REFERENCES 關鍵字。

93. 當你刪除 EMPLOYEES 表時,你需要刪除 DEPARTMENTS 表中的所有依賴行。以下哪個命令可以解決此問題?(請考慮給定的表結構)

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SQL> DESC departments
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 DEPARTMENT_ID		 NOT NULL NUMBER(4)
 DEPARTMENT_NAME	 NOT NULL VARCHAR2(30)
 MANAGER_ID			  NUMBER(6)
 LOCATION_ID			  NUMBER(4)
  1. ON DELETE SET NULL
  2. ON DELETE CASCADE
  3. DELETE ALL
  4. FOR UPDATE

答案:B. 如果在約束定義中包含 ON DELETE CASCADE,並且從父表中刪除了記錄,則子表中的任何相應記錄也會自動刪除。

94. 如以下所示,EMPLOYEES 表中有 5 名員工在 10 部門工作。來自管理部門的執行人員發出以下查詢。

DELETE FROM departments
WHERE dept_id = 10; 

此查詢的結果是什麼?(假設表結構如所示)

SQL> DESC employees
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 EMPLOYEE_ID		 NOT NULL NUMBER(6)
 FIRST_NAME			  VARCHAR2(20)
 LAST_NAME		 NOT NULL VARCHAR2(25)
 EMAIL			 NOT NULL VARCHAR2(25)
 PHONE_NUMBER			  VARCHAR2(20)
 HIRE_DATE		 NOT NULL DATE
 JOB_ID 		 NOT NULL VARCHAR2(10)
 SALARY 			  NUMBER(8,2)
 COMMISSION_PCT 		  NUMBER(2,2)
 MANAGER_ID			  NUMBER(6)
 DEPARTMENT_ID			  NUMBER(4)
SQL> DESC departments
 Name			 Null?	  Type
 ----------------------- -------- ----------------
 DEPARTMENT_ID		 NOT NULL NUMBER(4)
 DEPARTMENT_NAME	 NOT NULL VARCHAR2(30)
 MANAGER_ID			  NUMBER(6)
 LOCATION_ID			  NUMBER(4)
  1. 完整性約束錯誤
  2. 執行成功
  3. A和B都不對。
  4. 以上都不是

答案:A. DEPARTMENTS 中的 DEPT_ID 是 EMPLOYEES 表中的外部索引鍵,並且 10 部門中存在員工,因此除非找到子記錄,否則無法從父表中刪除值。

廣告

© . All rights reserved.