- SQL 認證學習資料
- SQL - 簡介
- SQL - SQL 考試大綱
- SQL - SQL SELECT 語句
- SQL - 限制和排序資料
- SQL - 使用單行函式
- SQL - 條件表示式
- SQL - 使用組函式
- SQL - 從多個表中獲取資料
- SQL - 使用子查詢解決查詢
- SQL - 使用集合運算子
- SQL - 資料操作
- SQL - 使用 DDL 語句
- SQL - 建立其他模式物件
- SQL 認證題庫
- SQL - SQL SELECT 語句
- SQL - 限制和排序資料
- SQL - 使用單行函式
- SQL - 轉換函式
- SQL - 條件表示式
- SQL - 使用組函式
- SQL - 從多個表中獲取資料
- SQL - 使用子查詢解決查詢
- SQL - 使用集合運算子
- SQL - 資料操作
- SQL - 使用 DDL 語句
- SQL - 建立其他模式物件
- SQL 認證模擬考試
- SQL 認證 - 模擬考試
- SQL 認證有用資源
- SQL 認證 - 有用資源
- SQL 認證 - 討論
SQL - 使用 DDL 語句練習題
1.Oracle 資料庫中 DDL 的全稱是什麼?
- 資料刪除語言
- 資料定義語言
- 資料委派語言
- 虛擬資料語言
答案:B. DDL 是 SQL 的一個類別,代表資料定義語言。其他 SQL 型別包括 DML、DCL 和 TCL。
2.DDL 語句用於以下哪些 Oracle 資料庫物件?
- 表
- 子查詢
- 行
- 列
答案:A. DDL 包含 CREATE、ALTER 和 ANALYZE 等命令,用於在資料庫模式中建立表、檢視儲存的子程式和包。
3.Oracle 資料庫中包含資料的基本儲存單元是什麼?
- 檢視
- 列
- 查詢
- 表
答案:D. 表是 Oracle 資料庫中資料的物理儲存的基本單元。
4.以下哪個選項最能定義檢視?
- 它是表的簡寫形式
- 它是來自一個或多個表的子集的邏輯表示
- 它只有一行一列
- 以上都不是
答案:B. 檢視是一個查詢,它像一個視窗一樣格式化一個或多個表中包含的資料。檢視不包含任何物理資料,而只是一個在執行時建立的查詢。
5. 以下哪些是資料庫物件?
- 表
- 序列
- 同義詞
- 以上所有
答案:D. 物理儲存在資料庫模式中的物件是資料庫物件。
6. 以下哪些資料庫物件生成數值?
- 表
- 檢視
- 索引
- 序列
答案:D. 序列用於生成唯一的數值,從一個確定的值開始,並以指定的因子遞增。可以建立一個序列來生成一系列整數。序列生成的值可以儲存在任何表中。序列是使用 CREATE SEQUENCE 命令建立的。
7.以下哪些資料庫物件為物件提供替代名稱?
- 同義詞
- 序列
- 檢視
- 索引
答案:A. 同義詞為資料庫物件提供永久別名。公共同義詞可供任何資料庫使用者使用。私有同義詞僅可供建立它的使用者使用。同義詞是使用 CREATE SYNONYM 命令建立的。同義詞是使用 DROP SYNONYM 命令刪除的。只有具有 DBA 許可權的使用者才能刪除公共同義詞。
8.以下哪些資料庫物件可以提高某些查詢的效能?
- 表
- 同義詞
- 檢視
- 索引
答案:D.
9. 什麼時候可以建立表?
- 當資料庫沒有被任何使用者使用時
- 當資料庫新建立時
- 它可以在任何時候建立,即使使用者正在使用資料庫
- 以上都不是
答案:C. 可以建立索引以加快查詢過程。當存在索引時,DML 操作始終較慢。Oracle 11g 會自動為 PRIMARY KEY 和 UNIQUE 約束建立索引。顯式索引是使用 CREATE INDEX 命令建立的。如果查詢條件或排序操作基於用於建立索引的列或表示式,則 Oracle 11g 可以自動使用索引。
10. 關於表,以下哪項是正確的?
- 不必指定表的大小
- 每個表的大小相同
- 表可以線上修改
- 以上都不是
答案:A, C.
11. 建立了一個名為 123_A 的表來儲存組織中的員工人數。表名有什麼錯誤?
- 表名不能以數字開頭
- 這個名字沒有錯。
- 命名錶時不能使用下劃線
- 以上都不是
答案:A. 根據物件命名約定,表名必須以字母開頭。
12. 表名可以包含多少個字母?
- 1-20 個字元
- 1-10 個字元
- 1-30 個字元
- 1-50 個字元
答案:C. 表名不能超過 30 個字元。
13 以下哪些字元可以用於命名錶?
- A 到 Z
- a 到 z
- 0 到 9
- 以上所有
答案:D. 根據 Oracle 的標準命名約定,物件名稱可以包含任何大小寫的字母。強制要求第一個位置為字母,其餘位置可以是字母和數字的混合。
14. 以下哪些特殊字元可以用於命名錶?
- @
- #
- $
- _(下劃線)
答案:B, C, D. 命名錶時,不允許使用其他特殊字元(除了 (#, $, _))。不建議在表名中使用特殊字元。
15. 關於表名,以下哪項是正確的?
- 表可以具有與同一使用者擁有的其他物件使用的名稱相同的名稱
- 序列和表可以具有相同的名稱
- 檢視和表可以具有相同的名稱
- 表名不得重複同一使用者擁有的其他物件的名稱
答案:D. 根據名稱空間,表名不能與任何其他模式物件相同。共享相同名稱空間的模式物件包括表、檢視、序列、私有同義詞、儲存過程、儲存函式、包、物化檢視和使用者定義型別。
16.您建立一個表並將其命名為 COUNT。CREATE TABLE 指令碼的結果是什麼?
- 表將不會建立
- 表將被建立,並且會自動在名稱 COUNT_ 後新增下劃線
- 將丟擲 ORA 錯誤
- 表 COUNT 將在沒有任何錯誤的情況下建立
答案:A, C. 您不能使用與 Oracle 伺服器保留字相同的名稱建立表。
17. 您使用帶引號的識別符號 '' 建立一個表。您將如何引用此表?
- 'table_name'
- "table_name"
- A 或 B 均可
- 以上都不是
答案:B. 如果使用帶引號的識別符號建立了表名,則必須使用雙引號進行定址。不建議使用帶引號的識別符號。帶引號的識別符號區分大小寫
18. 您建立了一個名為 EMPLOYEES 的表。以下哪些是可能的?
- 可以將其稱為 eMPLOYEES
- 可以將其稱為 EMPLoyees
- 可以將其稱為 employees
- 以上所有
答案:D. 在 Oracle 中,未帶引號的物件名稱不區分大小寫。
19. 以下哪些是建立表的先決條件?
- CREATE TABLE 許可權
- 儲存空間
- 表中的資料
- 以上都不是
答案:A, B. 使用者必須擁有 CREATE TABLE 許可權,並且必須有足夠的儲存空間來分配表段的初始擴充套件。
20. 建立表的語法是什麼?
- CREATE TABLE [schema.] table (column datatype [DEFAULT expr] [,..] );
- CREATE TABLE INTO [schema.] table (column datatype [DEFAULT expr] [,..] );
- CREATE TABLE VALUES [schema.] table (column datatype [DEFAULT expr] [,..] );
- 以上都不是
答案:A.
21. 選擇建立表時必須指定的元素。
- 列名
- 列資料型別
- 列大小
- 以上所有
答案:D. 表必須至少包含一列,其資料型別規範以及精度(如果需要)。
22. 一個名為“Kevin”的使用者想要訪問另一個名為“Jonathan”的使用者擁有的表。以下哪些對 Kevin 有效?
- Select * from Kevin.employees;
- Select * from jonathan.employees;
- A 或 B 均可
- 以上都不是
答案:B.
23. 關於模式,以下哪項是正確的?
- 模式由資料庫使用者擁有,並且與該使用者具有相同的名稱
- 每個使用者擁有一個模式
- 模式物件包括資料庫連結
- 以上所有
答案:D. 資料庫中的使用者空間稱為模式。模式包含使用者擁有或訪問的物件。每個使用者可以擁有自己的單個模式。
24. 關於表,以下哪項是正確的?
- 為表提供了預設值
- 在 INSERT 語句期間,可以為表的列提供預設值
- A 或 B 均可
- 以上都不是
答案:B. 可以使用 DEFAULT 關鍵字在定義期間為列指定預設值。
25. 建立表時,以下哪些可以與 DEFAULT 選項一起使用?
- 字串
- 表示式
- SQL 函式
- 以上所有
答案:D. 列的預設值可以是文字或使用 SQL 函式的派生值。
26. 以下哪個命令用於查看錶的結構?
- UPDATE
- SHOW
- DESCRIBE
- SPOOL
答案:C. DESCRIBE 是一個 SQL*Plus 命令,用於列出表的結構。
27.列上的 CHECK 約束的限制是多少?
- 無限制
- 1
- 2
- 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)
DROP employees
DROP TABLE employees
TRUNCATE employees
- 以上都不是
答案:B.
29. 關於名稱空間,以下哪項是正確的?
- 它是物件型別組
- 在名稱空間中,所有物件名稱都應由模式和名稱唯一標識
- 不同名稱空間中的相同型別的物件可以共享相同的名稱
- 以上所有
答案:D. 名稱空間定義了一組物件型別,其中所有名稱都必須由模式和名稱唯一標識。不同名稱空間中的物件可以共享相同的名稱。
30. 以下哪些物件型別共享相同的名稱空間?
- 同義詞
- 表
- 檢視
- 以上所有
答案:D.
31. 關於表和索引,以下哪項是正確的?
- 在同一個模式中,索引和表可以具有相同的名稱。
- 在同一個模式中,索引和表不能具有相同的名稱。
- A和B都不對。
- 以上都不是
答案:A. 由於索引和約束共享相同的名稱空間,因此表和索引可以具有相同的名稱。
32. 建立表時,哪些說法是正確的?
- 建立表時,應為每一列分配資料型別。
- 為列分配資料型別不是強制性的。
- 必須為表分配資料型別,而不是為列分配資料型別。
- 以上都不是
答案:A. 為了構建表的結構,每一列都必須擁有行為屬性,例如資料型別和精度。
33. 假設您建立了一個如下所示的表
CREATE TABLE employees (emp_id NUMBER(4), last_name VARCHAR2 (20) );
Oracle 將為 LAST_NAME 列分配多少空間?
- 如果沒有行,則 Oracle 不會為 last_name 列分配任何空間。
- 如果填充了行,則 Oracle 將為 last_name 列分配無限空間。
- A和B都不對。
- 以上選項都不正確。
答案:A.
34. VARCHAR2 資料型別的尺寸範圍是多少?
- 1 位元組到 2 位元組
- 1 位元組到 2000 位元組
- 1 位元組到 4000 位元組
- 以上都不是
答案:C. 在 Oracle 11g Release 2 之前,字串資料型別 VARCHAR2 最多可以包含 4000 位元組。
35. CHAR 資料型別的尺寸範圍是多少?
- 1 位元組到 2 位元組
- 1 位元組到 2000 位元組
- 1 位元組到 4000 位元組
- 1 位元組到 3000 位元組
答案:B. 在 Oracle 11g Release 2 之前,字串資料型別 CHAR 最多可以包含 2000 位元組。
36. 關於 CHAR 資料型別,哪些說法是正確的?
- 如果資料長度與列長度不一致,則將被替換為 NULL 值。
- 如果資料長度與列長度不一致,則將用空格填充。
- 資料必須與 CHAR 尺寸中指定的尺寸相同,否則會丟擲 ORA 錯誤。
- 以上都不是
答案:B. CHAR 為值提供固定長度的儲存,而 VARCHAR2 是靈活的。如果將長度小於 CHAR 精度的值插入 CHAR 列,則剩餘長度將被填充到列值中。
37. 以下哪個是用於可變長度二進位制資料的型別?
- VARCHAR
- VARCHAR2
- RAW
- NVARCHAR2
答案:C.
38. NUMBER 資料型別允許的精度是多少?
- 1 到 20
- 1 到 4K
- 1 到 30
- 1 到 38 位數字
答案:D. 在 Oracle 11g Release 2 之前,主要資料型別 NUMBER 的最大精度為 38 位數字。
39. NUMBER 資料型別允許的刻度是多少?
- 1 到 20
- -84 到 100
- -84 到 127
- 以上都不是
答案:C.
40. 以下哪些是日期和時間資料的資料型別?
- TIMESTAMP
- INTERVAL DAY TO SECOND
- TIMESTAMP WITH LOCAL TIMEZONE
- 以上所有
答案:D.
41. 以下哪些資料型別用於大型物件?
- CLOB
- BLOB
- RAW
- 以上所有
答案:A, B. SQL 中的 LOB 資料型別有 BLOB、CLOB 和 BFILE。
42. 如果插入的值比 VARCHAR2 資料型別列定義的長度短,會發生什麼情況?
- 它將丟擲一個 ORA 錯誤。
- 它將成功插入,並且該值將佔用其所需的儘可能多的空間。
- 它將被插入,並且剩餘的空間將用空格填充。
- 以上都不是
答案:B. VARCHAR2 包含可變長度字元資料。
43. Oracle 中的 NUMBER (8, 2) 是什麼意思?
- 這意味著總共有 8 位數字,小數點前 6 位,小數點後 2 位。
- 這意味著總共有 10 位數字,小數點前 8 位,小數點後 2 位。
- 這意味著小數點前 2 位,小數點後 8 位。
- 以上都不是
答案:A. p 表示精度,即小數點左側和右側的數字總數,最多 38 位;s 或刻度表示小數點右側的位數。例如:NUMBER(7, 2) 可以儲存高達 99999.99 的數值。如果未指定精度或刻度,則該列預設為 38 位精度。
44. 以下哪個查詢將建立一個沒有行的表?
CREATE TABLE emp AS SELECT 0 from dual;
CREATE TABLE emp AS SELECT * from employees where 1=1;
CREATE TABLE emp AS SELECT * from employees where 1=2;
CREATE TABLE emp AS SELECT 0 from employees;
答案:C. 直接路徑操作 CTAS (CREATE TABLE .. AS SELECT..) 可用於複製現有表的結構而不復制資料。
45. 以下哪個語句將向已建立的表中新增一列?
ALTER TABLE table_name add column (job varchar2(20));
ALTER TABLE table_name add job varchar2(20);
ALTER TABLE table_name add (job varchar2(20));
ALTER TABLE table_name add column (job);
答案:C. ALTER TABLE 命令允許使用者向表中新增新列。在新建表中建立列的相同規則也適用於向現有表中新增列。新列必須由列名和資料型別(以及寬度,如果適用)定義。還可以分配預設值。區別在於新列新增到現有表的末尾——它將是最後一列。
46. 以下哪個語句將修改已存在列的資料型別?
ALTER TABLE table_name MODIFY (job varchar2(10) );
ALTER TABLE table_name MODIFY job varchar2(10);
ALTER TABLE table_name MODIFY column (job varchar2(10) );
ALTER TABLE table_name MODIFY (job varchar2(10) );
答案:A. ALTER TABLE..MODIFY 用於修改表中的列定義。允許的更改包括增加列精度、在資料型別族內更改資料型別或更改列的預設值。
47. 以下哪個語句將從表中刪除一列?
ALTER TABLE table_name DROP (job varchar2(10) );
ALTER TABLE table table_name DROP COLUMN (job varchar2(10) );
ALTER TABLE table table_name DROP COLUMN (job);
ALTER TABLE table_name MODIFY (job varchar2(10) );
答案:C. ALTER TABLE..DROP COLUMN 可用於從表中刪除一列。
48. 以下哪個將列 emp_id 重新命名為 empno?
ALTER TABLE employees RENAME column emp_id to empno;
ALTER TABLE employees RENAME emp_id to empno;
ALTER TABLE employees RENAME column emp_id to empno;
- 以上都不對;
答案:A. ALTER TABLE..RENAME 可用於重命名錶中已存在的列。
49. 您需要將 employees 表標記為只讀。要獲得所需結果,您將執行以下哪個語句?
ALTER TABLE employees set READ;
ALTER TABLE employees READ ONLY;
ALTER TABLE employees READ_ONLY;
ALTER TABLE employees set READ ONLY;
答案:B. 可以將表標記為只讀,使其對 DML 和 DDL 語句處於被動狀態。只讀功能是在 Oracle 11g 中引入的。
50. 關於 DDL 語句,以下哪些說法是正確的?
- DDL 命令成為正在進行的事務的一部分。
- DDL 命令是自動提交的,並結束正在進行的活動事務。
- 如果 DDL 命令失敗,當前事務仍將提交。
- 如果 DDL 命令失敗,當前事務將回滾。
答案:B. 只有在 DDL 命令成功執行且沒有錯誤時,它才是自動提交的。如果 DDL 命令失敗,則會話中的正在進行的事務仍然處於活動狀態,並且不會提交到資料庫中。
51. 如果在發出 DDL 的表上存在活動事務,會發生什麼情況?
- 事務回滾。
- 事務提交併終止。
- A 和 B 都正確。
- 以上都不是
答案:B.
52. 以下哪個命令將刪除 SQL 語句中未使用的列?
ALTER TABLE tablename DROP COLUMN column_name;
ALTER TABLE tablename DROP unused columns;
ALTER TABLE tablename set unused column;
ALTER TABLE tablename DROP columns;
答案:C. SET UNUSED 命令僅刪除表中未使用的列,並且速度更快。
53. 當嘗試刪除標記為只讀的表時會發生什麼情況?
- 它將丟擲一個錯誤。
- 它將不再是隻讀的,但也不能被刪除。
- 它將被刪除,不會出現錯誤。
- 它將保持不變。
答案:C. DROP 命令會影響未設定為只讀的表的字典定義,因此可以刪除。
考慮以下語句,並回答後面的問題 54 和 55。
CREATE TABLE departments (dept_id NUMBER (2), dept_name VARCHAR2(14), create_date DATE DEFAULT SYSDATE);
54. 如果從語句中刪除 DEFAULT 子句規範會發生什麼情況?
- 指令碼將丟擲錯誤,因為 DATE 列必須指定預設值。
- 系統生成的預設值將分配給該列。
- 表將建立,並且 CREATE_DATE 列沒有預設值。
- 以上都不是
答案:C.
55. 關於以上語句,哪些說法是正確的?
- 它將自動提交會話中的事務。
- 它將在模式中建立 DEPARTMENTS 表。
- 它將為 CREATE_DATE 列設定預設值。
- 以上都不是
答案:A, B, C.
56. BLOB 資料型別列最多可以儲存多少資料?
- 1 KB
- 2 GB
- 4 GB
- 3 KB
答案:C. 根據 Oracle 11g,BLOB 中可以容納的最大資料大小為 4GB。
57. CLOB 和 BLOB 資料型別有什麼區別?(選擇最合適的答案)
- CLOB 是字元資料,BLOB 是二進位制資料。
- CLOB 是最多 2GB 的字元資料,BLOB 是最多 4GB 的二進位制資料。
- CLOB 是最多 4GB 的字元資料,BLOB 是最多 4GB 的二進位制資料。
- 以上都不是
答案:C. CLOB 是字元大型物件,用於儲存字元檔案,如 PDF、文件和文字檔案,而 BLOB 是二進位制 LOB,用於儲存媒體檔案。
58. 以下哪個是 ROWID?
- 它是賦予一組行的序列號,從 1 開始。
- 它是賦予表中行的字母數字地址。
- A 和 B 都正確。
- 以上都不是
答案:B. 它是表示其表中行唯一地址的 Base-64 系統。
59. 用於儲存儲存在外部檔案(最多 4GB)中的二進位制資料的型別是什麼?
- BLOB
- CLOB
- CFILE
- BFILE
答案:D. BFILE 是一種外部 LOB 型別,用於引用外部媒體檔案。內部 LOB 型別是 BLOB 和 CLOB,分別用於儲存在資料庫中的二進位制大型檔案和字元大型檔案。
60. 使用子查詢建立的表有什麼特點?
- 使用子查詢建立表時,不會複製 VARCHAR2 資料型別列。
- 使用子查詢建立表時,不會複製 CLOB 資料型別列。
- 使用子查詢建立表時,不會複製 LONG 列。
- 以上都不是
答案:C. 使用 CTAS 方法建立表不會複製 LONG 列。
61. 以下哪個資料型別不能與 GROUP BY 和 ORDER BY 子句一起使用?
- CLOB
- VARCHAR2
- CHAR
- LONG
答案:D. LONG 資料型別不能在 GROUP BY 和 ORDER BY 子句中使用。
62. 表最多可以包含多少個 LONG 列?
- 不能包含。
- 最多 2 個。
- 至少 2 個。
- 只能 1 個。
答案:D. 表最多隻能包含一列 LONG 型別列。
63. 以下哪個資料型別不能在 SQL 中受約束?
- VARCHAR2
- LONG
- CHAR
- DATE
答案:B. 無法在 LONG 型別列上建立約束。
64. 如果需要帶有小數秒的日期,可以使用以下哪個資料型別?
- DATE
- VARCHAR2
- TIMESTAMP
- 以上都不是
答案:C. TIMESTAMP 資料型別提供了更精確的日期值資訊。它提供小數秒和時區資訊。
65. 您需要在列中儲存天、小時、分鐘和秒的間隔。哪個資料型別可以幫助您?
- TIMESTAMP
- INTERVAL YEAR TO MONTH
- INTERVAL DAY TO SECOND
- 以上都不是
答案:C.
66. 您需要查詢 2011 年 6 月和 2012 年 6 月有多少員工入職。以下哪個資料型別可以幫助您?
- INTERVAL DAY TO SECOND
- TIMESTAMP
- DATE
- INTERVAL YEAR TO MONTH
答案:D.
67. 關於約束,哪些說法是正確的?
- 它們在行級別強制執行規則。
- 它們在表級別強制執行規則。
- 建立表時必須建立約束。
- 以上都不是
答案:B. 約束是對新增到表的**資料**應用的規則。它表示業務規則、策略或流程。違反約束的資料不會新增到表中。約束可以在建立表時作為 CREATE TABLE 命令的一部分包含在內,也可以使用 ALTER TABLE 命令新增到現有表中。基於複合列(多於一列)的約束必須使用表級方法建立。
68. 約束如何提供幫助?
- 它們限制表的儲存容量,從而節省資料庫空間
- 它們阻止對錶的修改
- 如果存在依賴項,則它們會阻止刪除表
- 以上都不是
答案:C. 約束是對新增到表的**資料**應用的規則。它表示業務規則、策略或流程。違反約束的資料不會新增到表中。
69. RAW 資料型別列可以儲存的最大長度的可變長度二進位制字串是多少?
- 10 GB
- 1 TB
- 2 GB
- 4 GB
答案:C.
70. 以下哪些是 Oracle 中有效的約束?
- INDEX
- GENERAL
- UNIQUE
- PRIMARY KEY
答案:C, D. NOT NULL 約束只能使用列級方法建立。PRIMARY KEY 約束不允許在指定的列中出現重複值或 NULL 值。一個表中只能有一個 PRIMARY KEY 約束。FOREIGN KEY 約束要求列條目與表中引用的列條目匹配或為 NULL。UNIQUE 約束類似於 PRIMARY KEY 約束,但允許在指定的列中儲存 NULL 值。CHECK 約束確保資料在新增到表之前滿足給定條件。
71. 以下哪些 DML 操作會考慮列上的約束?
- INSERT
- UNION
- DELETE
- UPDATE
答案:A, C, D. 所有 DML 操作都遵守表列上的約束。
72. 什麼時候可以建立約束?
- 建立表時
- 建立表後
- A 和 B 都正確。
- 以上都不是
答案:C. 約束可以在建立表時作為 CREATE TABLE 命令的一部分包含在內,也可以使用 ALTER TABLE 命令新增到現有表中。
73. 約束儲存在哪裡?
- 在 SGA 中
- 在表中
- 在資料字典中
- 以上都不是
答案:C.
74. 你建立了一個約束但沒有命名它。將為該約束分配什麼預設名稱?
- SYS_Cn
- SYS_constraint
- SYS_Const
- SYS_C0
答案:A. 預設情況下,Oracle 會為約束分配一個通用名稱 SYS_Cn,其中 n 是一個整數,用於保持約束名稱的唯一性。
75. 列級約束和表級約束在功能上有什麼區別?
- 列級約束應用於表的**所有**列
- 表級約束應用於表的**所有**列
- 它們在功能上相同,只有語法不同
- 以上都不是
答案:C. 從功能上講,表級約束和列級約束的工作方式類似。複合約束只能在表級定義。
76. 關於列級約束,以下哪一項是正確的?
- 它們可以在建立表之前建立
- 它們可以在定義列之前建立
- 它們在定義列時包含在內
- 以上都不是
答案:C. 列級約束與列規範一起定義。
77. 關於 SQL 中的 NOT NULL 約束,以下哪一項是正確的?
- 它們應該在表級定義
- 它們應該在列級定義
- 它們應該只定義在一個列上
- 它們應該只定義在一行上
答案: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. 在上述語句中建立了哪種型別的約束?
- 列級約束
- 表級約束
- 命名約束
- 規範約束
答案:A. 列級約束是在列定義時建立的。
79. 可以對上述語句進行哪些修改以使其成為表級約束?
- CONSTRAINT emp_emp_id_PK PRIMARY KEY
- CONSTRAINT emp_emp_id_PK PRIMARY KEY (EMP_ID)
- CONSTRAINT emp_emp_id_PK EMP_ID PRIMARY KEY
- CONSTRAINT PRIMARY KEY emp_emp_id_PK
答案:B.
80. 關於 PRIMARY KEY 約束,以下哪一項是正確的?
- 它會隱式地將 NOT NULL 約束應用於其定義所在的列
- 它會隱式地將 UNIQUE KEY 約束應用於其定義所在的列
- 它會隱式地將 CHECK 約束應用於其定義所在的列
- 它會隱式地將 DEFAULT 約束應用於其定義所在的列
答案:A. PRIMARY KEY 約束不允許在指定的列中出現重複值或 NULL 值。一個表中只能有一個 PRIMARY KEY 約束。
81. 關於 UNIQUE KEY 約束,以下哪一項是正確的?
- UNIQUE KEY 約束和 PRIMARY KEY 約束相同
- 如果列上沒有定義 NOT NULL,則 UNIQUE KEY 約束允許 NULL 值
- 當在列上定義 UNIQUE KEY 約束時,可以有兩行內容完全相同
- 以上都不是
答案: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 指令碼?
- 此表不能有兩個相同的作業 ID
- 此表可以有兩個或多個相同的作業 ID
- 此表可以在 JOB 列中包含 NULL 值
- 以上都不是
答案:A, C. JOB 列上的 UNIQUE 約束將限制重複值,但允許空值。
83. 如果將約束 emp_job_UK 修改為 emp_job_PK PRIMARY KEY (job),結果會怎樣?
- 只有當 JOB 列中沒有 NULL 值時,此更改才能發生
- 此更改可以在沒有任何限制的情況下發生
- 此更改將更改列 JOB 的值
- 以上都不是
答案:A.
84. 關於 UNIQUE key 約束,以下哪一項是正確的?
- 當在列上定義 UNIQUE 約束時,會隱式地建立一個唯一的鍵索引
- 當在列上定義 UNIQUE 約束時,會隱式地建立一個 PRIMARY KEY 約束
- 當在列上定義 UNIQUE 約束時,會隱式地建立一個 NOT NULL 約束
- 以上都不是
答案:A. 當對錶實施唯一約束時,Oracle 會在列上內部建立一個唯一鍵索引以限制值的重複。
85. 以下關於索引的哪一項是正確的?
- 如果對錶執行 UPDATE 語句,則也需要手動更新索引
- 如果對錶執行 DELETE 語句,則也需要手動刪除索引
- 刪除表時,索引會自動刪除
- 如果對錶執行 UPDATE 語句,則相應的索引也會更新。
答案:C, D.
86. 以下哪個 CREATE TABLE 語句有效?
CREATE TABLE EMPLOYEES (emp_id NUMBER (2) PRIMARY KEY, first_name VARCHAR(20), last_name VARCHAR(20), hire_date DATE NOT NULL);
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);
CREATE TABLE EMPLOYEES (emp_id NUMBER (2) PRIMARY KEY, first_name VARCHAR(20), last_name VARCHAR(20), hire_date DATE NOT NULL UNIQUE);
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 約束?
- 0
- 無限
- 2
- 1
答案:D. 一個表只能有一個主鍵。
88. 你想在 EMP_ID 上設定一個 CHECK 約束,使其等於透過其獲取值的序列的當前值。以下哪個語句可以幫助你實現這一點?
- Emp_id NUMBER (10) CONSTRAINT emp_emp_id_chk CHECK (emp_id = EMPNO.CURRVAL);
- Emp_id NUMBER (10) CONSTRAINT emp_emp_id_chk CHECK (emp_id = EMPNO.NEXTVAL);
- Emp_id NUMBER (10) CONSTRAINT emp_emp_id_chk CHECK (EMPNO.CURRVAL);
- 以上都不是
答案:D. 你不能在 CHECK 約束中使用 CURRVAL、NEXTVAL、LEVEL 和 ROWNUM 偽列
89. 以下哪個命令可以幫助將外部索引鍵值轉換為 NULL?
- ON DELETE CASCADE
- ON DELETE SET NULL
- CASCADE
- REFERENCES
答案:B.
90. 你需要向 EMPLOYEES 表新增一個約束,該約束限制新增薪水低於 10000 的員工。以下哪個命令可以提供所需的結果?
ALTER TABLE employees ADD CONSTRAINT emp_emp_sal_CHECK CHECK (salary >= 10000);
ALTER TABLE employees ADD CHECK CONSTRAINT emp_emp_sal_CHECK (salary>10000);
ALTER TABLE employees ADD CONSTRAINT CHECK emp_emp_sal_CHECK (salary = 10000);
ALTER TABLE employees ADD CONSTRAINT emp_emp_sal_CHECK (salary < 10000);
答案:A.
91. 你需要向 EMPLOYEES 表新增一個約束,該約束強制所有員工的 HIRE_DATE 等於 SYSDATE-7。以下哪個語句可以提供所需的結果?
ALTER TABLE employees ADD CHECK CONSTRAINT emp_emp_sal_CHECK ( to_char(hire_date,'DD-MON-YY') = SYSDATE -7);
ALTER TABLE employees ADD CONSTRAINT CHECK emp_emp_sal_CHECK ( to_char(hire_date,'DD-MON-YY') = SYSDATE -7);
ALTER TABLE employees ADD emp_emp_sal_CHECK CHECK ( to_char(hire_date,'DD-MON-YY') = SYSDATE -7);
- 以上都不是
答案: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 指令碼?
- 在 DEPT_ID 列的表級上定義了一個 FOREIGN KEY 約束
- 定義的 FOREIGN KEY 約束引用了 DEPARTMENTS 表中的 DEPT_ID
- A 和 B 都正確。
- 以上都不是
答案: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)
- ON DELETE SET NULL
- ON DELETE CASCADE
- DELETE ALL
- 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)
- 完整性約束錯誤
- 執行成功
- A和B都不對。
- 以上都不是
答案:A. DEPARTMENTS 中的 DEPT_ID 是 EMPLOYEES 表中的外部索引鍵,並且 10 部門中存在員工,因此除非找到子記錄,否則無法從父表中刪除值。