一、 填空題
- 在用 create 語句創建基本表時,最初只是一個空的框架,用戶可以使用insert命令把數據插入表中。
- 在基本表不需要時,可以使用 drop table 語句撤消。在一個基本表撤消后,所有的數據都丟棄。所有相關的索引被刪除。
- 可以使用 rename 語句改變表名(視圖),要求必須是表(視圖)的所有者。
- 根據約束的作用域,約束可以分為表級約束和列級約束兩種。 列級約束 是字段定義的一部分,只能夠應用在一個列上;而另外一種約束的定義獨立於列的定義,它可以應用於一個表中的多個列。
- 完整性約束分類:域完整性約束、實體完整性約束、 參照完整性約束 。
- 主鍵約束 是數據庫中最重要的一種約束。在關系中,主鍵值不可為空,也不允許出現重復,即關系要滿足實體完整性規則。
- 唯一性約束確保所在的字段或者字段組合不出現重復值。
- 索引類似字典的和課本目錄,是為了加快對數據的搜索速度而設立的。
- 索引類型默認采用 B樹數據結構,數據全部集中在葉子節點。
- 視圖 是從若干基本表和(或)其他視圖構造出來的表。
- 在用戶使用視圖時才去求相對應的數據。所以視圖被稱作 虛表 。
- 如果視圖對應多個表,一般不允許添加操作,可以通過 觸發器解決。
- 使用 with read only 定義只讀視圖。
- 事務(Transaction)是一個操作序列。這些操作要么都做,要么都不做,是一個不可分割的工作單位,是數據庫環境中的邏輯工作單位。
- commit 表示事務成功地結束,此時告訴系統,數據庫要進入一個新的正確狀態,該事務對數據庫的所有更新都以交付實施。
- 一旦執行了commit語句,將目前對數據庫的操作提交給數據庫(實際寫入DB),以后就不能用 rollback 進行撤銷。
- 為保證數據庫設計水平,必須遵循一定的規則,在關系型數據庫中這種規則就稱為 范式 。
- 第一范式:簡單說就是要確保每列保持 原子性 。
- Oralce數據庫在進行物理備份有聯機備份和 脫機備份 兩種方式可供選擇。
- 在多進程Oracle實例系統中,進程分為用戶進程、后台進程和 服務進程 。
二、 選擇題
| 1. |
從數據庫中刪除表的命令是( A )。(選擇一項) |
|
|
|
|
|
|
|
A. |
DROP TABLE |
|
|
B. |
ALTER TABLE |
|
|
C. |
DELETE TABLE |
|
|
D. |
USE |
| 2. |
Oracle中要生成數據庫表,下列哪個選項是無效表生成的語句( D )。(選擇一項) |
|
|
|
|
|
|
|
A. |
create table cats(c_name varchar2(10), c_weight number, c_owner varchar2(10)); |
|
|
B. |
create table my_cats as select * from cats where owner = ‘ME’; |
|
|
C. |
create global temporary table temp_cats(c_name varchar2(10), c_weight number, c_owner varchar2(10)); |
|
|
D. |
create table 51cats as select c_name, c_weight from cats where c_weight > 5; |
| 3. |
如果在一個關系中,存在某個屬性(或屬性組),雖然不是該關系的主碼或只是主碼的一部分,但卻是另一個關系的主碼時,稱該屬性(或屬性組)為這個關系的( C )(選擇一項) |
|
|
|
|
|
|
|
A. |
候選碼 |
|
|
B. |
主碼 |
|
|
C. |
外碼 |
|
|
D. |
連接碼 |
| 4. |
SQL語句中修改表結構的命令是( C )。(選擇一項) |
|
|
|
|
|
|
|
A. |
MODIFY TABLE |
|
|
B. |
MODIFY STRUCTURE |
|
|
C. |
ALTER TABLE |
|
|
D. |
ALTER STRUCTURE |
| 5. |
關系模型有三類完整性約束:實體完整性、參照完整性和用戶定義的完整性。定義外鍵實現的是哪一(些)類完整性( B )。(選擇一項) |
|
|
|
|
|
|
|
A. |
實體完整性 |
|
|
B. |
參照完整性 |
|
|
C. |
用戶定義的完整性 |
|
|
D. |
實體完整性、參照完整性和用戶定義的完整性 |
| 6. |
在關系數據庫中,建立數據庫表時,將年齡字段值限制在12~40歲之間的這種約束屬於( B )。(選擇一項) |
|
|
|
|
|
|
|
A. |
視圖完整性約束 |
|
|
B. |
域完整性約束 |
|
|
C. |
參照完整性約束 |
|
|
D. |
實體完整性約束 |
| 7. |
用於刪除約束的命令是哪一個( C )。(選擇一項) |
|
|
|
|
|
|
|
A. |
ALTER TABLE MODIFY CONSTRAINT |
|
|
B. |
DROP CONSTRAINT |
|
|
C. |
ALTER TABLE DROP CONSTRAINT |
|
|
D. |
ALTER CONSTRAINT DROP |
| 8.
|
現有如下關系:職工(職工號,姓名,性別,職務) |
|
|
|
|
|
|
|
A. |
部門編號 |
|
|
B. |
姓名 |
|
|
C. |
職工號 |
|
|
D. |
職工號,姓名 |
| 9. |
要控制兩個表中數據的完整性和一致性可以設置"參照完整性",要求這兩個表( A )。(選擇一項) |
|
|
|
|
|
|
|
A. |
是同一個數據庫中的兩個表 |
|
|
B. |
不同數據庫中的兩個表 |
|
|
C. |
兩個自由表 |
|
|
D. |
一個是數據庫表另一個是自由表 |
| 10. |
刪除Oracle數據庫中父/子關系中的父表。在刪除父表時下列哪個對象不會刪除( B )。(選擇一項) |
|
|
|
|
|
|
|
A. |
相關約束 |
|
|
B. |
子表 |
|
|
C. |
相關觸發器 |
|
|
D. |
相關索引 |
| 11. |
假定USER表的PRIMARY KEY約束名為USER_ID_PK,下面哪一個語句將刪除這個約束( C )。(選擇一項) |
|
|
|
|
|
|
|
A. |
DROP CONSTRAINT USER_ID_PK; |
|
|
B. |
ALTER TABLE USER DROP USER_ID_PK; |
|
|
C. |
ALTER TABLE USER DROP CONSTRAINT USER_ID_PK; |
|
|
D. |
ALTER TABLE USER DROP PRIMARY KEY; |
| 12. |
對於索引以下不正確的描述是( D )。(選擇一項) |
|
|
|
|
|
|
|
A. |
索引可以加快查詢效率 |
|
|
B. |
索引與DML速度無關 |
|
|
C. |
索引創建后會自動被Oracle使用 |
|
|
D. |
索引不占用存儲空間 |
| 13. |
索引字段值不唯一,應該選擇的索引類型為( B )。(選擇一項) |
|
|
|
|
|
|
|
A. |
主索引 |
|
|
B. |
普通索引 |
|
|
C. |
候選索引 |
|
|
D. |
唯一索引
|
| 14. |
對於學生—選課—課程的三個關系 |
|
|
|
|
|
|
|
A. |
(S#,C#) |
|
|
B. |
S# |
|
|
C. |
C# |
|
|
D. |
GRADE |
| 15. |
如果要創建一個數據組分組報表,第一個分組表達式是"部門",第二個分組表達式是"性別",第三個分組表達式是"基本工資",當前索引的索引表達式應當是( B )。(選擇一項) |
|
|
|
|
|
|
|
A. |
部門+性別+基本工資 |
|
|
B. |
部門+性別+STR(基本工資) |
|
|
C. |
STR(基本工資)+性別+部門 |
|
|
D. |
性別+部門+STR(基本工資) |
| 16. |
哪個約束會自動建立索引( AC )。(選擇二項) |
|
|
|
|
|
|
|
A. |
主碼 |
|
|
B. |
外碼 |
|
|
C. |
唯一 |
|
|
D |
CHECK |
| 17. |
在SQL中,刪除視圖用( C )。(選擇一項) |
|
|
|
|
|
|
|
A. |
DROP SCHEMA命令 |
|
|
B. |
CREATE TABLE命令 |
|
|
C. |
DROP VIEW命令 |
|
|
D. |
DROP INDEX命令 |
| 18. |
對於學生—選課—課程的三個關系S(S#,SNAME,SEX,AGE) SC(S#,C#,GRADE) C(C#,CNAME,TEACHER) 為了考慮安全性,每個教師只能存取自己講授的課程的學生成績,應創建( A )。(選擇一項) |
|
|
|
|
|
|
|
A. |
視圖 |
|
|
B. |
索引 |
|
|
C. |
游標 |
|
|
D. |
表 |
| 19. |
下列關於關系數據庫視圖的說法中,哪些是錯誤的( A )(選擇一項) |
|
|
|
|
|
|
|
A. |
視圖是關系數據庫三級模式中的內模式。 |
|
|
B. |
視圖能夠對機密數據庫提供一定的安全保護。 |
|
|
C. |
視圖對重構數據庫提供了一定程度的邏輯獨立性 |
|
|
D. |
對視圖的一切操作最終都要轉換為對基本表的操作 |
| 20. |
數據庫的並發操作可能帶來的問題包括( B )。(選擇一項) |
|
|
|
|
|
|
|
A. |
非法用戶的使用 |
|
|
B. |
丟失更新 |
|
|
C. |
數據獨立性會提高 |
|
|
D. |
增加數據冗余度 |
| 21. |
在oracle中獲取前10條的關鍵字是( D )。(選擇一項) |
|
|
|
|
|
|
|
A. |
Top |
|
|
B. |
Limit |
|
|
C. |
First |
|
|
D. |
Rownum |
| 22.
|
Oracle中,有一個名為seq的序列對象,以下語句能返回序列值但不會引起序列值增加的是( C )。(選擇一項) |
|
|
|
|
|
|
|
A. |
select seq.ROWNUM from dual; |
|
|
B. |
select seq.ROWID from dual; |
|
|
C. |
select seq.CURRVAL from dual; |
|
|
D. |
select seq.NEXTVAL from dual; |
| 23. |
下面對序列venseq修改的語句,錯誤的是( A )。(選擇一項) |
|
|
|
|
|
|
|
A. |
ALTER SEQUENCE venseq START WITH 1 |
|
|
B. |
ALTER SEQUENCE venseq MAXVALUE 90 |
|
|
C. |
ALTER SEQUENCE venseq NOMINVALUE |
|
|
D. |
ALTER SEQUENCE venseq NOCACHE |
三、 判斷題
- 唯一性約束條件的字段允許出現空值,但是最多只能是一個空值。( F )
- 可增加或刪除約束,也可以直接修改。( F )
- 序列是oracle專有的對象,它用來產生一個自動遞增的數列。( T )
- 索引的作用:在數據庫中用來加速對表的查詢,通過使用快速路徑訪問方法快速定位數據,減少了磁盤的I/O。( T )
- 索引數據不會占用存儲空間。( F )
- 索引改善檢索操作的性能,但降低數據插入、修改和刪除的性能。在執行這些操作時,DBMS必須動態地更新索引。( T )
- 刪掉視圖不會導致數據丟失,因為視圖是基於數據庫表的一個查詢。( T )
- 改變基本表的數據,不會反應到基於該表的視圖上。( F )
- 視圖可以基於一個表、多個表,甚至是基於其他的視圖。( T )
- Rollback表示事務不成功的結束,此時告訴系統,已發生錯誤,數據庫可能處在不正確的狀態,該事務對數據庫的更新必須被撤銷,數據庫應恢復該事務到初始狀態。每個Rollback語句同時也是另一個事務的開始。( T )
- 范式是符合某一種設計要求的總結。要想設計一個結構合理的關系型數據庫,必須滿足一定的范式。( T )
- 范式越高,設計質量越高,在現實設計中也越難實現。一般數據庫設計,只要達到第二范式,即可避免異常的出現。( F )
- 第二范式需要確保數據庫表中的每一列都和主鍵相關,而不能只與主鍵的某一部分相關。( T )
- 范式的優點有:結構合理、冗余較小、盡量避免插入刪除修改異常、執行效率非常高。( F )
- 特定表的的設計可以違反第三范式,增加冗余提高性能。( T )
- 數據庫表之間的關系包括:一對一、一對多、多對多。( T )
四、 編碼題
- 某教學數據庫有三個表:
學生表S:SNO (學生編號),SNAME(學生姓名),SAGE(年齡),SSEX(性別),SDEPT(院系));
學習表SC:SNO(學生編號),CNO(課程編號),GRADE(年級));
課程關系C:CNO(課程編號),CNAME(課程名稱),CDEPT(院系);
1) 用SQL語句完成下列查詢(比較):
a) 查所有年齡在20歲以下的學生姓名及年齡:
| SELECT Sname,Sage FROM S WHERE Sage<20; |
b) 查考試成績有不及格的學生的學號:
| SELECT DISTINCT Sno FROM SC WHERE grade<60; |
2) 用SQL語句完成下列查詢(確定范圍):
查所年齡在20至23歲之間的學生姓名、系別及年齡:
| SELECT Sname,Sdept,Sage FROM S WHERE Sage BETWEEN 20 AND 23; |
3) 用SQL語句完成下列查詢(確定集合 ):
a) 查計算機系、數學系、信息系的學生姓名、性別:
| SELECT Sname,Ssex FROM S WHERE Sdept IN (’CS’,‘IS’,‘MATH’); |
b) 查既不是計算機系、數學系、又不是信息系的學生姓名、性別:
| SELECT Sname,Ssex FROM S WHERE Sdept NOT IN (’CS’, ‘IS’, ‘MATH’); |
4) 用SQL語句完成下列查詢(字符匹配):
a) 查所有姓“劉”的學生的姓名、學號和性別:
| SELECT Sname,Sno,Ssex FROM S WHERE Sname LIKE ‘劉%’; |
b) 查姓“上官”且全名為3個漢字的學生姓名:
| SELECT Sname FROM S WHERE Sname LIKE ‘上官_’; |
c) 查所有不姓“張”的學生的姓名:
| SELECT Sname,Sno,Ssex FROM S WHERE Sname NOT LIKE ‘張%’; |
d) 查DB_Design課程的課程號:
| SELECT Cno FROM CWHERE Cname LIKE ‘DB\_Design’ ESCAPE ‘\’; |
5) 用SQL語句完成下列查詢(涉及空值的查詢):
a) 查缺考的學生的學號和課程號:
| SELECT Sno,Cno FROM SC WHERE Grade IS NULL; |
b) 查年齡為空值的學生的學號和姓名:
| SELECT Sno,Sname FROM S WHERE Sage IS NULL; |
6) 用SQL語句完成下列查詢(多重條件查詢):
a) 查計算機系20歲以下的學生的學號和姓名:
| SELECT Sno,Sname FROM S WHERE Sdept=‘CS’ AND Sage<20; |
b) 查計算機系、數學系、信息系的學生姓名、性別:
| SELECT Sname,Ssex FROM S WHERE Sdept =’CS’ OR Sdept =‘IS’ OR Sdept =’MATH’; |
7) 用SQL語句完成下列查詢(對查詢結果排序):
a) 查詢選修了C3課程的學生的學號和成績,其結果按分數的降序排列:
| SELECT Sno,Grade FROM SC WHERE Cno=‘C3’ORDER BY Grade DESC; |
b) 查詢全體學生的情況,查詢結果按所在系升序排列,對同一系中的學生按年齡降序排列:
| SELECT * FROM S ORDER BY Sdep,Sage DESC; |
8) 用SQL語句完成下列查詢(聚合函數的使用):
a) 查詢學生總人數:
| SELECT COUNT(*) FROM S; |
b) 查詢選修了課程的學生人數:
| SELECT COUNT(DISTINCT Sno) FROM SC; |
c) 計算選修了C1課程的學生平均成績:
| SELECT AVG(Grade) FROM SC WHERE Cno=‘C1’; |
d) 查詢學習C3課程的學生最高分數:
| SELECT MAX(Grade) FROM SC WHERE Cno=‘C3’; |
9) 用SQL語句完成下列查詢(對查詢結果分組):
a) 查詢各個課程號與相應的選課人數:
| SELECT Cno,COUNT(Sno)FROM SC GROUP BY Cno; |
b) 查詢計算機系選修了3門以上課程的學生的學號:
| SELECT Sno FROM SC WHERE Sdept=‘CS’ GROUP BY Sno HAVING COUNT(*)>3; |
c) 求基本表S中男同學的每一年級組(超過50人)有多少人?要求查詢結果按人數升序排列,人數相同按年齡降序排列:
| SELECT Sage,COUNT(Sno)FROM S WHERE Ssex='M'GROUP BY Sage HAVING COUNT(*)> 50 ORDER BY 2,Sage DESC; |
10) 用SQL語句完成下列查詢(多表聯接查詢):
a) 查詢每個學生及其選修課程的情況:
| SELECT S.Sno,Sname,Sage,Ssex,Sdept,Cno,Grade FROM S, SC WHERE S.Sno=SC.Sno; |
b) 查詢選修了C2課程且成績在90分以上的所有學生:
| SELECT S.Sno,Sname FROM S,SC WHERE S.Sno=SC.Sno AND SC.Cno=‘C2’ AND SC.Grade > 90; |
c) 查詢每個學生選修的課程名及其成績:
| SELECT S.Sno,Sname,Cname,SC.Grade FROM S,SC,C WHERE S.Sno=SC.Sno AND SC.Cno=C.Cno; |
d) 統計每一年齡選修課程的學生人數:
| SELECT Sage,COUNT(DISTINCT S.Sno)FROM S,SC WHERE S.Sno=SC.Sno GROUP BY Sage; |
11) 用SQL語句完成下列查詢(多表嵌套查詢-帶有IN謂詞的子查詢):
a) 查詢選修了C2課程的學生姓名:
| SELECT Sname FROM S WHERE Sno IN ( SELECT Sno FROM SC WHERE Cno=‘C2’); |
b) 查詢與“張三”在同一個系學習的學生學號、姓名和系別:
| SELECT Sno,Sname,Sdept FROM S WHERE Sdept IN (SELECT Sdept FROM S WHERE Sname=‘張三’); |
c) 查詢選修課程名為“數據庫”的學生學號和姓名:
| SELECT Sno,Sname FROM S WHERE Sno IN (SELECT Sno FROM SC WHERE Cno IN(SELECT Cno FROM C WHERE Cname='DB')); |
- 2. (可選題)訂貨管理數據庫,有四個表:
倉庫表:倉庫號,面積,城市;
供應商表:供應商號,地址;
訂購單表:訂貨單號,供應商號,職工號,訂貨日期, 總金額;
職工表:職工號,倉庫號,工資;
用SQL語句完成下列操作:
1) 查詢訂貨管理數據庫中數據的倉庫號、城市、供應商名和地址信息:
方法一:使用簡單連接格式。
| SELECT 倉庫.倉庫號,城市,供應商名,地址 FROM 供應商,訂購單,職工,倉庫 WHERE 供應商.供應商號=訂購單.供應商號 AND訂購單.職工號=職工.職工號 AND 職工.倉庫號=倉庫.倉庫號; |
方法二:使用超連接的內部連接格式(注意連接條件的順序)。
| SELECT 倉庫.倉庫號,城市,供應商名,地址 FROM 供應商 JOIN 訂購單 ON 供應商.供應商號=訂購單.供應商號 JOIN 職工 ON 訂購單.職工號=職工.職工號 JOIN 倉庫 ON 職工.倉庫號=倉庫.倉庫號 ; |
2) 檢索在北京的供應商的名稱:
| SELECT 供應商名 FROM 供應商 WHERE 地址 LIKE ‘%北京%’; |
3) 檢索出向供應商S3發過訂購單的職工的職工號和倉庫號:
方法一(嵌套查詢):
| SELECT 職工號,倉庫號 FROM 職工 WHERE 職工號 IN (SELECT 職工號 FROM 訂購單 WHERE 供應商號='S3'); |
方法二(連接查詢):
| SELECT 職工.職工號,倉庫號 FROM 職工,訂購單 WHERE 職工.職工號=訂購單.職工號 AND 供應商號='S3'; |
4) 檢索出和職工E1、E3都有聯系的北京的供應商信息:
| SELECT * FROM 供應商 WHERE 地址 LIKE ‘%北京%’ AND 供應商號 IN (SELECT 供應商號 FROM 訂購單 WHERE 職工號=’E1’) AND 供應商號 IN (SELECT 供應商號 FROM 訂購單 WHERE 職工號=’E3’); |
5) 檢索出向S4供應商發出訂購單的倉庫所在的城市:
| SELECT 城市 FROM 倉庫,職工,訂購單 WHERE 倉庫.倉庫號=職工.倉庫號 AND 職工.職工號=訂購單.職工號 AND 供應商號=’S4’; |
6) 檢索出由工資多於1230元的職工向北京的供應商發出的訂購單號:
| SELECT 訂貨單號 FROM 職工,訂購單,供應商 WHERE 職工.職工號=訂購單.職工號AND 訂購單.供應商號=供應商.供應商號 AND 工資>1230 AND 地址 LIKE ‘%北京%’; |
7) 檢索出所有倉庫的平均面積:
| SELECT AVG(面積) AS 面積 FROM 倉庫; |
8) 檢索出每個倉庫中工資多於1220元的職工個數:
| SELECT 倉庫號,COUNT(*) 職工個數 FROM 職工 WHERE 工資>1220 GROUP BY 倉庫號; |
9) 檢索工資低於本倉庫平均工資的職工信息:
| SELECT * FROM 職工 AA WHERE 工資<(SELECT AVG(工資) FROM 職工 BB GROUP BY BB.倉庫號); |
10) 列出表訂購單中每個職工經手的具有最高總金額的訂購單信息:
| SELECT 職工號,供應商號,訂貨單號,總金額 FROM 訂購單 WHERE 總金額=(SELECT MAX(總金額) FROM 訂購單 GROUP BY 職工號); |
