-DBA數據庫管理員 JAVA程序員架構師必看


數據庫基礎(面試常見題)
一、數據庫基礎
1. 數據抽象:物理抽象、概念抽象、視圖級抽象,內模式、模式、外模式
2. SQL 語言包括數據定義、數據操縱(Data Manipulation),數據控制(Data Control)
數據定義:Create Table,Alter Table,Drop Table, Craete/Drop Index 等
數據操縱:Select ,insert,update,delete,
數據控制:grant,revoke
3. SQL 常用命令:
CREATE TABLE Student(
ID NUMBER PRIMARY KEY,
NAME VARCHAR2(50) NOT NULL);//建表
CREATE VIEW view_name AS
Select * FROM Table_name;//建視圖
Create UNIQUE INDEX index_name ON TableName(col_name);//建索引
INSERT INTO tablename {column1,column2,…} values(exp1,exp2,…);//插入
INSERT INTO Viewname {column1,column2,…} values(exp1,exp2,…);//插入視圖實際影響表
UPDATE tablename SET name=’zang 3’ condition;//更新數據
DELETE FROM Tablename WHERE condition;//刪除
GRANT (Select,delete,…) ON (對象) TO USER_NAME [WITH GRANT OPTION];//授權
REVOKE (權限表) ON(對象) FROM USER_NAME [WITH REVOKE OPTION] //撤權
列出工作人員及其領導的名字:
Select E.NAME, S.NAME FROM EMPLOYEE E S
WHERE E.SUPERName=S.Name
4. 視圖:
5. 完整性約束:實體完整性、參照完整性、用戶定義完整性
6. 第三範式:
1NF:每個屬性是不可分的。2NF:若關係R 是1NF,且每個非主屬性都完全函數依賴於R 的鍵。例SLC(SI
D#, CourceID#, SNAME,Grade),則不是2NF; 3NF:若R 是2NF,且它的任何非鍵屬性都不傳遞依賴於任
何候選鍵。
7. ER(實體/聯繫)模型
8. 索引作用
9. 事務:是一系列的數據庫操作,是數據庫應用的基本邏輯單位。事務性質:原子性、
λ 原子性。即不可分割性,事務要麼全部被執行,要麼就全部不被執行。
λ 一致性或可串性。事務的執行使得數據庫從一種正確狀態轉換成另一種正確狀態
λ 隔離性。在事務正確提交之前,不允許把該事務對數據的任何改變提供給任何其他事務,
λ 持久性。事務正確提交後,其結果將永久保存在數據庫中,即使在事務提交後有了其他故障,事務的處
理結果也會得到保存。
10. 鎖:共享鎖、互斥鎖
兩段鎖協議:階段1:加鎖階段階段2:解鎖階段
11. 死鎖及處理:事務循環等待數據鎖,則會死鎖。
死鎖處理:預防死鎖協議,死鎖恢復機制
12. 存儲過程:存儲過程就是編譯好了的一些sql 語句。
1.存儲過程因爲SQL 語句已經預編繹過了,因此運行的速度比較快。
2. 可保證數據的安全性和完整性。通過存儲過程可以使沒有權限的用戶在控制之下間接地存取數據庫,從
而保證數據的安全。通過存儲過程可以使相關的動作在一起發生,從而可以維護數據庫的完整性。
3.可以降低網絡的通信量。存儲過程主要是在服務器上運行,減少對客戶機的壓力。
4:存儲過程可以接受參數、輸出參數、返回單個或多個結果集以及返回值。可以向程序返回錯誤原因
5:存儲過程可以包含程序流、邏輯以及對數據庫的查詢。同時可以實體封裝和隱藏了數據邏輯。
13. 觸發器: 當滿足觸發器條件,則系統自動執行觸發器的觸發體。
觸發時間:有before,after.觸發事件:有insert,update,delete 三種。觸發類型:有行觸發、語句觸發
14.內聯接,外聯接區別?
內連接是保證兩個表中所有的行都要滿足連接條件,而外連接則不然。
在外連接中,某些不滿條件的列也會顯示出來,也就是說,只限制其中一個表的行,而不限制另一個表的
行。分左連接、右連接、全連接三種
SQL試題 2
一、
教師號星期號是否有課
1 2 有
1 3 有
2 1 有
3 2 有`
1 2 有
寫一條sql 語句讓你變爲這樣的表
教師號星期一星期二星期三
1 2 1
2 1
3 1
各星期下的數字表示:對應的教師在星期幾已經排的課數
二、
書表(books)
book_id,book_name,creatdate,Lastmodifydate,decription
001,三個人的世界,2005-02-02,2005-07-07,NULL
作者表(authors)
A_id,A_name
01,王紛
02,李尚
03,泰和
部門表(depts)
d_id,d_name
001,編輯一部
002,編輯二部
003,編輯三部
書和作者關聯表(bookmap)
book_id,A_id
001,01
001,02
001,03
部門和作者關聯表(depmap)
d_id,a_id
001,01
002,02
003,03
找出每個部門的所寫的總書兩,比如,一本書有3 個人寫,如果三個人在不同的部門,則每個部門的總數量就是
1.最後結果如下:
部門,書量
編輯一部,1
編輯二部,1
編輯三部,1
三、
兩個表情況
表名:wu_plan
ID plan model corp_code plannum prixis
1 00001 exx22 nokia 2000 0
2 00002 lc001 sony 3000 0
表名:wu_bom
ID plan pact amount
1 00001 aa1 300
2 00001 aa2 200
3 00002 bb1 500
4 00002 bb2 800
5 00002 bb3 400
查詢這兩個表中plan 唯一,每一個plan 中,amount 最少的,plannum 大於prixis 的記錄
結果是:
ID plan model corp_code plannum prixis pact amount
1 00001 exx22 nokia 2000 0 a2 200
2 00002 lc001 sony 3000 0 bb3 400
四、
表1 結構如下:
部門條碼品名銷售額銷售數量銷售日期
表2 結構如下
課別部門
要求:先按部門排序,再按銷售額、銷售數量排序檢索出某個課別每個部門一個時期內的商品銷售額的前
三名,如查詢01 課別2007 年4 月15 日到2007 年4 月22 日每個部門一個周內的商品銷售額合計的前三

SQL 面試題目彙總
1.觸發器的作用?
答:觸發器是一中特殊的存儲過程,主要是通過事件來觸發而被執行的。它可以強化約束,來維護數據的
完整性和一致性,可以跟蹤數據庫內的操作從而不允許未經許可的更新和變化。可以聯級運算。如,某表
上的觸發器上包含對另一個表的數據操作,而該操作又會導致該表觸發器被觸發。
2。什麼是存儲過程?用什麼來調用?
答:存儲過程是一個預編譯的SQL 語句,優點是允許模塊化的設計,就是說只需創建一次,以後在該程序
中就可以調用多次。如果某次操作需要執行多次SQL,使用存儲過程比單純SQL 語句執行要快。可以用
一個命令對象來調用存儲過程。
3。索引的作用?和它的優點缺點是什麼?
答:索引就一種特殊的查詢表,數據庫的搜索引擎可以利用它加速對數據的檢索。它很類似與現實生活中
書的目錄,不需要查詢整本書內容就可以找到想要的數據。索引可以是唯一的,創建索引允許指定單個列
或者是多個列。缺點是它減慢了數據錄入的速度,同時也增加了數據庫的尺寸大小。
3。什麼是內存泄漏?
答:一般我們所說的內存泄漏指的是堆內存的泄漏。堆內存是程序從堆中爲其分配的,大小任意的,使用
完後要顯示釋放內存。當應用程序用關鍵字new 等創建對象時,就從堆中爲它分配一塊內存,使用完後程
序調用free 或者delete 釋放該內存,否則就說該內存就不能被使用,我們就說該內存被泄漏了。
4。維護數據庫的完整性和一致性,你喜歡用觸發器還是自寫業務邏輯?爲什麼?
答:我是這樣做的,儘可能使用約束,如check,主鍵,外鍵,非空字段等來約束,這樣做效率最高,也最
方便。其次是使用觸發器,這種方法可以保證,無論什麼業務系統訪問數據庫都可以保證數據的完整新和
一致性。最後考慮的是自寫業務邏輯,但這樣做麻煩,編程複雜,效率低下。
5。什麼是事務?什麼是鎖?
答:事務就是被綁定在一起作爲一個邏輯工作單元的SQL 語句分組,如果任何一個語句操作失敗那麼整
個操作就被失敗,以後操作就會回滾到操作前狀態,或者是上有個節點。爲了確保要麼執行,要麼不執行,
就可以使用事務。要將有組語句作爲事務考慮,就需要通過ACID 測試,即原子性,一致性,隔離性和持
久性。
鎖:在所以的DBMS 中,鎖是實現事務的關鍵,鎖可以保證事務的完整性和併發性。與現實生活中鎖一
樣,它可以使某些數據的擁有者,在某段時間內不能使用某些數據或數據結構。當然鎖還分級別的。
6。什麼叫視圖?遊標是什麼?
答:視圖是一種虛擬的表,具有和物理表相同的功能。可以對視圖進行增,改,查,操作,試圖通常是有
一個表或者多個表的行或列的子集。對視圖的修改不影響基本表。它使得我們獲取數據更容易,相比多表
查詢。
遊標:是對查詢出來的結果集作爲一個單元來有效的處理。遊標可以定在該單元中的特定行,從結果集
的當前行檢索一行或多行。可以對結果集當前行做修改。一般不使用遊標,但是需要逐條處理數據的時候,
遊標顯得十分重要。
7。爲管理業務培訓信息,建立3 個表:
S(S#,SN,SD,SA)S#,SN,SD,SA 分別代表學號,學員姓名,所屬單位,學員年齡
C(C#,CN)C#,CN 分別代表課程編號,課程名稱
SC(S#,C#,G) S#,C#,G 分別代表學號,所選的課程編號,學習成績
(1)使用標準SQL 嵌套語句查詢選修課程名稱爲’稅收基礎’的學員學號和姓名?
答案:select s# ,sn from s where S# in(select S# from c,sc where c.c#=sc.c# and cn=’稅收基礎’)
(2) 使用標準SQL 嵌套語句查詢選修課程編號爲’C2’的學員姓名和所屬單位?
答:select sn,sd from s,sc where s.s#=sc.s# and sc.c#=’c2’
(3) 使用標準SQL 嵌套語句查詢不選修課程編號爲’C5’的學員姓名和所屬單位?
答:select sn,sd from s where s# not in(select s# from sc where c#=’c5’)
(4)查詢選修了課程的學員人數
答:select 學員人數=count(distinct s#) from sc
(5) 查詢選修課程超過5 門的學員學號和所屬單位?
答:select sn,sd from s where s# in(select s# from sc group by s# having count(distinct c#)>5)
目前在職場中很難找到非常合格的數據庫開發人員。有人說:“SQL 開發是一門語言,它很容易學,但是很
難掌握。”
華爲http://sqlserver.365dev.net/sql-1981.html
在面試過程中多次碰到兩道SQL 查詢的題目,一是查詢A(ID,Name)表中第31 至40 條記錄,ID 作爲主鍵
可能是不是連續增長的列,完整的查詢語句如下:
select top 10 * from A where ID >(select max(ID) from (select top 30 ID from A order by A ) T) order by A
另外一道題目的要求是查詢表A 中存在ID 重複三次以上的記錄,完整的查詢語句如下:
select * from(select count(ID) as count from table group by ID)T where T.count>3
以上兩道題目非常有代表意義,望各位把自己碰到的有代表的查詢都貼上來。
create table testtable1
(
id int IDENTITY,
department varchar(12)
)
select * from testtable1
insert into testtable1 values('設計')
insert into testtable1 values('市場')
insert into testtable1 values('售後')
/*
結果
id department
1 設計
2 市場
3 售後
*/
create table testtable2
(
id int IDENTITY,
dptID int,
name varchar(12)
)
insert into testtable2 values(1,'張三')
insert into testtable2 values(1,'李四')
insert into testtable2 values(2,'王五')
insert into testtable2 values(3,'彭六')
insert into testtable2 values(4,'陳七')
/*
用一條SQL 語句,怎麼顯示如下結果
id dptID department name
1 1 設計張三
2 1 設計李四
3 2 市場王五
4 3 售後彭六
5 4 黑人陳七
*/
答案是:
SELECT testtable2.* , ISNULL(department,'黑人')
FROM testtable1 right join testtable2 on testtable2.dptID = testtable1.ID
在面試應聘的SQL Server 數據庫開發人員時,我運用了一套標準的基準技術問題。下面這些問題是我覺
得能夠真正有助於淘汰不合格應聘者的問題。它們按照從易到難的順序排列。當你問到關於主鍵和外鍵的
問題時,後面的問題都十分有難度,因爲答案可能會更難解釋和說明,尤其是在面試的情形下。
你能向我簡要敘述一下 SQL Server 2000中使用的一些數據庫對象嗎?
你希望聽到的答案包括這樣一些對象:表格、視圖、用戶定義的函數,以及存儲過程;如果他們還能夠提到像
觸發器這樣的對象就更好了。如果應聘者不能回答這個基本的問題,那麼這不是一個好兆頭。
NULL是什麼意思?
NULL(空)這個值是數據庫世界裏一個非常難纏的東西,所以有不少應聘者會在這個問題上跌跟頭您也不要
覺得意外。
NULL 這個值表示UNKNOWN(未知):它不表示“”(空字符串)。假設您的SQL Server 數據庫裏有
ANSI_NULLS,當然在默認情況下會有,對NULL 這個值的任何比較都會生產一個NULL 值。您不能把任
何值與一個UNKNOWN 值進行比較,並在邏輯上希望獲得一個答案。您必須使用IS NULL 操作符。
什麼是索引?SQL Server 2000裏有什麼類型的索引?
任何有經驗的數據庫開發人員都應該能夠很輕易地回答這個問題。一些經驗不太多的開發人員能夠回答這
個問題,但是有些地方會說不清楚。
簡單地說,索引是一個數據結構,用來快速訪問數據庫表格或者視圖裏的數據。在SQL Server 裏,它們
有兩種形式:聚集索引和非聚集索引。聚集索引在索引的葉級保存數據。這意味着不論聚集索引裏有表格的
哪個(或哪些)字段,這些字段都會按順序被保存在表格。由於存在這種排序,所以每個表格只會有一個聚
集索引。非聚集索引在索引的葉級有一個行標識符。這個行標識符是一個指向磁盤上數據的指針。它允許
每個表格有多個非聚集索引。
什麼是主鍵?什麼是外鍵?
主鍵是表格裏的(一個或多個)字段,只用來定義表格裏的行;主鍵裏的值總是唯一的。外鍵是一個用來建立
兩個表格之間關係的約束。這種關係一般都涉及一個表格裏的主鍵字段與另外一個表格(儘管可能是同一個
表格)裏的一系列相連的字段。那麼這些相連的字段就是外鍵。
什麼是觸發器?SQL Server 2000有什麼不同類型的觸發器?
讓未來的數據庫開發人員知道可用的觸發器類型以及如何實現它們是非常有益的。
觸發器是一種專用類型的存儲過程,它被捆綁到SQL Server 2000 的表格或者視圖上。在SQL Server 2000
裏,有INSTEAD-OF 和AFTER 兩種觸發器。INSTEAD-OF 觸發器是替代數據操控語言(Data Manipulation
Language,DML)語句對錶格執行語句的存儲過程。例如,如果我有一個用於TableA 的
INSTEAD-OF-UPDATE 觸發器,同時對這個表格執行一個更新語句,那麼INSTEAD-OF-UPDATE 觸發器
裏的代碼會執行,而不是我執行的更新語句則不會執行操作。
AFTER 觸發器要在DML 語句在數據庫裏使用之後才執行。這些類型的觸發器對於監視發生在數據庫表格
裏的數據變化十分好用。
您如何確一個帶有名爲 Fld1字段的 TableB表格裏只具有 Fld1 字段裏的那些值,而這些值同時在名爲
TableA的表格的 Fld1 字段裏?
這個與關係相關的問題有兩個可能的答案。第一個答案(而且是您希望聽到的答案)是使用外鍵限制。外鍵
限制用來維護引用的完整性。它被用來確保表格裏的字段只保存有已經在不同的(或者相同的)表格裏的另
一個字段裏定義了的值。這個字段就是候選鍵(通常是另外一個表格的主鍵)。
另外一種答案是觸發器。觸發器可以被用來保證以另外一種方式實現與限制相同的作用,但是它非常難設
置與維護,而且性能一般都很糟糕。由於這個原因,微軟建議開發人員使用外鍵限制而不是觸發器來維護
引用的完整性。
對一個投入使用的在線事務處理表格有過多索引需要有什麼樣的性能考慮?
你正在尋找進行與數據操控有關的應聘人員。對一個表格的索引越多,數據庫引擎用來更新、插入或者刪
除數據所需要的時間就越多,因爲在數據操控發生的時候索引也必須要維護。
你可以用什麼來確保表格裏的字段只接受特定範圍裏的值?
這個問題可以用多種方式來回答,但是隻有一個答案是“好”答案。您希望聽到的回答是Check 限制,它在
數據庫表格裏被定義,用來限制輸入該列的值。
觸發器也可以被用來限制數據庫表格裏的字段能夠接受的值,但是這種辦法要求觸發器在表格裏被定義,
這可能會在某些情況下影響到性能。因此,微軟建議使用Check 限制而不是其他的方式來限制域的完整性。
如果應聘者能夠正確地回答這個問題,那麼他的機會就非常大了,因爲這表明他們具有使用存儲過程的經
驗。
返回參數總是由存儲過程返回,它用來表示存儲過程是成功還是失敗。返回參數總是INT 數據類型。
OUTPUT 參數明確要求由開發人員來指定,它可以返回其他類型的數據,例如字符型和數值型的值。(可
以用作輸出參數的數據類型是有一些限制的。)您可以在一個存儲過程裏使用多個OUTPUT 參數,而您只
能夠使用一個返回參數。
什麼是相關子查詢?如何使用這些查詢?
經驗更加豐富的開發人員將能夠準確地描述這種類型的查詢。
相關子查詢是一種包含子查詢的特殊類型的查詢。查詢裏包含的子查詢會真正請求外部查詢的值,從而形
成一個類似於循環的狀況。
數據庫面試
一:SQL tuning 類
1. 列舉幾種表連接方式
Answer:等連接(內連接)、非等連接、自連接、外連接(左、右、全)
Or hash join/merge join/nest loop(cluster join)/index join ??
ORACLE 8i,9i 表連接方法。
一般的相等連接: select * from a, b where a.id = b.id; 這個就屬於內連接。
對於外連接:
Oracle 中可以使用“(+) ”來表示,9i 可以使用LEFT/RIGHT/FULL OUTER JOIN
LEFT OUTER JOIN:左外關聯
SELECT e.last_name, e.department_id, d.department_name
FROM employees e
LEFT OUTER JOIN departments d
ON (e.department_id = d.department_id);
等價於
SELECT e.last_name, e.department_id, d.department_name
FROM employees e, departments d
WHERE e.department_id=d.department_id(+)
結果爲:所有員工及對應部門的記錄,包括沒有對應部門編號department_id 的員工記錄。
RIGHT OUTER JOIN:右外關聯
SELECT e.last_name, e.department_id, d.department_name
FROM employees e
RIGHT OUTER JOIN departments d
ON (e.department_id = d.department_id);
等價於
SELECT e.last_name, e.department_id, d.department_name
FROM employees e, departments d
WHERE e.department_id(+)=d.department_id
結果爲:所有員工及對應部門的記錄,包括沒有任何員工的部門記錄。
FULL OUTER JOIN:全外關聯
SELECT e.last_name, e.department_id, d.department_name
FROM employees e
FULL OUTER JOIN departments d
ON (e.department_id = d.department_id);
結果爲:所有員工及對應部門的記錄,包括沒有對應部門編號department_id 的員工記錄和沒有任何員工
的部門記錄。
ORACLE8i 是不直接支持完全外連接的語法,也就是說不能在左右兩個表上同時加上(+),下面是在ORA
CLE8i 可以參考的完全外連接語法
select t1.id,t2.id from table1 t1,table t2 where t1.id=t2.id(+)
union
select t1.id,t2.id from table1 t1,table t2 where t1.id(+)=t2.id
連接類型
定義
圖示
例子
內連接
只連接匹配的行
select A.c1,B.c2 from A join B on A.c3 = B.c3;
左外連接
包含左邊表的全部行(不管右邊的表中是否存在與它們匹配的行)以及右邊表中全部匹配的行
select A.c1,B.c2 from A left join B on A.c3 = B.c3;
右外連接
包含右邊表的全部行(不管左邊的表中是否存在與它們匹配的行)以及左邊表中全部匹配的行
select A.c1,B.c2 from A right join B on A.c3 = B.c3;
全外連接
包含左、右兩個表的全部行,不管在另一邊的表中是否存在與它們匹配的行
select A.c1,B.c2 from A full join B on A.c3 = B.c3;
(theta)連接
使用等值以外的條件來匹配左、右兩個表中的行
select A.c1,B.c2 from A join B on A.c3 != B.c3;
交叉連接
生成笛卡爾積——它不使用任何匹配或者選取條件,而是直接將一個數據源中的每個行與另一個數據源的
每個行一一匹配
select A.c1,B.c2 from A,B;
2. 不借助第三方工具,怎樣查看sql 的執行計劃
I) 使用Explain Plan,查詢PLAN_TABLE;
EXPLAIN PLAN
SET STATEMENT_ID='QUERY1'
FOR
SELECT *
FROM a
WHERE aa=1;
SELECT operation, options, object_name, object_type, ID, parent_id
FROM plan_table
WHERE STATEMENT_ID = 'QUERY1'
ORDER BY ID;
II)SQLPLUS 中的SET TRACE 即可看到Execution Plan Statistics
SET AUTOTRACE ON;
3. 如何使用CBO,CBO 與RULE 的區別
IF 初始化參數OPTIMIZER_MODE = CHOOSE THEN --(8I DEFAULT)
IF 做過表分析
THEN 優化器Optimizer=CBO(COST); /*高效*/
ELSE
優化器Optimizer=RBO(RULE); /*高效*/
END IF;
END IF;
區別:
RBO 根據規則選擇最佳執行路徑來運行查詢。
CBO 根據表統計找到最低成本的訪問數據的方法確定執行計劃。
使用CBO 需要注意:
I) 需要經常對錶進行ANALYZE 命令進行分析統計;
II) 需要穩定執行計劃;
III)需要使用提示(Hint);
使用RULE 需要注意:
I) 選擇最有效率的表名順序
II) 優化SQL 的寫法;
在optimizer_mode=choose 時,如果表有統計信息(分區表外),優化器將選擇CBO,否則選RBO。
RBO 遵循簡單的分級方法學,使用15 種級別要點,當接收到查詢,優化器將評估使用到的要點數目,然後選
擇最佳級別(最少的數量)的執行路徑來運行查詢。
CBO 嘗試找到最低成本的訪問數據的方法,爲了最大的吞吐量或最快的初始響應時間,計算使用不同的執行
計劃的成本,並選擇成本最低的一個,關於表的數據內容的統計被用於確定執行計劃。
4. 如何定位重要(消耗資源多)的SQL
使用CPU 多的用戶session
SELECT a.SID, spid, status, SUBSTR (a.program, 1, 40) prog, a.terminal,a.SQL_TEXT, osuser, V
ALUE / 60 / 100 VALUE
FROM v$session a, v$process b, v$sesstat c
WHERE c.statistic# = 12 AND c.SID = a.SID AND a.paddr = b.addr
ORDER BY VALUE DESC;
select sql_text from v$sql
where disk_reads > 1000 or (executions > 0 and buffer_gets/executions > 30000);
5. 如何跟蹤某個session 的SQL
利用TRACE 跟蹤
ALTER SESSION SET SQLTRACE ON;
COLUMN SQL format a200;
SELECT machine, sql_text SQL
FROM v$sqltext a, v$session b
WHERE address = sql_address
AND machine = '&A'
ORDER BY hash_value, piece;
exec dbms_system.set_sql_trace_in_session(sid,serial#,&sql_trace);
select sid,serial# from v$session where sid = (select sid from v$mystat where rownum = 1);
exec dbms_system.set_ev(&sid,&serial#,&event_10046,&level_12,'');
6. SQL 調整最關注的是什麼
檢查系統的I/O 問題
sar-d 能檢查整個系統的iostat(IO statistics)
查看該SQL 的response time(db block gets/consistent gets/physical reads/sorts (disk))
7. 說說你對索引的認識(索引的結構、對dml 影響、對查詢影響、爲什麼提高查詢性能)
索引有B-TREE、BIT、CLUSTER 等類型。ORACLE 使用了一個複雜的自平衡B-tree 結構;通常來說,在
表上建立恰當的索引,查詢時會改進查詢性能。但在進行插入、刪除、修改時,同時會進行索引的修改,
在性能上有一定的影響。有索引且查詢條件能使用索引時,數據庫會先度取索引,根據索引內容和查詢條
件,查詢出ROWID,再根據ROWID 取出需要的數據。由於索引內容通常比全表內容要少很多,因此通過
先讀索引,能減少I/O,提高查詢性能。
b-tree index/bitmap index/function index/patitional index(local/global)索引通常能提高select/update/del
ete 的性能,會降低insert 的速度,
8. 使用索引查詢一定能提高查詢的性能嗎?爲什麼
通常,通過索引查詢數據比全表掃描要快.但是我們也必須注意到它的代價.
索引需要空間來存儲,也需要定期維護, 每當有記錄在表中增減或索引列被修改時,索引本身也會被修改. 這
意味着每條記錄的INSERT,DELETE,UPDATE 將爲此多付出4,5 次的磁盤I/O. 因爲索引需要額外的存儲
空間和處理,那些不必要的索引反而會使查詢反應時間變慢.使用索引查詢不一定能提高查詢性能,索引範圍
查詢(INDEX RANGE SCAN)適用於兩種情況:
基於一個範圍的檢索,一般查詢返回結果集小於表中記錄數的30%宜採用;
基於非唯一性索引的檢索
索引就是爲了提高查詢性能而存在的,如果在查詢中索引沒有提高性能,只能說是用錯了索引,或者講是場合
不同
9. 綁定變量是什麼?綁定變量有什麼優缺點?
綁定變量是指在SQL 語句中使用變量,改變變量的值來改變SQL 語句的執行結果。
優點:使用綁定變量,可以減少SQL 語句的解析,能減少數據庫引擎消耗在SQL 語句解析上的資源。提
高了編程效率和可靠性。減少訪問數據庫的次數, 就能實際上減少ORACLE 的工作量。
缺點:經常需要使用動態SQL 的寫法,由於參數的不同,可能SQL 的執行效率不同;
綁定變量是相對文本變量來講的,所謂文本變量是指在SQL 直接書寫查詢條件,
這樣的SQL 在不同條件下需要反覆解析,綁定變量是指使用變量來代替直接書寫條件,查詢bind value 在
運行時傳遞,然後綁定執行。
優點是減少硬解析,降低CPU 的爭用,節省shared_pool
缺點是不能使用histogram,sql 優化比較困難
10. 如何穩定(固定)執行計劃
可以在SQL 語句中指定執行計劃。使用HINTS;
query_rewrite_enabled = true
star_transformation_enabled = true
optimizer_features_enable = 9.2.0
創建並使用stored outline
11. 和排序相關的內存在8i 和9i 分別怎樣調整,臨時表空間的作用是什麼
SORT_AREA_SIZE 在進行排序操作時,如果排序的內容太多,內存裏不能全部放下,則需要進行外部排
序,
此時需要利用臨時表空間來存放排序的中間結果。
8i 中sort_area_size/sort_area_retained_size 決定了排序所需要的內存, 如果排序操作不能在sort_area
_size 中完成,就會用到temp 表空間
9i 中如果workarea_size_policy=auto 時,
排序在pga 內進行,通常pga_aggregate_target 的1/20 可以用來進行disk sort;
如果workarea_size_policy=manual 時,排序需要的內存由sort_area_size 決定, 在執行order by/group
by/distinct/union/create index/index rebuild/minus 等操作時,如果在pga 或sort_area_size 中不能完成,排
序將在臨時表空間進行(disk sort),臨時表空間主要作用就是完成系統中的disk sort.
12. 存在表T(a,b,c,d),要根據字段c 排序後取第21—30 條記錄顯示,請給出sql
SELECT *
FROM (SELECT ROWNUM AS row_num, tmp_tab.*
FROM (SELECT a, b, c, d
FROM T
ORDER BY c) tmp_tab
WHERE ROWNUM <= 30)
WHERE row_num >= 20
ORDER BY row_num;
create table t(a number(,b number(,c number(,d number();
/
begin
for i in 1 .. 300 loop
insert into t values(mod(i,2),i/2,dbms_random.value(1,300),i/4);
end loop;
end;
/
select * from (select c.*,rownum as rn from (select * from t order by c desc) c) where rn betwee
n 21 and 30;
/
select * from (select * from test order by c desc) x where rownum &lt; 30
minus
select * from (select * from test order by c desc) y where rownum &lt; 20 order by 3 desc
相比之minus 性能較差
二:數據庫基本概念類
1 Pctused and pctfree 表示什麼含義有什麼作用
pctused 與pctfree 控制數據塊是否出現在freelist 中, pctfree 控制數據塊中保留用於update 的空間,當數
據塊中的free space 小於pctfree 設置的空間時,該數據塊從freelist 中去掉,當塊由於dml 操作free space
大於pct_used 設置的空間時,該數據庫塊將被添加在freelist 鏈表中。
2 簡單描述tablespace / segment / extent / block 之間的關係
tablespace: 一個數據庫劃分爲一個或多個邏輯單位,該邏輯單位成爲表空間;每一個表空間可能包含一個
或多個Segment;
Segments: Segment 指在tablespace 中爲特定邏輯存儲結構分配的空間。每一個段是由一個或多個exte
nt 組成。包括數據段、索引段、回滾段和臨時段。
Extents: 一個extent 由一系列連續的Oracle blocks 組成.ORACLE 爲通過extent 來給segment 分配空
間。
Data Blocks:Oracle 數據庫最小的I/O 存儲單位,一個data block 對應一個或多個分配給data file 的操
作系統塊。
table 創建時,默認創建了一個data segment,每個data segment 含有min extents 指定的extents 數,每個
extent 據據表空間的存儲參數分配一定數量的blocks
3 描述tablespace 和datafile 之間的關係
一個表空間可包含一個或多個數據文件。表空間利用增加或擴展數據文件擴大表空間,表空間的大小爲組
成該表空間的數據文件大小的和。一個datafile 只能屬於一個表空間;
一個tablespace 可以有一個或多個datafile,每個datafile 只能在一個tablespace 內, table 中的數據,通過h
ash 算法分佈在tablespace 中的各個datafile 中,tablespace 是邏輯上的概念,datafile 則在物理上儲存了數
據庫的種種對象。
4 本地管理表空間和字典管理表空間的特點,ASSM 有什麼特點
本地管理表空間:(9i 默認)空閒塊列表存儲在表空間的數據文件頭。
特點:減少數據字典表的競爭,當分配和收縮空間時會產生回滾,不需要合併。
字典管理表空間:(8i 默認)空閒塊列表存儲在數據庫中的字典表裏.
特點:片由數據字典管理,可能造成字典表的爭用。存儲在表空間的每一個段都會有不同的存儲字句,需
要合併相鄰的塊;
本地管理表空間(Locally Managed Tablespace 簡稱LMT)
8i 以後出現的一種新的表空間的管理模式,通過位圖來管理表空間的空間使用。字典管理表空間(Diction
ary-Managed Tablespace 簡稱DMT)
8i 以前包括以後都還可以使用的一種表空間管理模式,通過數據字典管理表空間的空間使用。動段空間管
理(ASSM),它首次出現在Oracle920 裏有了ASSM,鏈接列表freelist 被位圖所取代,它是一個二進制
的數組,
能夠迅速有效地管理存儲擴展和剩餘區塊(free block),因此能夠改善分段存儲本質,ASSM 表空間上創
建的段還有另外一個稱呼叫Bitmap Managed Segments(BMB 段)。
5 回滾段的作用是什麼
回滾段用於保存數據修改前的映象,這些信息用於生成讀一致性數據庫信息、在數據庫恢復和Rollback 時
使用。一個事務只能使用一個回滾段。
事務回滾:當事務修改表中數據的時候,該數據修改前的值(即前影像)會存放在回滾段中,當用戶回滾
事務(ROLLBACK)時,ORACLE 將會利用回滾段中的數據前影像來將修改的數據恢復到原來的值。
事務恢復:當事務正在處理的時候,例程失敗,回滾段的信息保存在undo 表空間中,ORACLE 將在下次
打開數據庫時利用回滾來恢復未提交的數據。
讀一致性:當一個會話正在修改數據時,其他的會話將看不到該會話未提交的修改。當一個語句正在執行
時,該語句將看不到從該語句開始執行後的未提交的修改(語句級讀一致性)
當ORACLE 執行SELECT 語句時,ORACLE 依照當前的系統改變號(SYSTEM CHANGE NUMBER-S
CN) 來保證任何前於當前SCN 的未提交的改變不被該語句處理。可以想象:當一個長時間的查詢正在執
行時, 若其他會話改變了該查詢要查詢的某個數據塊,ORACLE 將利用回滾段的數據前影像來構造一個
讀一致性視圖
6 日誌的作用是什麼
日誌文件(Log File)記錄所有對數據庫數據的修改,主要是保護數據庫以防止故障,以及恢復數據時使用。
其特點如下:
a)每一個數據庫至少包含兩個日誌文件組。每個日誌文件組至少包含兩個日誌文件成員。
b)日誌文件組以循環方式進行寫操作。
c)每一個日誌文件成員對應一個物理文件。
記錄數據庫事務,最大限度地保證數據的一致性與安全性
重做日誌文件:含對數據庫所做的更改記錄,這樣萬一出現故障可以啓用數據恢復,一個數據庫至少需要兩
個重做日誌文件
歸檔日誌文件:是重做日誌文件的脫機副本,這些副本可能對於從介質失敗中進行恢復很必要。
7 SGA 主要有那些部分,主要作用是什麼
系統全局區(SGA):是ORACLE 爲實例分配的一組共享緩衝存儲區,用於存放數據庫數據和控制信息,
以實現對數據庫數據的管理和操作。
SGA 主要包括:
a)共享池(shared pool) :用來存儲最近執行的SQL 語句和最近使用的數據字典的數據。
b)數據緩衝區(database buffer cache):用來存儲最近從數據文件中讀寫過的數據。
c)重作日誌緩衝區(redo log buffer):用來記錄服務或後臺進程對數據庫的操作。
另外在SGA 中還有兩個可選的內存結構:
d)java pool: 用來存儲Java 代碼。
e)Large pool: 用來存儲不與SQL 直接相關的大型內存結構。備份、恢復使用。
GA:db_cache/shared_pool/large_pool/java_pool
db_cache: 數據庫緩存(Block Buffer)對於Oracle 數據庫的運轉和性能起着非常關鍵的作用,它佔據O
racle 數據庫SGA(系統共享內存區)的主要部分。Oracle 數據庫通過使用LRU 算法,將最近訪問的數據
塊存放到緩存中,從而優化對磁盤數據的訪問.
shared_pool: 共享池的大小對於Oracle 性能來說都是很重要的。共享池中保存數據字典高速緩衝和完全
解析或編譯的的PL/SQL 塊和SQL 語句及控制結構
large_pool: 使用MTS 配置時,因爲要在SGA 中分配UGA 來保持用戶的會話,就是用Large_pool 來保
持這個會話內存使用RMAN 做備份的時候,要使用Large_pool 這個內存結構來做磁盤I/O 緩存器
java_pool: 爲java procedure 預備的內存區域,如果沒有使用java proc,java_pool 不是必須的
8 Oracle 系統進程主要有哪些,作用是什麼
數據寫進程(DBWR):負責將更改的數據從數據庫緩衝區高速緩存寫入數據文件
日誌寫進程(LGWR):將重做日誌緩衝區中的更改寫入在線重做日誌文件
系統監控(SMON): 檢查數據庫的一致性如有必要還會在數據庫打開時啓動數據庫的恢復
進程監控(PMON): 負責在一個Oracle 進程失敗時清理資源
檢查點進程(CKPT):負責在每當緩衝區高速緩存中的更改永久地記錄在數據庫中時,更新控制文件和數據文
件中的數據庫狀態信息。
歸檔進程(ARCH):在每次日誌切換時把已滿的日誌組進行備份或歸檔
恢復進程(RECO): 保證分佈式事務的一致性,在分佈式事務中,要麼同時commit,要麼同時rollback;
作業調度器(CJQ ): 負責將調度與執行系統中已定義好的job,完成一些預定義的工作.
三:備份恢復類
1 備份如何分類
邏輯備份:exp/imp 指定表的邏輯備份
物理備份:
熱備份:alter tablespace begin/end backup;
冷備份:脫機備份(database shutdown)
RMAN 備份
full backup/incremental backup(累積/差異)
物理備份
物理備份是最主要的備份方式。用於保證數據庫在最小的數據庫丟失或沒有數據丟失的情況下得到恢復。
冷物理
冷物理備份提供了最簡單和最直接的方法保護數據庫因物理損壞丟失。建議在以下幾種情況中使用。
對一個已經存在大最數據量的數據庫,在晚間數據庫可以關閉,此時應用冷物理備份。
對需對數據庫服務器進行升級,(如更換硬盤),此時需要備份數據庫信息,並在新的硬盤中恢復這些數
據信息,建議採用冷物理備份。
熱物理
主要是指備份過程在數據庫打開並且用戶可以使用的情況下進行。需要執行熱物理備份的情況有:
由於數據庫性質要求不間斷工作,因而此時只能採用熱物理備份。
由於備份的要求的時間過長,而數據庫只能短時間關閉時。
邏輯備份(EXP/IMP)
邏輯備份用於實現數據庫對象的恢復。但不是基於時間點可完全恢復的備份策略。只能作爲聯機備份和脫
機備份的一種補充。
完全邏輯備份
完全邏輯備份是將整個數據庫導出到一個數據庫的格式文件中,該文件可以在不同的數據庫版本、操作系
統和硬件平臺之間進行移植。
指定表的邏輯備份
通過備份工具,可以將指定的數據庫表備份出來,這可以避免完全邏輯備份所帶來的時間和財力上的浪費。
2 歸檔是什麼含義
關於歸檔日誌:Oracle 要將填滿的在線日誌文件組歸檔時,則要建立歸檔日誌(archived redo log)。其對
數據庫備份和恢復有下列用處:
數據庫後備以及在線和歸檔日誌文件,在操作系統和磁盤故障中可保證全部提交的事物可被恢復。
在數據庫打開和正常系統使用下,如果歸檔日誌是永久保存,在線後備可以進行和使用。
數據庫可運行在兩種不同方式下:NOARCHIVELOG 方式或ARCHIVELOG 方式
數據庫在NOARCHIVELOG 方式下使用時,不能進行在線日誌的歸檔,
數據庫在ARCHIVELOG 方式下運行,可實施在線日誌的歸檔
歸檔是歸檔當前的聯機redo 日誌文件。
SVRMGR> alter system archive log current;
數據庫只有運行在ARCHIVELOG 模式下,並且能夠進行自動歸檔,纔可以進行聯機備份。有了聯機備份
纔有可能進行完全恢復。
3 如果一個表在2004-08-04 10:30:00 被drop,在有完善的歸檔和備份的情況下,如何恢復
9i 新增的FLASH BACK 應該可以;
Logminer 應該可以找出DML。
有完善的歸檔和備份,先歸檔當前數據,然後可以先恢復到刪除的時間點之前,把DROP 的表導出來,然
後再恢復到最後歸檔時間;
手工拷貝回所有備份的數據文件
Sql〉startup mount;
sql〉alter database recover automatic until time '2004-08-04:10:30:00';
sql〉alter database open resetlogs;
4 rman 是什麼,有何特點
RMAN(Recovery Manager)是DBA 的一個重要工具,用於備份、還原和恢復oracle 數據庫, RMAN 可以
用來備份和恢復數據庫文件、歸檔日誌、控制文件、系統參數文件,也可以用來執行完全或不完全的數據庫
恢復。
RMAN 有三種不同的用戶接口:COMMAND LINE 方式、GUI 方式(集成在OEM 中的備份管理器)、A
PI 方式(用於集成到第三方的備份軟件中)。
具有如下特點:
1)功能類似物理備份,但比物理備份強大N 倍;
2)可以壓縮空塊;
3)可以在塊水平上實現增量;
4)可以把備份的輸出打包成備份集,也可以按固定大小分割備份集;
5)備份與恢復的過程可以自動管理;
6)可以使用腳本(存在Recovery catalog 中)
7)可以做壞塊監測
5 standby 的特點
備用數據庫(standby database):ORACLE 推出的一種高可用性(HIGH AVAILABLE)數據庫方案,在主
節點與備用節點間通過日誌同步來保證數據的同步,備用節點作爲主節點的備份,可以實現快速切換與災
難性恢復,從920 開始,還開始支持物理與邏輯備用服務器。
9i 中的三種數據保護模式分別是:
1)、MAXIMIZE PROTECTION :最大數據保護與無數據分歧,LGWR 將同時傳送到備用節點,在主節點
事務確認之前,備用節點也必須完全收到日誌數據。如果網絡不好,引起LGWR 不能傳送數據,將引起嚴
重的性能問題,導致主節點DOWN 機。
2)、MAXIMIZE AVAILABILITY :無數據丟失模式,允許數據分歧,允許異步傳送。
正常情況下運行在最大保護模式,在主節點與備用節點的網絡斷開或連接不正常時,自動切換到最大性能
模式,主節點的操作還是可以繼續的。在網絡不好的情況下有較大的性能影響。
3)、MAXIMIZE PERFORMANCE:這種模式應當可以說是從8i 繼承過來的備用服務器模式,異步傳送,
無數據同步檢查,可能丟失數據,但是能獲得主節點的最大性能。9i 在配置DATA GUARD 的時候默認就
是MAXIMIZE PERFORMANCE
6 對於一個要求恢復時間比較短的系統(數據庫50G,每天歸檔5G),你如何設計備份策略
數據庫比較大邏輯備份沒什麼必要,每天歸檔5G,每週三/週六自動歸檔10G,每月RMAN 歸檔全庫。應
該有standby。
rman/每月一號level 0 每週末/週三level 1 其它每天level 2
四:系統管理類
1. 對於一個存在系統性能的系統,說出你的診斷處理思路
ü 做statspack 收集系統相關信息瞭解系統大致情況/確定是否存在參數設置不合適的地方/查看to
p 5 event/查看top sql 等
ü 查v$system_event/v$session_event/v$session_wait 從v$system_event 開始,確定需要什麼資源
(db file sequential read)等,深入研究v$session_event,確定等待事件涉及的會話,從v$session_wait 確
定詳細的資源爭用情況(p1-p3 的值:file_id/block_id/blocks 等)
ü 通過v$sql/v$sqltext/v$sqlarea 表確定disk_reads、(buffer_gets/executions)值較大的SQL
2. 列舉幾種診斷IO、CPU、性能狀況的方法
top uptime vmstat iostat statspack sql_trace/tkprof
查v$system_event/v$session_event/v$session_wait
查v$sqlarea(disk_reads 或buffer_gets/executions 較大的SQL)
或者第三方的監視工具,TOAD 就不錯。
3. 對statspack 有何認識
認識不深。僅限瞭解。StapSpack 是Oracle 公司提供的一個收集數據庫運行性能指標的軟件包。可以做數
據庫健康檢查報告。
StapSpack 是Oracle 公司提供的一個收集數據庫運行性能指標的軟件包,該軟件包從8i 起,在9i、10g
都有顯著的增強
該軟件包的輔助表(存儲相關參數與收集的性能指標的表)由最初的25 個增長到43 個
收集級別參數由原來的3 個(0、5、10)增加到5 個(0、5、6、7、10)
通過分析收集的性能指標,數據庫管理員可以詳細地瞭解數據庫目前的運行情況,對數據庫實例、等待事
件、SQL 等進行優化調整
利用statspack 收集的snapshot,可以統計製作數據庫的各種性能指標的統計趨勢圖表。
4. 如果系統現在需要在一個很大的表上創建一個索引,你會考慮那些因素,如何做以儘量減小對應用
的影響
可以先表分析一下,然後測試創建索引前後對應用的性能影響;
需要考慮的是該索引列不經常更新,不是有很多重複值的情況時, 在大表中使用索引特別有效. 創建的索引
可以跟數據表分不同表空間存儲。
在系統比較空閒時nologging 選項(如果有dataguard 則不可以使用nologging)
大的sort_ared_size 或pga_aggregate_target 較大
5. 對raid10 和raid5 有何認識
RAID 10(或稱RAID 1+0)與RAID 0+1 不同,它是用硬盤驅動器先組成RAID 1 陣列,然後在RAID 1
陣列之間再組成RAID 0 陣列。
RAID 10 模式同RAID 0+1 模式一樣具有良好的數據傳輸性能,但卻比RAID 0+1 具有更高的可靠性。R
AID 10 陣列的實際容量爲M×n/2,磁盤利用率爲50%。RAID 10 也需要至少4 個硬盤驅動器構成,因而
價格昂貴。
RAID 10 的可靠性同RAID 1 一樣,但由於RAID 10 硬盤驅動器之間有數據分割,因而數據傳輸性能優
良。
RAID 5 與RAID 3 很相似,不同之處在於RAID 5 的奇偶校驗信息也同數據一樣被分割保存到所有的硬盤
驅動器,而不是寫入一個指定的硬盤驅動器,從而消除了單個奇偶校驗硬盤驅動器的瓶頸問題。RAID 5
磁盤陣列的性能比RAID 3 有所提高,但仍然需要至少3 塊硬盤驅動器。其實際容量爲M×(n-1),磁盤利
用率爲(n-1)/n 。

數據庫面試筆試題集
第一套
一.選擇題
1. 下面敘述正確的是______。
A、算法的執行效率與數據的存儲結構無關
B、算法的空間複雜度是指算法程序中指令(或語句)的條數
C、算法的有窮性是指算法必須能在執行有限個步驟之後終止D、以上三種描述都不對
2. 以下數據結構中不屬於線性數據結構的是______。A、隊列B、線性表C、二叉樹D、棧
3. 在一棵二叉樹上第5 層的結點數最多是______。A、8 B、16 C、32 D、15
4. 下面描述中,符合結構化程序設計風格的是______。
A、使用順序、選擇和重複(循環)三種基本控制結構表示程序的控制邏輯
B、模塊只有一個入口,可以有多個出口
C、注重提高程序的執行效率D、不使用goto 語句
5. 下面概念中,不屬於面向對象方法的是______。
A、對象B、繼承C、類D、過程調用
6. 在結構化方法中,用數據流程圖(DFD)作爲描述工具的軟件開發階段是______。
A、可行性分析B、需求分析C、詳細設計D、程序編碼
7. 在軟件開發中,下面任務不屬於設計階段的是______。
A、數據結構設計B、給出系統模塊結構C、定義模塊算法D、定義需求並建立系統模型
8. 數據庫系統的核心是______。
A、數據模型B、數據庫管理系統C、軟件工具D、數據庫
9. 下列敘述中正確的是______。
A、數據庫是一個獨立的系統,不需要操作系統的支持
B、數據庫設計是指設計數據庫管理系統
C、數據庫技術的根本目標是要解決數據共享的問題
D、數據庫系統中,數據的物理結構必須與邏輯結構一致
10. 下列模式中,能夠給出數據庫物理存儲結構與物理存取方法的是______。
A、內模式B、外模式C、概念模式D、邏輯模式
11. Visual FoxPro 數據庫文件是______。
A、存放用戶數據的文件B、管理數據庫對象的系統文件
C、存放用戶數據和系統的文件D、前三種說法都對
12. SQL 語句中修改表結構的命令是______。
A、MODIFY TABLE B、MODIFY STRUCTURE C、ALTER TABLE D、ALTER STRUCTURE
13. 如果要創建一個數據組分組報表,第一個分組表達式是"部門",第二個分組表達式是"性別",第三個分
組表達式是"基本工資",當前索引的索引表達式應當是______。
A、部門+性別+基本工資B、部門+性別+STR(基本工資)
C、STR(基本工資)+性別+部門D、性別+部門+STR(基本工資)
14. 把一個項目編譯成一個應用程序時,下面的敘述正確的是______。
A、所有的項目文件將組合爲一個單一的應用程序文件
B、所有項目的包含文件將組合爲一個單一的應用程序文件
C、所有項目排除的文件將組合爲一個單一的應用程序文件
D、由用戶選定的項目文件將組合爲一個單一的應用程序文件
15. 數據庫DB、數據庫系統DBS、數據庫管理系統DBMS 三者之間的關係是______。
A、DBS 包括DB 和DBMS B、DBMS 包括DB 和DBS
C、DB 包括DBS 和DBMS D、DBS 就是DB,也就是DBMS
16. 在"選項"對話框的"文件位置"選項卡中可以設置______。
A、表單的默認大小B、默認目錄
C、日期和時間的顯示格式D、程序代碼的顏色
17. 要控制兩個表中數據的完整性和一致性可以設置"參照完整性",要求這兩個表______。
A、是同一個數據庫中的兩個表B、不同數據庫中的兩個表
C、兩個自由表D、一個是數據庫表另一個是自由表
18. 定位第一條記錄上的命令是______。
A、GO TOP B、GO BOTTOM C、GO 6 D、SKIP
19. 在關係模型中,實現"關係中不允許出現相同的元組"的約束是通過______。
A、候選鍵B、主鍵C、外鍵D、超鍵
20. 設當前數據庫有10 條記錄(記錄未進行任何索引),在下列三種情況下,當前記錄號爲1 時;EOF()
爲真時;BOF()爲真時,命令?RECN()的結果分別是______。
A、1,11,1 B、1,10,1 C、1,11,0 D、1,10,0
21. 下列表達式中結果不是日期型的是______。
A、CTOD("2000/10/01") B、{^99/10/01}+365 C、VAL("2000/10/01") D、DATE()
22. 只有滿足聯接條件的記錄才包含在查詢結果中,這種聯接爲______。
A、左聯接B、右聯接C、內部聯接D、完全聯接
23. 索引字段值不唯一,應該選擇的索引類型爲______。
A、主索引B、普通索引C、候選索引D、唯一索引
24. 執行SELECT 0 選擇工作區的結果是______。
A、選擇了0 號工作區B、選擇了空閒的最小號工作區
C、關閉選擇的工作區D、選擇已打開的工作區
25. 從數據庫中刪除表的命令是______。
A、DROP TABLE B、ALTER TABLE C、DELETE TABLE D、USE
26. DELETE FROM S WHERE 年齡>60 語句的功能是______。
A、從S 表中徹底刪除年齡大於60 歲的記錄B、S 表中年齡大於60 歲的記錄被加上刪除標記
C、刪除S 表D、刪除S 表的年齡列
27. SELECT-SQL 語句是______。
A、選擇工作區語句B、數據查詢語句C、選擇標準語句D、數據修改語句
28. SQL 語言是______語言。A、層次數據庫B、網絡數據庫C、關係數據庫D、非數據庫
29. 在SQL 中,刪除視圖用______。
A、DROP SCHEMA 命令B、CREATE TABLE 命令C、DROP VIEW 命令D、DROP INDEX 命令
30. 以下屬於非容器類控件的是______。A、Form B、Label C、page D、Container
31. 將查詢結果放在數組中應使用______短語。
A、INTO CURSOR B、TO ARRAY C、INTO TABLE D、INTO ARRAY
32. 在命令窗口執行SQL 命令時,若命令要佔用多行,續行符是______。
A、冒號(:) B、分號(;) C、逗號(,) D、連字符(-)
33. 設有圖書管理數據庫:
圖書(總編號C(6),分類號C(8),書名C(16),作者C(6),出版單位C(20),單價N(6,2))
讀者(借書證號C(4),單位C(8),姓名C(6),性別C(2),職稱C(6),地址C(20))
借閱(借書證號C(4),總編號C(6),借書日期D(8))
對於圖書管理數據庫,查詢0001 號借書證的讀者姓名和所借圖書的書名。
SQL 語句正確的是______。
SELECT 姓名,書名FROM 借閱,圖書,讀者WHERE;
借閱.借書證號="0001" AND;
______
______
A、圖書.總編號=借閱.總編號AND;
讀者.借書證號=借閱.借書證號
B、圖書.分類號=借閱.分類號AND;
讀者.借書證號=借閱.借書證號
C、讀者.總編號=借閱.總編號AND;
讀者.借書證號=借閱.借書證號
D、圖書.總編號=借閱.總編號AND;
讀者.書名=借閱.書名
34. 設有圖書管理數據庫:
圖書(總編號C(6),分類號C(8),書名C(16),作者C(6),出版單位C(20),單價N(6,2))
讀者(借書證號C(4),單位C(8),姓名C(6),性別C(2),職稱C(6),地址C(20))
借閱(借書證號C(4),總編號C(6),借書日期D(8))
對於圖書管理數據庫,分別求出各個單位當前借閱圖書的讀者人次。下面的SQL 語句正確的是______。
SELECT 單位,______ FROM 借閱,讀者WHERE;
借閱.借書證號=讀者.借書證號______
A、COUNT(借閱.借書證號) GROUP BY 單位B、SUM(借閱.借書證號) GROUP BY 單位
C、COUNT(借閱.借書證號) ORDER BY 單位D、COUNT(借閱.借書證號) HAVING 單位
35. 設有圖書管理數據庫:
圖書(總編號C(6),分類號C(8),書名C(16),作者C(6),出版單位C(20),單價N(6,2))
讀者(借書證號C(4),單位C(8),姓名C(6),性別C(2),職稱C(6),地址C(20))
借閱(借書證號C(4),總編號C(6),借書日期D(8))
對於圖書管理數據庫,檢索借閱了《現代網絡技術基礎》一書的借書證號。下面SQL 語句正確的是_____
_。
SELECT 借書證號FROM 借閱WHERE 總編號=;
______
A、(SELECT 借書證號FROM 圖書WHERE 書名="現代網絡技術基礎")
B、(SELECT 總編號FROM 圖書WHERE 書名="現代網絡技術基礎")
C、(SELECT 借書證號FROM 借閱WHERE 書名="現代網絡技術基礎")
D、(SELECT 總編號FROM 借閱WHERE 書名="現代網絡技術基礎")
二、填空題
36. 算法的複雜度主要包括______複雜度和空間複雜度。
37. 數據的邏輯結構在計算機存儲空間中的存放形式稱爲數據的______。
38. 若按功能劃分,軟件測試的方法通常分爲白盒測試方法和______測試方法。
39. 如果一個工人可管理多個設施,而一個設施只被一個工人管理,則實體"工人"與實體"設備"之間存在__
____聯繫。
40. 關係數據庫管理系統能實現的專門關係運算包括選擇、連接和______。
41. 命令?LEN("THIS IS MY BOOK")的結果是______。
42.SQL SELECT 語句爲了將查詢結果存放到臨時表中應該使用______短語。
43. 多欄報表的欄目數可以通過______來設置。
44. 在打開項目管理器之後再打開"應用程序生成器",可以通過按ALT+F2 鍵,快捷菜單和"工具"菜單中的
______。
45. 數據庫系統的核心是______。
46. 查詢設計器中的"聯接"選項卡,可以控制______選擇。
47. 設有圖書管理數據庫:
圖書(總編號C(6),分類號C(8),書名C(16),作者C(6),出版單位C(20),單價N(6,2))
讀者(借書證號C(4),單位C(8),姓名C(6),性別C(2),職稱C(6),地址C(20))
借閱(借書證號C(4),總編號C(6),借書日期D(8))
用SQL 的CREATE 命令建立借閱表(字段順序要相同),請對下面的SQL 語句填空:
______
48. 設有圖書管理數據庫:
圖書(總編號C(6),分類號C(8),書名C(16),作者C(6),出版單位C(20),單價N(6,2))
讀者(借書證號C(4),單位C(8),姓名C(6),性別C(2),職稱C(6),地址C(20))
借閱(借書證號C(4),總編號C(6),借書日期D(8))
對圖書管理數據庫,查詢由"清華大學出版社"或"電子工業出版社"出版,並且單價不超出20 元的書名。請
對下面的SQL 語句填空:
SELECT 書名,出版單位,單價FROM 圖書;
WHERE_______ AND;
_______
49. 設有圖書管理數據庫:
圖書(總編號C(6),分類號C(8),書名C(16),作者C(6),出版單位C(20),單價N(6,2))
讀者(借書證號C(4),單位C(8),姓名C(6),性別C(2),職稱C(6),地址C(20))
借閱(借書證號C(4),總編號C(6),借書日期D(8))
對圖書管理數據庫,求共借出多少種圖書。請對下面的SQL 語句填空:
SELECT _______ FROM 借閱
第一套題答案
選擇題
1-5 CCBAD 6-10 BDBCA 11-15 DCBAA 16-20 BAABA 21-25 CCBBA 26-30 BBCCB 31-35 DDAA
B
填空題
36.時間37.模式或邏輯模式38.黑盒39. 一對多或1 對多或一對n 或1:N 或1:n 或1:n 或1:
N 或一對m 或1:M 或1:m 或1:m 或1:N 40. 投影41.15 42. Into cursor 或Into cursor curs
orname 43. 頁面設置或列數44. 應用程序生成器45. 數據庫管理系統或DBMS 46. 聯接類型或
聯接條件47. CREATE TABLE 借閱(借書證號C(4),總編號C(6),借書日期D(8)) 或CREA TABL 借
閱(借書證號C(4),總編號C(6),借書日期D(8)) 或CREATE TABLE 借閱(借書證號C(4),總編號C
(6),借書日期D) 或CREA TABL 借閱(借書證號C(4),總編號C(6),借書日期D) 48. 單價<=20 或
(出版單位="清華大學出版社" OR 出版單位="電子工業出版社") 或(出版單位="電子工業出版社" OR 出
版單位="清華大學出版社") 或(出版單位='清華大學出版社' OR 出版單位='電子工業出版社') 與(出版單
位="清華大學出版社" OR 出版單位="電子工業出版社") 或(出版單位='清華大學出版社‘) 49. COUNT(D
ISTINCT 總編號) 或COUN(DISTINCT 總編號) 或COUNT(DIST 總編號) 或COUN(DIST 總編號)
第二套題
一、選擇題
1. 以下數據結構中不屬於線性數據結構的是______。
A、隊列B、線性表C、二叉樹D、棧
2. 在結構化方法中,用數據流程圖(DFD)作爲描述工具的軟件開發階段是______。
A、可行性分析B、需求分析C、詳細設計D、程序編碼
3. 結構化程序設計主要強調的是______。
A、程序的規模B、程序的易讀性C、程序的執行效率D、程序的可移植性
4. 在軟件生命週期中,能準確地確定軟件系統必須做什麼和必須具備哪些功能的階段是______。
A、概要設計B、詳細設計C、可行性分析D、需求分析
5. 下列關於棧的敘述中正確的是______。A、在棧中只能插入數據B、在棧中只能刪除數據
C、棧是先進先出的線性表D、棧是先進後出的線性表
6. 下面不屬於軟件設計原則的是______。A、抽象B、模塊化C、自底向上D、信息隱蔽
7. 對長度爲N 的線性表進行順序查找,在最壞情況下所需要的比較次數爲______。
A、N+1 B、N C、(N+1)/2 D、N/2
8. 視圖設計一般有3 種設計次序,下列不屬於視圖設計的是______。
A、自頂向下B、由外向內C、由內向外D、自底向上
9. 下列有關數據庫的描述,正確的是______。A、數據庫是一個DBF 文件B、數據庫是一個關係
C、數據庫是一個結構化的數據集合D、數據庫是一組文件
10. 下列說法中,不屬於數據模型所描述的內容的是______。
A、數據結構B、數據操作C、數據查詢D、數據約束
11. 在下面的Visual FoxPro 表達式中,運算結果是邏輯真的是______。
A、EMPTY(.NULL.) B、LIKE('acd','ac?') C、AT('a','123abc') D、EMPTY(SPACE(2))
12. 表達式VAL(SUBS("奔騰586",5,1))*Len("visual foxpro")的結果是______。
A、13.00 B、14.00 C、45.00 D、65.00
13. 以下關於自由表的敘述,正確的是______。
A、全部是用以前版本的FOXPRO(FOXBASE)建立的表
B、可以用Visual FoxPro 建立,但是不能把它添加到數據庫中
C、自由表可以添加到數據庫中,數據庫表也可以從數據庫中移出成爲自由表
D、自由表可以添加到數據庫中,但數據庫表不可從數據庫中移出成爲自由表
14. 下面關於數據環境和數據環境中兩個表之間的關係的陳述中,______是正確的。
A、數據環境是對象,關係不是對象B、數據環境不是對象,關係是對象
C、數據環境是對象,關係是數據環境中的對象D、數據環境和關係均不是對象
15. 在"報表設計器"中,可以使用的控件是______。
A、標籤、域控件和線條B、標籤、域控件和列表框
C、標籤、文本框和列表框D、佈局和數據源
16.用二維表數據來表示實體及實體之間聯繫的數據模型稱爲______。
A、實體--聯繫模型B、層次模型C、網狀模型D、關係模型
17. 用來指明覆選框的當前選中狀態的屬性是______。A、Selected B、Caption C、Value D、ControlSource
18. 使用菜單操作方法打開一個在當前目錄下已經存在的查詢文件zgjk.qpr 後,在命令窗口生成的命令是
____。
A、OPEN QUERY zgjk.qpr B、MODIFY QUERY zgjk.qpr
C、DO QUERY zgjk.qpr D、CREATE QUERY zgjk.qpr
19. 可以伴隨着表的打開而自動打開的索引是______。
A、單一索引文件(IDX) B、複合索引文件(CDX)C、結構化複合索引文件D、非結構化複合索引文件
20. 在數據庫設計器中,建立兩個表之間的一對多聯繫是通過以下索引實現的______。
A、"一方"表的主索引或候選索引,"多方"表的普通索引
B、"一方"表的主索引,"多方"表的普通索引或候選索引
C、"一方"表的普通索引,"多方"表的主索引或候選索引
D、"一方"表的普通索引,"多方"表的候選索引或普通索引
21. 下列函數中函數值爲字符型的是______。A、DATE() B、TIME() C、YEAR() D、DATETIME()
22. 下面對控件的描述正確的是______。
A、用戶可以在組合框中進行多重選擇B、用戶可以在列表框中進行多重選擇
C、用戶可以在一個選項組中選中多個選項按鈕D、用戶對一個表單內的一組複選框只能選中其中一個
23. 確定列表框內的某個條目是否被選定應使用的屬性是______。
A、Value B、ColumnCount C、ListCount D、Selected
24. 設有關係R1 和R2,經過關係運算得到結果S,則S 是______。
A、一個關係B、一個表單C、一個數據庫D、一個數組
25. DBAS 指的是______。A、數據庫管理系統B、數據庫系統C、數據庫應用系統D、數據庫服務系統
26. 設X="ABC",Y="ABCD",則下列表達式中值爲.T.的是______。A、X=Y B、X==Y C、X$Y D、AT(X,Y)=0
27. 在表結構中,邏輯型、日期型、備註型字段的寬度分別固定爲______。
A、3,8,10 B、1,6,4 C、1,8,任意D、1,8,4
28. 在標準SQL 中,建立視圖的命令是______。
A、CREATE SCHEMA 命令B、CREATE TABLE 命令C、CREATE VIEW 命令D、CREATE INDEX
命令
29. 有關SCAN 循環結構,敘述正確的是______。
A、SCAN 循環結構中的LOOP 語句,可將程序流程直接指向循環開始語句SCAN,首先判斷EOF()函數
的真假
B、在使用SCAN 循環結構時,必須打開某一個數據庫
C、SCAN 循環結構的循環體中必須寫有SKIP 語句
D、SCAN 循環結構,如果省略了子句\FOR 和WHILE 條件子句,則直接退出循環
30. 設有圖書管理數據庫:
圖書(總編號C(6),分類號C(8),書名C(16),作者C(6),出版單位C(20),單價N(6,2))
讀者(借書證號C(4),單位C(8),姓名C(6),性別C(2),職稱C(6),地址C(20))
借閱(借書證號C(4),總編號C(6),借書日期D(8))
對於圖書管理數據庫,要查詢所藏圖書中,各個出版社的圖書最高單價、平均單價和冊數,下面SQL 語句
正確的是______。
SELECT 出版單位,______,______,______;
FROM 圖書管理!圖書______ 出版單位
A、MIN(單價) AVGAGE(單價) COUNT(*) GROUP BY B、MAX(單價) AVG(單價) COUNT(*) ORDER BY
C、MAX(單價) AVG(單價) SUM(*) ORDER BY D、MAX(單價) AVG(單價) COUNT(*) GROUP BY
31. 設有圖書管理數據庫:
圖書(總編號C(6),分類號C(8),書名C(16),作者C(6),出版單位C(20),單價N(6,2))
讀者(借書證號C(4),單位C(8),姓名C(6),性別C(2),職稱C(6),地址C(20))
借閱(借書證號C(4),總編號C(6),借書日期D(8))
對於圖書管理數據庫,求CIE 單位借閱圖書的讀者的人數。
下面SQL 語句正確的是______。
SELECT ______ FROM 借閱WHERE;
借書證號_______
A、COUNT (DISTINCT 借書證號)
IN (SELECT 借書證號FROM 讀者WHERE 單位="CIE")
B、COUNT (DISTINCT 借書證號)
IN (SELECT 借書證號FROM 借閱WHERE 單位="CIE")
C、SUM (DISTINCT 借書證號)
IN (SELECT 借書證號FROM 讀者WHERE 單位="CIE")
D、SUM (DISTINCT 借書證號)
IN (SELECT 借書證號FOR 借閱WHERE 單位="CIE")
32. 查詢訂購單號(字符型,長度爲4)尾字符是"1"的錯誤命令是______。
A、SELECT * FROM 訂單WHERE SUBSTR(訂購單號,4)="1"
B、SELECT * FROM 訂單WHERE SUBSTR(訂購單號,4,1)="1"
C、SELECT * FROM 訂單WHERE "1"$訂購單號
D、SELECT * FROM 訂單WHERE RIGHT(訂購單號,1)="1"
33. 在關係模型中,爲了實現"關係中不允許出現相同元組"的約束應使用______。
A、臨時關鍵字B、主關鍵字C、外部關鍵字D、索引關鍵字
34. 根據"職工"項目文件生成emp_sys.exe 應用程序的命令是______。
A、BUILD EXE emp_sys FROM 職工B、BUILD APP emp_sys.exe FROM 職工
C、LIKE EXE emp_sys FROM 職工D、LIKE APP emp_sys.exe FROM 職工
35. 當前盤當前目錄下有數據庫:學院.dbc,其中有"教師"表和"學院"表。
"教師"表:
"學院"表:
有SQL 語句:
SELECT DISTINCT 系號FROM 教師WHERE 工資>=;
ALL (SELECT 工資FROM 教師WHERE 系號="02")
與如上語句等價的SQL 語句是______。
A、SELECT DISTINCT 系號FROM 教師WHERE 工資>=;
(SELECT MAX(工資) FROM 教師WHERE 系號="02")
B、SELECT DISTINCT 系號FROM 教師WHERE 工資>=;
(SELECT MIN(工資) FROM 教師WHERE 系號="02")
C、SELECT DISTINCT 系號FROM 教師WHERE 工資>=;
ANY(SELECT 工資FROM 教師WHERE 系號="02")
D、SELECT DISTINCT 系號FROM 教師WHERE 工資>=;
SOME (SELECT 工資FROM 教師WHERE 系號="02")
二、填空題
36. 若按功能劃分,軟件測試的方法通常分爲白盒測試方法和______測試方法。
37. 數據庫系統的三級模式分別爲______模式、內部級模式與外部級模式。
38. 在最壞情況下,冒泡排序的時間複雜度爲______。
39. 在面向對象方法中,信息隱蔽是通過對象的______性來實現的。
40. 關係模型的數據操縱即是建立在關係上的數據操縱,一般有______、增加、刪除和修改四種操作。
41.要把幫助文件設置爲複製到硬盤上的Foxhelp.chm 文件,需要在"選項"對話框的______選項卡上設置。
42. TIME( )的返回值的數據類型是______類型。
43. 在定義字段有效性規則中,在規則框中輸入的表達式中類型是________。
44. 設計報表通常包括兩部分內容:______和佈局。
45. ______是指只有滿足聯接條件的記錄才包含在查詢結果中。
46. 設有圖書管理數據庫:
圖書(總編號C(6),分類號C(8),書名C(16),作者C(6),出版單位C(20),單價N(6,2))
讀者(借書證號C(4),單位C(8),姓名C(6),性別C(2),職稱C(6),地址C(20))
借閱(借書證號C(4),總編號C(6),借書日期D(8))
檢索書價在15 元至25 元(含15 元和25 元)之間的圖書的書名、作者、書價和分類號,結果按分類號升序
排序。
SELECT 書名,作者,單價,分類號FROM 圖書;
WHERE______;
ORDER BY______;
47. 設有如下關係表R、S 和T:
R(BH,XM,XB,DWH)
S(SWH,DWM)
T(BH,XM,XB,DWH)
實現R∪T 的SQL 語句是_______。
48. 設有如下關係表R:
R(NO,NAME,SEX,AGE,CLASS)
主關鍵字是NO
其中NO 爲學號,NAME 爲姓名,SEX 爲性別,AGE 爲年齡,CLASS 爲班號。寫出實現下列功能的SQL
語句。
插入"95031"班學號爲30,姓名爲"鄭和"的學生記錄;_______。
49. 設有如下關係表R:
R(NO,NAME,SEX,AGE,CLASS)
主關鍵字是NO
其中NO 爲學號(數值型),NAME 爲姓名,SEX 爲性別,AGE 爲年齡,CLASS 爲班號。寫出實現下列功
能的SQL 語句。
刪除學號爲20 的學生記錄;______。
第二套題答案
1-5 CBBDD 6-10 CBBCC 11-15 DDCCA 16-20 DCBCA 21-25 BBDAC 26-30 CDCBD 31-35 ACBBA
36.黑盒37.概念或概念級38.n(n-1)/2 39.封裝40.查詢41.文件位置42.字符或C 43.邏輯表達式
44.數據源45.內部聯接
46. 單價BETWEEN 15 AND 25 或單價BETW 15 AND 25 或單價BETWE 15 AND 25 或單價
>=15 and 單價<=25 或單價>=15 and 單價=<25 或單價=>15 and 單價<=25 或單價=>15 and 單價
=<25 與分類號ASC 或分類號
47. SELECT * FROM R UNION SELECT * FROM T 或SELE * FROM R UNIO SELE * FROM T 或
SELECT * FROM R UNIO SELECT * FROM T 或SELE * FROM R UNION SELE * FROM T
48. INSERT INTO R(NO,NAME,CLASS) VALUES(30,"鄭和","95031") 或INSE INTO
R(NO,NAME,CLASS) VALUES(30,"鄭和","95031")
49. DELETE FROM R WHERE NO=20 或DELE FROM R WHERE NO=20 或DELE FROM R WHER
NO=20 或DELETE FROM R WHER NO=20
數據庫面試題集
數據庫筆試題及答案I
第一套
一.選擇題
1. 下面敘述正確的是______。
A、算法的執行效率與數據的存儲結構無關
B、算法的空間複雜度是指算法程序中指令(或語句)的條數
C、算法的有窮性是指算法必須能在執行有限個步驟之後終止
D、以上三種描述都不對
2. 以下數據結構中不屬於線性數據結構的是______。A、隊列B、線性表C、二叉樹D、棧
3. 在一棵二叉樹上第5 層的結點數最多是______。A、8 B、16 C、32 D、15
4. 下面描述中,符合結構化程序設計風格的是______。
A、使用順序、選擇和重複(循環)三種基本控制結構表示程序的控制邏輯
B、模塊只有一個入口,可以有多個出口
C、注重提高程序的執行效率D、不使用goto 語句
5. 下面概念中,不屬於面向對象方法的是______。
A、對象B、繼承C、類D、過程調用
6. 在結構化方法中,用數據流程圖(DFD)作爲描述工具的軟件開發階段是______。
A、可行性分析B、需求分析C、詳細設計D、程序編碼
7. 在軟件開發中,下面任務不屬於設計階段的是______。
A、數據結構設計B、給出系統模塊結構C、定義模塊算法D、定義需求並建立系統模型
8. 數據庫系統的核心是______。
A、數據模型B、數據庫管理系統C、軟件工具D、數據庫
9. 下列敘述中正確的是______。
A、數據庫是一個獨立的系統,不需要操作系統的支持
B、數據庫設計是指設計數據庫管理系統
C、數據庫技術的根本目標是要解決數據共享的問題
D、數據庫系統中,數據的物理結構必須與邏輯結構一致
10. 下列模式中,能夠給出數據庫物理存儲結構與物理存取方法的是______。
A、內模式B、外模式C、概念模式D、邏輯模式
11. Visual FoxPro 數據庫文件是______。
A、存放用戶數據的文件B、管理數據庫對象的系統文件
C、存放用戶數據和系統的文件D、前三種說法都對
12. SQL 語句中修改表結構的命令是______。
A、MODIFY TABLE B、MODIFY STRUCTURE C、ALTER TABLE D、ALTER STRUCTURE
13. 如果要創建一個數據組分組報表,第一個分組表達式是"部門",第二個分組表達式是"性別",第三
個分組表達式是"基本工資",當前索引的索引表達式應當是______。
A、部門+性別+基本工資B、部門+性別+STR(基本工資)
C、STR(基本工資)+性別+部門D、性別+部門+STR(基本工資)
14. 把一個項目編譯成一個應用程序時,下面的敘述正確的是______。
A、所有的項目文件將組合爲一個單一的應用程序文件
B、所有項目的包含文件將組合爲一個單一的應用程序文件
C、所有項目排除的文件將組合爲一個單一的應用程序文件
D、由用戶選定的項目文件將組合爲一個單一的應用程序文件
15. 數據庫DB、數據庫系統DBS、數據庫管理系統DBMS 三者之間的關係是______。
A、DBS 包括DB 和DBMS B、DBMS 包括DB 和DBS
C、DB 包括DBS 和DBMS D、DBS 就是DB,也就是DBMS
16. 在"選項"對話框的"文件位置"選項卡中可以設置______。
A、表單的默認大小B、默認目錄
C、日期和時間的顯示格式D、程序代碼的顏色
17. 要控制兩個表中數據的完整性和一致性可以設置"參照完整性",要求這兩個表______。
A、是同一個數據庫中的兩個表B、不同數據庫中的兩個表
C、兩個自由表D、一個是數據庫表另一個是自由表
18. 定位第一條記錄上的命令是______。
A、GO TOP B、GO BOTTOM C、GO 6 D、SKIP
19. 在關係模型中,實現"關係中不允許出現相同的元組"的約束是通過______。
A、候選鍵B、主鍵C、外鍵D、超鍵
20. 設當前數據庫有10 條記錄(記錄未進行任何索引),在下列三種情況下,當前記錄號爲1 時;EOF()
爲真時;BOF()爲真時,命令?RECN()的結果分別是______。
A、1,11,1 B、1,10,1 C、1,11,0 D、1,10,0
21. 下列表達式中結果不是日期型的是______。
A、CTOD("2000/10/01") B、{^99/10/01}+365 C、VAL("2000/10/01") D、DATE()
22. 只有滿足聯接條件的記錄才包含在查詢結果中,這種聯接爲______。
A、左聯接B、右聯接C、內部聯接D、完全聯接
23. 索引字段值不唯一,應該選擇的索引類型爲______。
A、主索引B、普通索引C、候選索引D、唯一索引
24. 執行SELECT 0 選擇工作區的結果是______。
A、選擇了0 號工作區B、選擇了空閒的最小號工作區
C、關閉選擇的工作區D、選擇已打開的工作區
25. 從數據庫中刪除表的命令是______。
A、DROP TABLE B、ALTER TABLE C、DELETE TABLE D、USE
26. DELETE FROM S WHERE 年齡>60 語句的功能是______。
A、從S 表中徹底刪除年齡大於60 歲的記錄B、S 表中年齡大於60 歲的記錄被加上刪除標記
C、刪除S 表D、刪除S 表的年齡列
27. SELECT-SQL 語句是______。
A、選擇工作區語句B、數據查詢語句C、選擇標準語句D、數據修改語句
28. SQL 語言是______語言。A、層次數據庫B、網絡數據庫C、關係數據庫D、非數據庫
29. 在SQL 中,刪除視圖用______。
A、DROP SCHEMA 命令B、CREATE TABLE 命令C、DROP VIEW 命令D、DROP INDEX 命令
30. 以下屬於非容器類控件的是______。A、Form B、Label C、page D、Container
31. 將查詢結果放在數組中應使用______短語。
A、INTO CURSOR B、TO ARRAY C、INTO TABLE D、INTO ARRAY
32. 在命令窗口執行SQL 命令時,若命令要佔用多行,續行符是______。
A、冒號(:) B、分號(;) C、逗號(,) D、連字符(-)
33. 設有圖書管理數據庫:
圖書(總編號C(6),分類號C(8),書名C(16),作者C(6),出版單位C(20),單價N(6,2))
讀者(借書證號C(4),單位C(8),姓名C(6),性別C(2),職稱C(6),地址C(20))
借閱(借書證號C(4),總編號C(6),借書日期D(8))
對於圖書管理數據庫,查詢0001 號借書證的讀者姓名和所借圖書的書名。
SQL 語句正確的是______。
SELECT 姓名,書名FROM 借閱,圖書,讀者WHERE;
借閱.借書證號="0001" AND;
______
______
A、圖書.總編號=借閱.總編號AND;
讀者.借書證號=借閱.借書證號
B、圖書.分類號=借閱.分類號AND;
讀者.借書證號=借閱.借書證號
C、讀者.總編號=借閱.總編號AND;
讀者.借書證號=借閱.借書證號
D、圖書.總編號=借閱.總編號AND;
34. 設有圖書管理數據庫:
圖書(總編號C(6),分類號C(8),書名C(16),作者C(6),出版單位C(20),單價N(6,2))
讀者(借書證號C(4),單位C(8),姓名C(6),性別C(2),職稱C(6),地址C(20))
借閱(借書證號C(4),總編號C(6),借書日期D(8))
對於圖書管理數據庫,分別求出各個單位當前借閱圖書的讀者人次。下面的SQL 語句正確的是______。
SELECT 單位,______ FROM 借閱,讀者WHERE;
借閱.借書證號=讀者.借書證號______
A、COUNT(借閱.借書證號) GROUP BY 單位B、SUM(借閱.借書證號) GROUP BY 單位
C、COUNT(借閱.借書證號) ORDER BY 單位D、COUNT(借閱.借書證號) HAVING 單位
35. 設有圖書管理數據庫:
圖書(總編號C(6),分類號C(8),書名C(16),作者C(6),出版單位C(20),單價N(6,2))
讀者(借書證號C(4),單位C(8),姓名C(6),性別C(2),職稱C(6),地址C(20))
借閱(借書證號C(4),總編號C(6),借書日期D(8))
對於圖書管理數據庫,檢索借閱了《現代網絡技術基礎》一書的借書證號。下面SQL 語句正確的是
______。
SELECT 借書證號FROM 借閱WHERE 總編號=;
______
A、(SELECT 借書證號FROM 圖書WHERE 書名="現代網絡技術基礎")
B、(SELECT 總編號FROM 圖書WHERE 書名="現代網絡技術基礎")
C、(SELECT 借書證號FROM 借閱WHERE 書名="現代網絡技術基礎")
D、(SELECT 總編號FROM 借閱WHERE 書名="現代網絡技術基礎")
二、填空題
36. 算法的複雜度主要包括______複雜度和空間複雜度。
37. 數據的邏輯結構在計算機存儲空間中的存放形式稱爲數據的______。
38. 若按功能劃分,軟件測試的方法通常分爲白盒測試方法和______測試方法。
39. 如果一個工人可管理多個設施,而一個設施只被一個工人管理,則實體"工人"與實體"設備"之間存
在______聯繫。
40. 關係數據庫管理系統能實現的專門關係運算包括選擇、連接和______。
41. 命令?LEN("THIS IS MY BOOK")的結果是______。
42.SQL SELECT 語句爲了將查詢結果存放到臨時表中應該使用______短語。
43. 多欄報表的欄目數可以通過______來設置。
44. 在打開項目管理器之後再打開"應用程序生成器",可以通過按ALT+F2 鍵,快捷菜單和"工具"菜單中的
______。
45. 數據庫系統的核心是______。
46. 查詢設計器中的"聯接"選項卡,可以控制______選擇。
47. 設有圖書管理數據庫:
圖書(總編號C(6),分類號C(8),書名C(16),作者C(6),出版單位C(20),單價N(6,2))
讀者(借書證號C(4),單位C(8),姓名C(6),性別C(2),職稱C(6),地址C(20))
借閱(借書證號C(4),總編號C(6),借書日期D(8))
用SQL 的CREATE 命令建立借閱表(字段順序要相同),請對下面的SQL 語句填空:
______
48. 設有圖書管理數據庫:
圖書(總編號C(6),分類號C(8),書名C(16),作者C(6),出版單位C(20),單價N(6,2))
讀者(借書證號C(4),單位C(8),姓名C(6),性別C(2),職稱C(6),地址C(20))
借閱(借書證號C(4),總編號C(6),借書日期D(8))
對圖書管理數據庫,查詢由"清華大學出版社"或"電子工業出版社"出版,並且單價不超出20 元的書名。
請對下面的SQL 語句填空:
SELECT 書名,出版單位,單價FROM 圖書;
WHERE_______ AND;
_______
49. 設有圖書管理數據庫:
圖書(總編號C(6),分類號C(8),書名C(16),作者C(6),出版單位C(20),單價N(6,2))
讀者(借書證號C(4),單位C(8),姓名C(6),性別C(2),職稱C(6),地址C(20))
借閱(借書證號C(4),總編號C(6),借書日期D(8))
對圖書管理數據庫,求共借出多少種圖書。請對下面的SQL 語句填空:
SELECT _______ FROM 借閱
第一套題答案
選擇題
1-5 CCBAD 6-10 BDBCA 11-15 DCBAA 16-20 BAABA 21-25 CCBBA 26-30 BBCCB 31-35 DDAAB
填空題
36.時間37.模式或邏輯模式38.黑盒39. 一對多或1 對多或一對n 或1:N 或1:n 或1:n 或
1:N 或一對m 或1:M 或1:m 或1:m 或1:N 40. 投影41.15 42. Into cursor 或Into cursor
cursorname 43. 頁面設置或列數44. 應用程序生成器45. 數據庫管理系統或DBMS 46. 聯接類型
或聯接條件47. CREATE TABLE 借閱(借書證號C(4),總編號C(6),借書日期D(8)) 或CREA TABL
借閱(借書證號C(4),總編號C(6),借書日期D(8)) 或CREATE TABLE 借閱(借書證號C(4),總編號
C(6),借書日期D) 或CREA TABL 借閱(借書證號C(4),總編號C(6),借書日期D) 48. 單價<=20 或
(出版單位="清華大學出版社" OR 出版單位="電子工業出版社") 或(出版單位="電子工業出版社" OR 出
版單位="清華大學出版社") 或(出版單位='清華大學出版社' OR 出版單位='電子工業出版社') 與(出版單
位="清華大學出版社" OR 出版單位="電子工業出版社") 或(出版單位='清華大學出版社‘) 49.
COUNT(DISTINCT 總編號) 或COUN(DISTINCT 總編號) 或COUNT(DIST 總編號) 或COUN(DIST
總編號)
第二套題
一、選擇題
1. 以下數據結構中不屬於線性數據結構的是______。
A、隊列B、線性表C、二叉樹D、棧
2. 在結構化方法中,用數據流程圖(DFD)作爲描述工具的軟件開發階段是______。
A、可行性分析B、需求分析C、詳細設計D、程序編碼
3. 結構化程序設計主要強調的是______。
A、程序的規模B、程序的易讀性C、程序的執行效率D、程序的可移植性
4. 在軟件生命週期中,能準確地確定軟件系統必須做什麼和必須具備哪些功能的階段是______。
A、概要設計B、詳細設計C、可行性分析D、需求分析
5. 下列關於棧的敘述中正確的是______。A、在棧中只能插入數據B、在棧中只能刪除數據
C、棧是先進先出的線性表D、棧是先進後出的線性表
6. 下面不屬於軟件設計原則的是______。A、抽象B、模塊化C、自底向上D、信息隱蔽
7. 對長度爲N 的線性表進行順序查找,在最壞情況下所需要的比較次數爲______。
A、N+1 B、N C、(N+1)/2 D、N/2
8. 視圖設計一般有3 種設計次序,下列不屬於視圖設計的是______。
A、自頂向下B、由外向內C、由內向外D、自底向上
9. 下列有關數據庫的描述,正確的是______。A、數據庫是一個DBF 文件B、數據庫是一個關係
C、數據庫是一個結構化的數據集合D、數據庫是一組文件
10. 下列說法中,不屬於數據模型所描述的內容的是______。
A、數據結構B、數據操作C、數據查詢D、數據約束
11. 在下面的Visual FoxPro 表達式中,運算結果是邏輯真的是______。
A、EMPTY(.NULL.) B、LIKE('acd','ac?') C、AT('a','123abc') D、EMPTY(SPACE(2))
12. 表達式VAL(SUBS("奔騰586",5,1))*Len("visual foxpro")的結果是______。
A、13.00 B、14.00 C、45.00 D、65.00
13. 以下關於自由表的敘述,正確的是______。
A、全部是用以前版本的FOXPRO(FOXBASE)建立的表
B、可以用Visual FoxPro 建立,但是不能把它添加到數據庫中
C、自由表可以添加到數據庫中,數據庫表也可以從數據庫中移出成爲自由表
D、自由表可以添加到數據庫中,但數據庫表不可從數據庫中移出成爲自由表
14. 下面關於數據環境和數據環境中兩個表之間的關係的陳述中,______是正確的。
A、數據環境是對象,關係不是對象B、數據環境不是對象,關係是對象
C、數據環境是對象,關係是數據環境中的對象D、數據環境和關係均不是對象
15. 在"報表設計器"中,可以使用的控件是______。
A、標籤、域控件和線條B、標籤、域控件和列表框
C、標籤、文本框和列表框D、佈局和數據源
16.用二維表數據來表示實體及實體之間聯繫的數據模型稱爲______。
A、實體--聯繫模型B、層次模型C、網狀模型D、關係模型
17. 用來指明覆選框的當前選中狀態的屬性是______。A、Selected B、Caption C、Value D、
ControlSource
18. 使用菜單操作方法打開一個在當前目錄下已經存在的查詢文件zgjk.qpr 後,在命令窗口生成的命
令是____。
A、OPEN QUERY zgjk.qpr B、MODIFY QUERY zgjk.qpr
C、DO QUERY zgjk.qpr D、CREATE QUERY zgjk.qpr
19. 可以伴隨着表的打開而自動打開的索引是______。
A、單一索引文件(IDX) B、複合索引文件(CDX)C、結構化複合索引文件D、非結構化複合索引文件
20. 在數據庫設計器中,建立兩個表之間的一對多聯繫是通過以下索引實現的______。
A、"一方"表的主索引或候選索引,"多方"表的普通索引
B、"一方"表的主索引,"多方"表的普通索引或候選索引
C、"一方"表的普通索引,"多方"表的主索引或候選索引
D、"一方"表的普通索引,"多方"表的候選索引或普通索引
21. 下列函數中函數值爲字符型的是______。A、DATE() B、TIME() C、YEAR() D、DATETIME()
22. 下面對控件的描述正確的是______。
A、用戶可以在組合框中進行多重選擇B、用戶可以在列表框中進行多重選擇
C、用戶可以在一個選項組中選中多個選項按鈕D、用戶對一個表單內的一組複選框只能選中其中一

23. 確定列表框內的某個條目是否被選定應使用的屬性是______。
A、Value B、ColumnCount C、ListCount D、Selected
24. 設有關係R1 和R2,經過關係運算得到結果S,則S 是______。
A、一個關係B、一個表單C、一個數據庫D、一個數組
25. DBAS 指的是______。A、數據庫管理系統B、數據庫系統C、數據庫應用系統D、數據庫服務
系統
26. 設X="ABC",Y="ABCD",則下列表達式中值爲.T.的是______。A、X=Y B、X==Y C、X$Y D、
AT(X,Y)=0
27. 在表結構中,邏輯型、日期型、備註型字段的寬度分別固定爲______。
A、3,8,10 B、1,6,4 C、1,8,任意D、1,8,4
28. 在標準SQL 中,建立視圖的命令是______。
A、CREATE SCHEMA 命令B、CREATE TABLE 命令C、CREATE VIEW 命令D、CREATE INDEX
命令
29. 有關SCAN 循環結構,敘述正確的是______。
A、SCAN 循環結構中的LOOP 語句,可將程序流程直接指向循環開始語句SCAN,首先判斷EOF()
函數的真假
B、在使用SCAN 循環結構時,必須打開某一個數據庫
C、SCAN 循環結構的循環體中必須寫有SKIP 語句
D、SCAN 循環結構,如果省略了子句\FOR 和WHILE 條件子句,則直接退出循環
30. 設有圖書管理數據庫:
圖書(總編號C(6),分類號C(8),書名C(16),作者C(6),出版單位C(20),單價N(6,2))
讀者(借書證號C(4),單位C(8),姓名C(6),性別C(2),職稱C(6),地址C(20))
借閱(借書證號C(4),總編號C(6),借書日期D(8))
對於圖書管理數據庫,要查詢所藏圖書中,各個出版社的圖書最高單價、平均單價和冊數,下面SQL
語句正確的是______。
SELECT 出版單位,______,______,______;
FROM 圖書管理!圖書______ 出版單位
A、MIN(單價) AVGAGE(單價) COUNT(*) GROUP BY B、MAX(單價) AVG(單價) COUNT(*) ORDER
BY
C、MAX(單價) AVG(單價) SUM(*) ORDER BY D、MAX(單價) AVG(單價) COUNT(*) GROUP BY
31. 設有圖書管理數據庫:
圖書(總編號C(6),分類號C(8),書名C(16),作者C(6),出版單位C(20),單價N(6,2))
讀者(借書證號C(4),單位C(8),姓名C(6),性別C(2),職稱C(6),地址C(20))
借閱(借書證號C(4),總編號C(6),借書日期D(8))
對於圖書管理數據庫,求CIE 單位借閱圖書的讀者的人數。
下面SQL 語句正確的是______。
SELECT ______ FROM 借閱WHERE;
借書證號_______
A、COUNT (DISTINCT 借書證號)
IN (SELECT 借書證號FROM 讀者WHERE 單位="CIE")
B、COUNT (DISTINCT 借書證號)
IN (SELECT 借書證號FROM 借閱WHERE 單位="CIE")
C、SUM (DISTINCT 借書證號)
IN (SELECT 借書證號FROM 讀者WHERE 單位="CIE")
D、SUM (DISTINCT 借書證號)
IN (SELECT 借書證號FOR 借閱WHERE 單位="CIE")
32. 查詢訂購單號(字符型,長度爲4)尾字符是"1"的錯誤命令是______。
A、SELECT * FROM 訂單WHERE SUBSTR(訂購單號,4)="1"
B、SELECT * FROM 訂單WHERE SUBSTR(訂購單號,4,1)="1"
C、SELECT * FROM 訂單WHERE "1"$訂購單號
D、SELECT * FROM 訂單WHERE RIGHT(訂購單號,1)="1"
33. 在關係模型中,爲了實現"關係中不允許出現相同元組"的約束應使用______。
A、臨時關鍵字B、主關鍵字C、外部關鍵字D、索引關鍵字
34. 根據"職工"項目文件生成emp_sys.exe 應用程序的命令是______。
A、BUILD EXE emp_sys FROM 職工B、BUILD APP emp_sys.exe FROM 職工
C、LIKE EXE emp_sys FROM 職工D、LIKE APP emp_sys.exe FROM 職工
35. 當前盤當前目錄下有數據庫:學院.dbc,其中有"教師"表和"學院"表。
"教師"表:
"學院"表:
有SQL 語句:
SELECT DISTINCT 系號FROM 教師WHERE 工資>=;
ALL (SELECT 工資FROM 教師WHERE 系號="02")
與如上語句等價的SQL 語句是______。
A、SELECT DISTINCT 系號FROM 教師WHERE 工資>=;
(SELECT MAX(工資) FROM 教師WHERE 系號="02")
B、SELECT DISTINCT 系號FROM 教師WHERE 工資>=;
(SELECT MIN(工資) FROM 教師WHERE 系號="02")
C、SELECT DISTINCT 系號FROM 教師WHERE 工資>=;
ANY(SELECT 工資FROM 教師WHERE 系號="02")
D、SELECT DISTINCT 系號FROM 教師WHERE 工資>=;
SOME (SELECT 工資FROM 教師WHERE 系號="02")
二、填空題
36. 若按功能劃分,軟件測試的方法通常分爲白盒測試方法和______測試方法。
37. 數據庫系統的三級模式分別爲______模式、內部級模式與外部級模式。
38. 在最壞情況下,冒泡排序的時間複雜度爲______。
39. 在面向對象方法中,信息隱蔽是通過對象的______性來實現的。
40. 關係模型的數據操縱即是建立在關係上的數據操縱,一般有______、增加、刪除和修改四種操作。
41.要把幫助文件設置爲複製到硬盤上的Foxhelp.chm 文件,需要在"選項"對話框的______選項卡上
設置。
42. TIME( )的返回值的數據類型是______類型。
43. 在定義字段有效性規則中,在規則框中輸入的表達式中類型是________。
44. 設計報表通常包括兩部分內容:______和佈局。
45. ______是指只有滿足聯接條件的記錄才包含在查詢結果中。
46. 設有圖書管理數據庫:
圖書(總編號C(6),分類號C(8),書名C(16),作者C(6),出版單位C(20),單價N(6,2))
讀者(借書證號C(4),單位C(8),姓名C(6),性別C(2),職稱C(6),地址C(20))
借閱(借書證號C(4),總編號C(6),借書日期D(8))
檢索書價在15 元至25 元(含15 元和25 元)之間的圖書的書名、作者、書價和分類號,結果按分類號
升序排序。
SELECT 書名,作者,單價,分類號FROM 圖書;
WHERE______;
ORDER BY______;
47. 設有如下關係表R、S 和T:
R(BH,XM,XB,DWH)
S(SWH,DWM)
T(BH,XM,XB,DWH)
實現R∪T 的SQL 語句是_______。
48. 設有如下關係表R:
R(NO,NAME,SEX,AGE,CLASS)
主關鍵字是NO
其中NO 爲學號,NAME 爲姓名,SEX 爲性別,AGE 爲年齡,CLASS 爲班號。寫出實現下列功能的
SQL 語句。
插入"95031"班學號爲30,姓名爲"鄭和"的學生記錄;_______。
49. 設有如下關係表R:
R(NO,NAME,SEX,AGE,CLASS)
主關鍵字是NO
其中NO 爲學號(數值型),NAME 爲姓名,SEX 爲性別,AGE 爲年齡,CLASS 爲班號。寫出實現下
列功能的SQL 語句。
刪除學號爲20 的學生記錄;______。
第二套題答案
1-5 CBBDD 6-10 CBBCC 11-15 DDCCA 16-20 DCBCA 21-25 BBDAC 26-30 CDCBD 31-35 ACBBA
36.黑盒37.概念或概念級38.n(n-1)/2 39.封裝40.查詢41.文件位置42.字符或C 43.邏輯表達式
44.數據源45.內部聯接
46. 單價BETWEEN 15 AND 25 或單價BETW 15 AND 25 或單價BETWE 15 AND 25 或單價
>=15 and 單價<=25 或單價>=15 and 單價=<25 或單價=>15 and 單價<=25 或單價=>15 and 單價
=<25 與分類號ASC 或分類號
47. SELECT * FROM R UNION SELECT * FROM T 或SELE * FROM R UNIO SELE * FROM T 或
SELECT * FROM R UNIO SELECT * FROM T 或SELE * FROM R UNION SELE * FROM T
48. INSERT INTO R(NO,NAME,CLASS) VALUES(30,"鄭和","95031") 或INSE INTO
R(NO,NAME,CLASS) VALUES(30,"鄭和","95031")
49. DELETE FROM R WHERE NO=20 或DELE FROM R WHERE NO=20 或DELE FROM R
WHER NO=20 或DELETE FROM R WHER NO=20
Oracle 面試題集錦-技術篇
1. 解釋冷備份和熱備份的不同點以及各自的優點
解答:熱備份針對歸檔模式的數據庫,在數據庫仍舊處於工作狀態時進行備份。而冷備份指在數據庫
關閉後,進行備份,適用於所有模式的數據庫。熱備份的優點在於當備份時,數據庫仍舊可以被使用並且
可以將數據庫恢復到任意一個時間點。冷備份的優點在於它的備份和恢復操作相當簡單,並且由於冷備份
的數據庫可以工作在非歸檔模式下,數據庫性能會比歸檔模式稍好。(因爲不必將archive log 寫入硬盤)
2. 你必須利用備份恢復數據庫,但是你沒有控制文件,該如何解決問題呢?
解答:重建控制文件,用帶backup control file 子句的recover 命令恢復
數據庫。
3. 如何轉換init.ora 到spfile?
解答:使用create spfile from pfile 命令.
4. 解釋data block , extent 和segment 的區別(這裏建議用英文術語)
解答:data block 是數據庫中最小的邏輯存儲單元。當數據庫的對象需要更多的物理存儲空間時,連
續的data block 就組成了extent . 一個數據庫對象
擁有的所有extents 被稱爲該對象的segment.
5. 給出兩個檢查表結構的方法
解答:1。DESCRIBE 命令
2. DBMS_METADATA.GET_DDL 包
6. 怎樣查看數據庫引擎的報錯
解答:alert log.
7. 比較truncate 和delete 命令
解答:兩者都可以用來刪除表中所有的記錄。區別在於:truncate 是DDL 操作,它移動HWK,不需
要rollback segment .而Delete 是DML 操作, 需要rollback segment 且花費較長時間.
8. 使用索引的理由
解答:快速訪問表中的data block
9. 給出在STAR SCHEMA 中的兩種表及它們分別含有的數據
解答:Fact tables 和dimension tables. fact table 包含大量的主要的信息而dimension tables 存放
對fact table 某些屬性描述的信息
10. FACT Table 上需要建立何種索引?
解答:位圖索引(bitmap index)
11. 給出兩種相關約束?
解答:主鍵和外鍵
12. 如何在不影響子表的前提下,重建一個母表
解答:子表的外鍵強制實效,重建母表,激活外鍵
13. 解釋歸檔和非歸檔模式之間的不同和它們各自的優缺點
解答:歸檔模式是指你可以備份所有的數據庫transactions 並恢復到任意一個時間點。非歸檔模式則
相反,不能恢復到任意一個時間點。但是非歸檔模式可以帶來數據庫性能上的少許提高.
14. 如何建立一個備份控制文件?
解答:Alter database backup control file to trace.
15. 給出數據庫正常啓動所經歷的幾種狀態?
解答:
STARTUP NOMOUNT – 數據庫實例啓動
STARTUP MOUNT - 數據庫裝載
STARTUP OPEN – 數據庫打開
16. 哪個column 可以用來區別V$視圖和GV$視圖?
解答: INST_ID 指明集羣環境中具體的某個instance 。
17. 如何生成explain plan?
解答:運行utlxplan.sql. 建立plan 表
針對特定SQL 語句,使用explain plan set statement_id = 'tst1' into plan_table
運行utlxplp.sql 或utlxpls.sql 察看explain plan
18. 如何增加buffer cache 的命中率?
解答:在數據庫較繁忙時,適用buffer cache advisory 工具,查詢v$db_cache_advice . 如果有必要
更改,可以使用alter system set db_cache_size 命令
19. ORA-01555 的應對方法?
解答:具體的出錯信息是snapshot too old within rollback seg , 通常可以通過
增大rollback seg 來解決問題。當然也需要察看一下具體造成錯誤的SQL 文本
20. 解釋$ORACLE_HOME 和$ORACLE_BASE 的區別?
解答:ORACLE_BASE 是oracle 的根目錄,ORACLE_HOME 是oracle 產品的目錄。
21. 如何判斷數據庫的時區?
解答:SELECT DBTIMEZONE FROM DUAL;
22. 解釋GLOBAL_NAMES 設爲TRUE 的用途
解答:GLOBAL_NAMES 指明聯接數據庫的方式。如果這個參數設置爲TRUE,在建立數據庫鏈接時就
必須用相同的名字連結遠程數據庫
23。如何加密PL/SQL 程序?
解答:WRAP
24. 解釋FUNCTION,PROCEDURE 和PACKAGE 區別
解答:function 和procedure 是PL/SQL 代碼的集合,通常爲了完成一個任務。procedure 不需要返
回任何值而function 將返回一個值在另一
方面,Package 是爲了完成一個商業功能的一組function 和proceudre 的集合
25. 解釋TABLE Function 的用途
解答:TABLE Function 是通過PL/SQL 邏輯返回一組紀錄,用於普通的表/視圖。他們也用於pipeline
和ETL 過程。
26. 舉出3 種可以收集three advisory statistics
解答:Buffer Cache Advice, Segment Level Statistics, Timed Statistics
27. Audit trace 存放在哪個oracle 目錄結構中?
解答:unix $ORACLE_HOME/rdbms/audit Windows the event viewer
28. 解釋materialized views 的作用
解答:Materialized views 用於減少那些彙總,集合和分組的信息的集合數量。它們通常適合於數據
倉庫和DSS 系統。
29. 當用戶進程出錯,哪個後臺進程負責清理它
解答: PMON
30. 哪個後臺進程刷新materialized views?
解答:The Job Queue Processes.
31. 如何判斷哪個session 正在連結以及它們等待的資源?
解答:V$SESSION / V$SESSION_WAIT
32. 描述什麼是redo logs
解答:Redo Logs 是用於存放數據庫數據改動狀況的物理和邏輯結構。可以用來修復數據庫.
33. 如何進行強制LOG SWITCH?
解答:ALTER SYSTEM SWITCH LOGFILE;
34. 舉出兩個判斷DDL 改動的方法?
解答:你可以使用Logminer 或Streams
35. Coalescing 做了什麼?
解答:Coalescing 針對於字典管理的tablespace 進行碎片整理,將臨近的小extents 合併成單個的大
extent.
36. TEMPORARY tablespace 和PERMANENT tablespace 的區別是?
解答:A temporary tablespace 用於臨時對象例如排序結構而permanent tablespaces 用來存儲那些
'真實'的對象(例如表,回滾段等)
37. 創建數據庫時自動建立的tablespace 名稱?
解答:SYSTEM tablespace.
38. 創建用戶時,需要賦予新用戶什麼權限才能使它聯上數據庫。
解答:CONNECT
39. 如何在tablespace 裏增加數據文件?
解答:ALTER TABLESPACE ADD DATAFILE SIZE
40. 如何變動數據文件的大小?
解答:ALTER DATABASE DATAFILE RESIZE ;
41. 哪個VIEW 用來檢查數據文件的大小?
解答: DBA_DATA_FILES
42. 哪個VIEW 用來判斷tablespace 的剩餘空間
解答:DBA_FREE_SPACE
43. 如何判斷誰往表裏增加了一條紀錄?
解答:auditing
44. 如何重構索引?
解答: ALTER INDEX REBUILD;
45. 解釋什麼是Partitioning(分區)以及它的優點。
解答:Partition 將大表和索引分割成更小,易於管理的分區。
46. 你剛剛編譯了一個PL/SQL Package 但是有錯誤報道,如何顯示出錯信息?
解答:SHOW ERRORS
47. 如何蒐集表的各種狀態數據?
解答: ANALYZE
The ANALYZE command.
48. 如何啓動SESSION 級別的TRACE
解答: DBMS_SESSION.SET_SQL_TRACE
ALTER SESSION SET SQL_TRACE = TRUE;
49. IMPORT 和SQL*LOADER 這2 個工具的不同點
解答:這兩個ORACLE 工具都是用來將數據導入數據庫的。
區別是:IMPORT 工具只能處理由另一個ORACLE 工具EXPORT 生成
的數據。而SQL*LOADER 可以導入不同的ASCII 格式的數據源
50。用於網絡連接的2 個文件?
解答: TNSNAMES.ORA and SQLNET.ORA
數據庫面試題目(一)
一:SQL tuning 類
1. 列舉幾種表連接方式
Answer:等連接(內連接)、非等連接、自連接、外連接(左、右、全)
Or hash join/merge join/nest loop(cluster join)/index join ??
ORACLE 8i,9i 表連接方法。
一般的相等連接: select * from a, b where a.id = b.id; 這個就屬於內連接。
對於外連接:
Oracle 中可以使用“(+) ”來表示,9i 可以使用LEFT/RIGHT/FULL OUTER JOIN
LEFT OUTER JOIN:左外關聯
SELECT e.last_name, e.department_id, d.department_name
FROM employees e
LEFT OUTER JOIN departments d
ON (e.department_id = d.department_id);
等價於
SELECT e.last_name, e.department_id, d.department_name
FROM employees e, departments d
WHERE e.department_id=d.department_id(+)
結果爲:所有員工及對應部門的記錄,包括沒有對應部門編號department_id 的員工記錄。
RIGHT OUTER JOIN:右外關聯
SELECT e.last_name, e.department_id, d.department_name
FROM employees e
RIGHT OUTER JOIN departments d
ON (e.department_id = d.department_id);
等價於
SELECT e.last_name, e.department_id, d.department_name
FROM employees e, departments d
WHERE e.department_id(+)=d.department_id
結果爲:所有員工及對應部門的記錄,包括沒有任何員工的部門記錄。
FULL OUTER JOIN:全外關聯
SELECT e.last_name, e.department_id, d.department_name
FROM employees e
FULL OUTER JOIN departments d
ON (e.department_id = d.department_id);
結果爲:所有員工及對應部門的記錄,包括沒有對應部門編號department_id 的員工記錄和沒有任何員工
的部門記錄。
ORACLE8i 是不直接支持完全外連接的語法,也就是說不能在左右兩個表上同時加上(+),下面是在
ORACLE8i 可以參考的完全外連接語法
select t1.id,t2.id from table1 t1,table t2 where t1.id=t2.id(+)
union
select t1.id,t2.id from table1 t1,table t2 where t1.id(+)=t2.id
連接類型
定義
圖示
例子
內連接
只連接匹配的行
select A.c1,B.c2 from A join B on A.c3 = B.c3;
左外連接
包含左邊表的全部行(不管右邊的表中是否存在與它們匹配的行)以及右邊表中全部匹配的行
select A.c1,B.c2 from A left join B on A.c3 = B.c3;
右外連接
包含右邊表的全部行(不管左邊的表中是否存在與它們匹配的行)以及左邊表中全部匹配的行
select A.c1,B.c2 from A right join B on A.c3 = B.c3;
全外連接
包含左、右兩個表的全部行,不管在另一邊的表中是否存在與它們匹配的行
select A.c1,B.c2 from A full join B on A.c3 = B.c3;
(theta)連接
使用等值以外的條件來匹配左、右兩個表中的行
select A.c1,B.c2 from A join B on A.c3 != B.c3;
交叉連接
生成笛卡爾積——它不使用任何匹配或者選取條件,而是直接將一個數據源中的每個行與另一個數據源的
每個行一一匹配
select A.c1,B.c2 from A,B;
2. 不借助第三方工具,怎樣查看sql 的執行計劃
I) 使用Explain Plan,查詢PLAN_TABLE;
EXPLAIN PLAN
SET STATEMENT_ID='QUERY1'
FOR
SELECT *
FROM a
WHERE aa=1;
SELECT operation, options, object_name, object_type, ID, parent_id
FROM plan_table
WHERE STATEMENT_ID = 'QUERY1'
ORDER BY ID;
II)SQLPLUS 中的SET TRACE 即可看到Execution Plan Statistics
SET AUTOTRACE ON;
3. 如何使用CBO,CBO 與RULE 的區別
IF 初始化參數OPTIMIZER_MODE = CHOOSE THEN --(8I DEFAULT)
IF 做過表分析
THEN 優化器Optimizer=CBO(COST); /*高效*/
ELSE
優化器Optimizer=RBO(RULE); /*高效*/
END IF;
END IF;
區別:
RBO 根據規則選擇最佳執行路徑來運行查詢。
CBO 根據表統計找到最低成本的訪問數據的方法確定執行計劃。
使用CBO 需要注意:
I) 需要經常對錶進行ANALYZE 命令進行分析統計;
II) 需要穩定執行計劃;
III)需要使用提示(Hint);
使用RULE 需要注意:
I) 選擇最有效率的表名順序
II) 優化SQL 的寫法;
在optimizer_mode=choose 時,如果表有統計信息(分區表外),優化器將選擇CBO,否則選RBO。
RBO 遵循簡單的分級方法學,使用15 種級別要點,當接收到查詢,優化器將評估使用到的要點數目,然後選
擇最佳級別(最少的數量)的執行路徑來運行查詢。
CBO 嘗試找到最低成本的訪問數據的方法,爲了最大的吞吐量或最快的初始響應時間,計算使用不同的執行
計劃的成本,並選擇成本最低的一個,關於表的數據內容的統計被用於確定執行計劃。
4. 如何定位重要(消耗資源多)的SQL
使用CPU 多的用戶session
SELECT a.SID, spid, status, SUBSTR (a.program, 1, 40) prog, a.terminal,a.SQL_TEXT, osuser, VALUE
/ 60 / 100 VALUE
FROM v$session a, v$process b, v$sesstat c
WHERE c.statistic# = 12 AND c.SID = a.SID AND a.paddr = b.addr
ORDER BY VALUE DESC;
select sql_text from v$sql
where disk_reads &gt; 1000 or (executions &gt; 0 and buffer_gets/executions &gt; 30000);
5. 如何跟蹤某個session 的SQL
利用TRACE 跟蹤
ALTER SESSION SET SQLTRACE ON;
COLUMN SQL format a200;
SELECT machine, sql_text SQL
FROM v$sqltext a, v$session b
WHERE address = sql_address
AND machine = '&A'
ORDER BY hash_value, piece;
exec dbms_system.set_sql_trace_in_session(sid,serial#,&amp;sql_trace);
select sid,serial# from v$session where sid = (select sid from v$mystat where rownum = 1);
exec dbms_system.set_ev(&amp;sid,&amp;serial#,&amp;event_10046,&amp;level_12,'');
6. SQL 調整最關注的是什麼
檢查系統的I/O 問題
sar-d 能檢查整個系統的iostat(IO statistics)
查看該SQL 的response time(db block gets/consistent gets/physical reads/sorts (disk))
7. 說說你對索引的認識(索引的結構、對dml 影響、對查詢影響、爲什麼提高查詢性能)
索引有B-TREE、BIT、CLUSTER 等類型。ORACLE 使用了一個複雜的自平衡B-tree 結構;通常來說,在
表上建立恰當的索引,查詢時會改進查詢性能。但在進行插入、刪除、修改時,同時會進行索引的修改,
在性能上有一定的影響。有索引且查詢條件能使用索引時,數據庫會先度取索引,根據索引內容和查詢條
件,查詢出ROWID,再根據ROWID 取出需要的數據。由於索引內容通常比全表內容要少很多,因此通過
先讀索引,能減少I/O,提高查詢性能。
b-tree index/bitmap index/function index/patitional index(local/global)索引通常能提高
select/update/delete 的性能,會降低insert 的速度,
8. 使用索引查詢一定能提高查詢的性能嗎?爲什麼
通常,通過索引查詢數據比全表掃描要快.但是我們也必須注意到它的代價.
索引需要空間來存儲,也需要定期維護, 每當有記錄在表中增減或索引列被修改時,索引本身也會被修改. 這
意味着每條記錄的INSERT,DELETE,UPDATE 將爲此多付出4,5 次的磁盤I/O. 因爲索引需要額外的存儲
空間和處理,那些不必要的索引反而會使查詢反應時間變慢.使用索引查詢不一定能提高查詢性能,索引範圍
查詢(INDEX RANGE SCAN)適用於兩種情況:
基於一個範圍的檢索,一般查詢返回結果集小於表中記錄數的30%宜採用;
基於非唯一性索引的檢索
索引就是爲了提高查詢性能而存在的,如果在查詢中索引沒有提高性能,只能說是用錯了索引,或者講是場合
不同
9. 綁定變量是什麼?綁定變量有什麼優缺點?
綁定變量是指在SQL 語句中使用變量,改變變量的值來改變SQL 語句的執行結果。
優點:使用綁定變量,可以減少SQL 語句的解析,能減少數據庫引擎消耗在SQL 語句解析上的資源。提
高了編程效率和可靠性。減少訪問數據庫的次數, 就能實際上減少ORACLE 的工作量。
缺點:經常需要使用動態SQL 的寫法,由於參數的不同,可能SQL 的執行效率不同;
綁定變量是相對文本變量來講的,所謂文本變量是指在SQL 直接書寫查詢條件,
這樣的SQL 在不同條件下需要反覆解析,綁定變量是指使用變量來代替直接書寫條件,查詢bind value 在
運行時傳遞,然後綁定執行。
優點是減少硬解析,降低CPU 的爭用,節省shared_pool
缺點是不能使用histogram,sql 優化比較困難
10. 如何穩定(固定)執行計劃
可以在SQL 語句中指定執行計劃。使用HINTS;
query_rewrite_enabled = true
star_transformation_enabled = true
optimizer_features_enable = 9.2.0
創建並使用stored outline
11. 和排序相關的內存在8i 和9i 分別怎樣調整,臨時表空間的作用是什麼
SORT_AREA_SIZE 在進行排序操作時,如果排序的內容太多,內存裏不能全部放下,則需要進行外部排
序,
此時需要利用臨時表空間來存放排序的中間結果。
8i 中sort_area_size/sort_area_retained_size 決定了排序所需要的內存, 如果排序操作不能在
sort_area_size 中完成,就會用到temp 表空間
9i 中如果workarea_size_policy=auto 時,
排序在pga 內進行,通常pga_aggregate_target 的1/20 可以用來進行disk sort;
如果workarea_size_policy=manual 時,排序需要的內存由sort_area_size 決定, 在執行order by/group
by/distinct/union/create index/index rebuild/minus 等操作時,如果在pga 或sort_area_size 中不能完成,排
序將在臨時表空間進行(disk sort),臨時表空間主要作用就是完成系統中的disk sort.
12. 存在表T(a,b,c,d),要根據字段c 排序後取第21—30 條記錄顯示,請給出sql
SELECT *
FROM (SELECT ROWNUM AS row_num, tmp_tab.*
FROM (SELECT a, b, c, d
FROM T
ORDER BY c) tmp_tab
WHERE ROWNUM <= 30)
WHERE row_num >= 20
ORDER BY row_num;
create table t(a number(,b number(,c number(,d number();
/
begin
for i in 1 .. 300 loop
insert into t values(mod(i,2),i/2,dbms_random.value(1,300),i/4);
end loop;
end;
/
select * from (select c.*,rownum as rn from (select * from t order by c desc) c) where rn between 21 and
30;
/
select * from (select * from test order by c desc) x where rownum &lt; 30
minus
select * from (select * from test order by c desc) y where rownum &lt; 20 order by 3 desc
相比之minus 性能較差
二:數據庫基本概念類
1 Pctused and pctfree 表示什麼含義有什麼作用
pctused 與pctfree 控制數據塊是否出現在freelist 中, pctfree 控制數據塊中保留用於update 的空間,當數
據塊中的free space 小於pctfree 設置的空間時,該數據塊從freelist 中去掉,當塊由於dml 操作free space
大於pct_used 設置的空間時,該數據庫塊將被添加在freelist 鏈表中。
2 簡單描述tablespace / segment / extent / block 之間的關係
tablespace: 一個數據庫劃分爲一個或多個邏輯單位,該邏輯單位成爲表空間;每一個表空間可能包含一個
或多個Segment;
Segments: Segment 指在tablespace 中爲特定邏輯存儲結構分配的空間。每一個段是由一個或多個extent
組成。包括數據段、索引段、回滾段和臨時段。
Extents: 一個extent 由一系列連續的Oracle blocks 組成.ORACLE 爲通過extent 來給segment 分配空
間。
Data Blocks:Oracle 數據庫最小的I/O 存儲單位,一個data block 對應一個或多個分配給data file 的操
作系統塊。
table 創建時,默認創建了一個data segment,每個data segment 含有min extents 指定的extents 數,每個
extent 據據表空間的存儲參數分配一定數量的blocks
3 描述tablespace 和datafile 之間的關係
一個表空間可包含一個或多個數據文件。表空間利用增加或擴展數據文件擴大表空間,表空間的大小爲組
成該表空間的數據文件大小的和。一個datafile 只能屬於一個表空間;
一個tablespace 可以有一個或多個datafile,每個datafile 只能在一個tablespace 內, table 中的數據,通過
hash 算法分佈在tablespace 中的各個datafile 中,tablespace 是邏輯上的概念,datafile 則在物理上儲存了數
據庫的種種對象。
4 本地管理表空間和字典管理表空間的特點,ASSM 有什麼特點
本地管理表空間:(9i 默認)空閒塊列表存儲在表空間的數據文件頭。
特點:減少數據字典表的競爭,當分配和收縮空間時會產生回滾,不需要合併。
字典管理表空間:(8i 默認)空閒塊列表存儲在數據庫中的字典表裏.
特點:片由數據字典管理,可能造成字典表的爭用。存儲在表空間的每一個段都會有不同的存儲字句,需
要合併相鄰的塊;
本地管理表空間(Locally Managed Tablespace 簡稱LMT)
8i 以後出現的一種新的表空間的管理模式,通過位圖來管理表空間的空間使用。字典管理表空間
(Dictionary-Managed Tablespace 簡稱DMT)
8i 以前包括以後都還可以使用的一種表空間管理模式,通過數據字典管理表空間的空間使用。動段空間管
理(ASSM),它首次出現在Oracle920 裏有了ASSM,鏈接列表freelist 被位圖所取代,它是一個二進制
的數組,
能夠迅速有效地管理存儲擴展和剩餘區塊(free block),因此能夠改善分段存儲本質,ASSM 表空間上創
建的段還有另外一個稱呼叫Bitmap Managed Segments(BMB 段)。
5 回滾段的作用是什麼
回滾段用於保存數據修改前的映象,這些信息用於生成讀一致性數據庫信息、在數據庫恢復和Rollback 時
使用。一個事務只能使用一個回滾段。
事務回滾:當事務修改表中數據的時候,該數據修改前的值(即前影像)會存放在回滾段中,當用戶回滾
事務(ROLLBACK)時,ORACLE 將會利用回滾段中的數據前影像來將修改的數據恢復到原來的值。
事務恢復:當事務正在處理的時候,例程失敗,回滾段的信息保存在undo 表空間中,ORACLE 將在下次
打開數據庫時利用回滾來恢復未提交的數據。
讀一致性:當一個會話正在修改數據時,其他的會話將看不到該會話未提交的修改。當一個語句正在執行
時,該語句將看不到從該語句開始執行後的未提交的修改(語句級讀一致性)
當ORACLE 執行SELECT 語句時,ORACLE 依照當前的系統改變號(SYSTEM CHANGE NUMBER-SCN)
來保證任何前於當前SCN 的未提交的改變不被該語句處理。可以想象:當一個長時間的查詢正在執行時,
若其他會話改變了該查詢要查詢的某個數據塊,ORACLE 將利用回滾段的數據前影像來構造一個讀一致性
視圖
6 日誌的作用是什麼
日誌文件(Log File)記錄所有對數據庫數據的修改,主要是保護數據庫以防止故障,以及恢復數據時使用。
其特點如下:
a)每一個數據庫至少包含兩個日誌文件組。每個日誌文件組至少包含兩個日誌文件成員。
b)日誌文件組以循環方式進行寫操作。
c)每一個日誌文件成員對應一個物理文件。
記錄數據庫事務,最大限度地保證數據的一致性與安全性
重做日誌文件:含對數據庫所做的更改記錄,這樣萬一出現故障可以啓用數據恢復,一個數據庫至少需要兩
個重做日誌文件
歸檔日誌文件:是重做日誌文件的脫機副本,這些副本可能對於從介質失敗中進行恢復很必要。
7 SGA 主要有那些部分,主要作用是什麼
系統全局區(SGA):是ORACLE 爲實例分配的一組共享緩衝存儲區,用於存放數據庫數據和控制信息,
以實現對數據庫數據的管理和操作。
SGA 主要包括:
a)共享池(shared pool) :用來存儲最近執行的SQL 語句和最近使用的數據字典的數據。
b)數據緩衝區(database buffer cache):用來存儲最近從數據文件中讀寫過的數據。
c)重作日誌緩衝區(redo log buffer):用來記錄服務或後臺進程對數據庫的操作。
另外在SGA 中還有兩個可選的內存結構:
d)Java pool: 用來存儲Java 代碼。
e)Large pool: 用來存儲不與SQL 直接相關的大型內存結構。備份、恢復使用。
GA:db_cache/shared_pool/large_pool/java_pool
db_cache: 數據庫緩存(Block Buffer)對於Oracle 數據庫的運轉和性能起着非常關鍵的作用,它佔據
Oracle 數據庫SGA(系統共享內存區)的主要部分。Oracle 數據庫通過使用LRU 算法,將最近訪問的數
據塊存放到緩存中,從而優化對磁盤數據的訪問.
shared_pool: 共享池的大小對於Oracle 性能來說都是很重要的。共享池中保存數據字典高速緩衝和完全
解析或編譯的的PL/SQL 塊和SQL 語句及控制結構
large_pool: 使用MTS 配置時,因爲要在SGA 中分配UGA 來保持用戶的會話,就是用Large_pool 來保
持這個會話內存使用RMAN 做備份的時候,要使用Large_pool 這個內存結構來做磁盤I/O 緩存器
java_pool: 爲java procedure 預備的內存區域,如果沒有使用java proc,java_pool 不是必須的
8 Oracle 系統進程主要有哪些,作用是什麼
數據寫進程(DBWR):負責將更改的數據從數據庫緩衝區高速緩存寫入數據文件
日誌寫進程(LGWR):將重做日誌緩衝區中的更改寫入在線重做日誌文件
系統監控(SMON): 檢查數據庫的一致性如有必要還會在數據庫打開時啓動數據庫的恢復
進程監控(PMON): 負責在一個Oracle 進程失敗時清理資源
檢查點進程(CKPT):負責在每當緩衝區高速緩存中的更改永久地記錄在數據庫中時,更新控制文件和數據文
件中的數據庫狀態信息。
歸檔進程(ARCH):在每次日誌切換時把已滿的日誌組進行備份或歸檔
恢復進程(RECO): 保證分佈式事務的一致性,在分佈式事務中,要麼同時commit,要麼同時rollback;
作業調度器(CJQ ): 負責將調度與執行系統中已定義好的job,完成一些預定義的工作.
三:備份恢復類
1 備份如何分類
邏輯備份:exp/imp 指定表的邏輯備份
物理備份:
熱備份:alter tablespace begin/end backup;
冷備份:脫機備份(database shutdown)
RMAN 備份
full backup/incremental backup(累積/差異)
物理備份
物理備份是最主要的備份方式。用於保證數據庫在最小的數據庫丟失或沒有數據丟失的情況下得到恢復。
冷物理
冷物理備份提供了最簡單和最直接的方法保護數據庫因物理損壞丟失。建議在以下幾種情況中使用。
對一個已經存在大最數據量的數據庫,在晚間數據庫可以關閉,此時應用冷物理備份。
對需對數據庫服務器進行升級,(如更換硬盤),此時需要備份數據庫信息,並在新的硬盤中恢復這些數
據信息,建議採用冷物理備份。
熱物理
主要是指備份過程在數據庫打開並且用戶可以使用的情況下進行。需要執行熱物理備份的情況有:
由於數據庫性質要求不間斷工作,因而此時只能採用熱物理備份。
由於備份的要求的時間過長,而數據庫只能短時間關閉時。
邏輯備份(EXP/IMP)
邏輯備份用於實現數據庫對象的恢復。但不是基於時間點可完全恢復的備份策略。只能作爲聯機備份和脫
機備份的一種補充。
完全邏輯備份
完全邏輯備份是將整個數據庫導出到一個數據庫的格式文件中,該文件可以在不同的數據庫版本、操作系
統和硬件平臺之間進行移植。
指定表的邏輯備份
通過備份工具,可以將指定的數據庫表備份出來,這可以避免完全邏輯備份所帶來的時間和財力上的浪費。
2 歸檔是什麼含義
關於歸檔日誌:Oracle 要將填滿的在線日誌文件組歸檔時,則要建立歸檔日誌(archived redo log)。其對
數據庫備份和恢復有下列用處:
數據庫後備以及在線和歸檔日誌文件,在操作系統和磁盤故障中可保證全部提交的事物可被恢復。
在數據庫打開和正常系統使用下,如果歸檔日誌是永久保存,在線後備可以進行和使用。
數據庫可運行在兩種不同方式下:NOARCHIVELOG 方式或ARCHIVELOG 方式
數據庫在NOARCHIVELOG 方式下使用時,不能進行在線日誌的歸檔,
數據庫在ARCHIVELOG 方式下運行,可實施在線日誌的歸檔
歸檔是歸檔當前的聯機redo 日誌文件。
SVRMGR> alter system archive log current;
數據庫只有運行在ARCHIVELOG 模式下,並且能夠進行自動歸檔,纔可以進行聯機備份。有了聯機備份
纔有可能進行完全恢復。
3 如果一個表在2004-08-04 10:30:00 被drop,在有完善的歸檔和備份的情況下,如何恢復
9i 新增的FLASH BACK 應該可以;
Logminer 應該可以找出DML。
有完善的歸檔和備份,先歸檔當前數據,然後可以先恢復到刪除的時間點之前,把DROP 的表導出來,然
後再恢復到最後歸檔時間;
手工拷貝回所有備份的數據文件
Sql〉startup mount;
sql〉alter database recover automatic until time '2004-08-04:10:30:00';
sql〉alter database open resetlogs;
4 rman 是什麼,有何特點
RMAN(Recovery Manager)是DBA 的一個重要工具,用於備份、還原和恢復oracle 數據庫, RMAN 可以
用來備份和恢復數據庫文件、歸檔日誌、控制文件、系統參數文件,也可以用來執行完全或不完全的數據庫
恢復。
RMAN 有三種不同的用戶接口:COMMAND LINE 方式、GUI 方式(集成在OEM 中的備份管理器)、
API 方式(用於集成到第三方的備份軟件中)。
具有如下特點:
1)功能類似物理備份,但比物理備份強大N 倍;
2)可以壓縮空塊;
3)可以在塊水平上實現增量;
4)可以把備份的輸出打包成備份集,也可以按固定大小分割備份集;
5)備份與恢復的過程可以自動管理;
6)可以使用腳本(存在Recovery catalog 中)
7)可以做壞塊監測
5 standby 的特點
備用數據庫(standby database):ORACLE 推出的一種高可用性(HIGH AVAILABLE)數據庫方案,在主
節點與備用節點間通過日誌同步來保證數據的同步,備用節點作爲主節點的備份,可以實現快速切換與災
難性恢復,從920 開始,還開始支持物理與邏輯備用服務器。
9i 中的三種數據保護模式分別是:
1)、MAXIMIZE PROTECTION :最大數據保護與無數據分歧,LGWR 將同時傳送到備用節點,在主節點
事務確認之前,備用節點也必須完全收到日誌數據。如果網絡不好,引起LGWR 不能傳送數據,將引起嚴
重的性能問題,導致主節點DOWN 機。
2)、MAXIMIZE AVAILABILITY :無數據丟失模式,允許數據分歧,允許異步傳送。
正常情況下運行在最大保護模式,在主節點與備用節點的網絡斷開或連接不正常時,自動切換到最大性能
模式,主節點的操作還是可以繼續的。在網絡不好的情況下有較大的性能影響。
3)、MAXIMIZE PERFORMANCE:這種模式應當可以說是從8i 繼承過來的備用服務器模式,異步傳送,
無數據同步檢查,可能丟失數據,但是能獲得主節點的最大性能。9i 在配置DATA GUARD 的時候默認就
是MAXIMIZE PERFORMANCE
6 對於一個要求恢復時間比較短的系統(數據庫50G,每天歸檔5G),你如何設計備份策略
數據庫比較大邏輯備份沒什麼必要,每天歸檔5G,每週三/週六自動歸檔10G,每月RMAN 歸檔全庫。應
該有standby。
rman/每月一號level 0 每週末/週三level 1 其它每天level 2
四:系統管理類
1. 對於一個存在系統性能的系統,說出你的診斷處理思路
ü 做statspack 收集系統相關信息瞭解系統大致情況/確定是否存在參數設置不合適的地方/查看
top 5 event/查看top sql 等
ü 查v$system_event/v$session_event/v$session_wait 從v$system_event 開始,確定需要什麼資源
(db file sequential read)等,深入研究v$session_event,確定等待事件涉及的會話,從v$session_wait 確
定詳細的資源爭用情況(p1-p3 的值:file_id/block_id/blocks 等)
ü 通過v$sql/v$sqltext/v$sqlarea 表確定disk_reads、(buffer_gets/executions)值較大的SQL
2. 列舉幾種診斷IO、CPU、性能狀況的方法
top uptime vmstat iostat statspack sql_trace/tkprof
查v$system_event/v$session_event/v$session_wait
查v$sqlarea(disk_reads 或buffer_gets/executions 較大的SQL)
或者第三方的監視工具,TOAD 就不錯。
3. 對statspack 有何認識
認識不深。僅限瞭解。StapSpack 是Oracle 公司提供的一個收集數據庫運行性能指標的軟件包。可以做數
據庫健康檢查報告。
StapSpack 是Oracle 公司提供的一個收集數據庫運行性能指標的軟件包,該軟件包從8i 起,在9i、10g
都有顯著的增強
該軟件包的輔助表(存儲相關參數與收集的性能指標的表)由最初的25 個增長到43 個
收集級別參數由原來的3 個(0、5、10)增加到5 個(0、5、6、7、10)
通過分析收集的性能指標,數據庫管理員可以詳細地瞭解數據庫目前的運行情況,對數據庫實例、等待事
件、SQL 等進行優化調整
利用statspack 收集的snapshot,可以統計製作數據庫的各種性能指標的統計趨勢圖表。
4. 如果系統現在需要在一個很大的表上創建一個索引,你會考慮那些因素,如何做以儘量減小對應用
的影響
可以先表分析一下,然後測試創建索引前後對應用的性能影響;
需要考慮的是該索引列不經常更新,不是有很多重複值的情況時, 在大表中使用索引特別有效. 創建的索引
可以跟數據表分不同表空間存儲。
在系統比較空閒時nologging 選項(如果有dataguard 則不可以使用nologging)
大的sort_ared_size 或pga_aggregate_target 較大
5. 對raid10 和raid5 有何認識
RAID 10(或稱RAID 1+0)與RAID 0+1 不同,它是用硬盤驅動器先組成RAID 1 陣列,然後在RAID 1 陣
列之間再組成RAID 0 陣列。
RAID 10 模式同RAID 0+1 模式一樣具有良好的數據傳輸性能,但卻比RAID 0+1 具有更高的可靠性。RAID
10 陣列的實際容量爲M×n/2,磁盤利用率爲50%。RAID 10 也需要至少4 個硬盤驅動器構成,因而價格
昂貴。
RAID 10 的可靠性同RAID 1 一樣,但由於RAID 10 硬盤驅動器之間有數據分割,因而數據傳輸性能優良。
RAID 5 與RAID 3 很相似,不同之處在於RAID 5 的奇偶校驗信息也同數據一樣被分割保存到所有的硬盤
驅動器,而不是寫入一個指定的硬盤驅動器,從而消除了單個奇偶校驗硬盤驅動器的瓶頸問題。RAID 5 磁
盤陣列的性能比RAID 3 有所提高,但仍然需要至少3 塊硬盤驅動器。其實際容量爲M×(n-1),磁盤利用率
爲(n-1)/n 。
五:綜合隨意類
1. 你最擅長的是oracle 哪部分?
pl/sql 及sql 優化
2. 喜歡oracle 嗎?喜歡上論壇嗎?或者偏好oracle 的哪一部分?
喜歡。PL/SQL 比較得心應手。
3. 隨意說說你覺得oracle 最有意思的部分或者最困難的部分
我對數據庫的備份/恢復和性能調優經驗明顯不足,自然覺得有些困難。
基於ORACLE 的研究應該是個寬廣的領域,所以我覺得還是有意思的。
4. 爲何要選擇做DBA 呢?
我對數據庫的備份/恢復和性能調優經驗明顯不足,主要是缺乏環境和交流。
因此,算不上什麼DBA。不過因此我更需要這樣的機會。
不過就整個ORACLE 來說,一直從事與它相關的工作,感情還是頗深的。放棄可惜。而且就技術本身而
言我覺得自己還是有學習和創新的能力,它的諸如數據倉庫,數據挖掘之類的領域也很廣。
數據庫面試題目(二)
六:Databases Questions & Answers
1. What are two methods of retrieving SQL?
2. What cursor type do you use to retrieve multiple recordsets?
3. What action do you have to perform before retrieving data from the next result set of a stored
procedure?
Move the cursor down one row from its current position. A ResultSet cursor is initially positioned before
the first row. Before you can get to the first row, you would need to Move the cursor down by one row
( For ex: in java the first call to next makes the first row the current row; the second call makes the second
row the current row, and so on).
4. What is the basic form of a SQL statement to read data out of a table?
SELECT * FROM table_name;
5. What structure can you have the database make to speed up table reads?
The question is not correct. "What structure can you have the database make to speed up table reads?"
It is not clear what exactly the term "structure" means in this case. Follow the rules of DB tuning we have
to:
1) properly use indexes ( different types of indexes)
2) properly locate different DB objects across different tablespaces, files and so on.
3) Create a special space (tablespace) to locate some of the data with special datatypes( for example
CLOB, LOB and ...)
6. What is a "join"?
Joins merge the data of two related tables into a single result set, presenting a denormalized view of the
data.
7. What is a "constraint"?
A constraint allows you to apply simple referential integrity checks to a table. There are 5 primary
types of constraints that are currently supported by SQL Server:
PRIMARY/UNIQUE - enforces uniqueness of a particular table column.
DEFAULT - specifies a default value for a column in case an insert operation does not provide one.
FOREIGN KEY - validates that every value in a column exists in a column of another table.
CHECK - checks that every value stored in a column is in some specified list
NOT NULL - is a constraint which does not allow values in the specific column to be null. And also it
is the only constraint which is not a table level constraint.
8. What is a "primary key"?
Primary Key is a type of a constraint enforcing uniqueness and data integrity for each row of a table. All
columns participating in a primary key constraint must possess the NOT NULL property.
9. What is a "functional dependency"? How does it relate to database table design?
What functional dependence in the context of a database means is that: Assume that a table exists in the
database called TABLE with a composite primary key (A, B) and other non-key attributes (C, D, E).
Functional dependency in general, would mean that any non-key attribute - C D or E being dependent on
the primary key (A and B) in our table here.
Partial functional dependency, on the other hand, is another corollary of the above, which states that
all non-key attributes - C D or E - if dependent on the subset of the primary key (A and B) and not on it as
a whole.
Example :
----------
Fully Functional Dependent : C D E --> A B
Partial Functional dependency : C --> A, D E --> B
Hope that helps!
10. What is a "trigger"?
A trigger is a database object directly associated with a particular table. It fires whenever a specific
statement/type of statement is issued against that table. The types of statements are insert, update,
delete and query statements. Basically, trigger is a set of SQL statements that execute in response to a
data modification/retrieval event on a table.
Other than table triggers there are also schema and database triggers. These can be made to fire when
new objects are created, when a user logs in, when the database shutdown etc. Table level triggers can
be classified into row and statement level triggers and those can be further broken down into before and
after triggers. Before triggers can modify data.
11. What is "index covering" of a query?
A nonclustered index that includes (or covers) all columns used in a query is called a covering index.
When SQL server can use a nonclustered index to resolve the query, it will prefer to scan the index rather
than the table, which typically takes fewer data pages. If your query uses only columns included in the
index, then SQL server may scan this index to produce the desired output.
12. What is a SQL view?
View is a precomplied SQL query which is used to select data from one or more tables. A view is like a
table but it doesn't physically take any space. View is a good way to present data in a particular format if
you use that query quite often.
View can also be used to restrict users from accessing the tables directly.
A view otherwise known as a virtual table is a mere window over the base tables in the database. This
helps us gain a couple of advantages:
1) Inherent security exposing only the data that is needed to be shown to the end user
2) Views are updateable based on certain conditions. For example, updates can only be directed to one
underlying table of the view. After modification if the rows or columns don't comply with the conditions
that the view was created with, those rows disappear from the view. You could use the CHECK OPTION
with the view definition, to make sure that any updates to make the rows invalid will not be permitted to
run.
3) Views are not materialized (given a physical structure) in a database. Each time a view is queried the
definition stored in the database is run against the base tables to retrieve the data. One exception to this
is to create a clustered index on the view to make it persistent in the database. Once you create a
clustered index on the view, you can create any number of non-clustered indexes on the view.
13. 存儲過程和函數的區別
存儲過程是用戶定義的一系列sql 語句的集合,涉及特定表或其它對象的任務,用戶可以調用存儲過程,
而函數通常是數據庫已定義的方法,它接收參數並返回某種類型的值並且不涉及特定用戶表。
14. 事務是什麼?
事務是作爲一個邏輯單元執行的一系列操作,一個邏輯工作單元必須有四個屬性,稱爲ACID(原子性、一
致性、隔離性和持久性)屬性,只有這樣才能成爲一個事務:
原子性:事務必須是原子工作單元;對於其數據修改,要麼全都執行,要麼全都不執行。
一致性:事務在完成時,必須使所有的數據都保持一致狀態。在相關數據庫中,所有規則都必須應用於事
務的修改,以保持所有數據的完整性。事務結束時,所有的內部數據結構(如B 樹索引或雙向鏈表)都必須
是正確的。
隔離性:由併發事務所作的修改必須與任何其它併發事務所作的修改隔離。事務查看數據時數據所處的狀
態,要麼是另一併發事務修改它之前的狀態,要麼是另一事務修改它之後的狀態,事務不會查看中間狀態
的數據。這稱爲可串行性,因爲它能夠重新裝載起始數據,並且重播一系列事務,以使數據結束時的狀態
與原始事務執行的狀態相同。
持久性:事務完成之後,它對於系統的影響是永久性的。該修改即使出現系統故障也將一直保持。
15. 遊標的作用?如何知道遊標已經到了最後?
遊標用於定位結果集的行,通過判斷全局變量@@FETCH_STATUS 可以判斷是否到了最後,通常此變量
不等於0 表示出錯或到了最後。
16. 觸發器分爲事前觸發和事後觸發,這兩種觸發有和區別。語句級觸發和行級觸發有何區別。
事前觸發器運行於觸發事件發生之前,而事後觸發器運行於觸發事件發生之後。通常事前觸發器可以獲取
事件之前和新的字段值。
語句級觸發器可以在語句執行前或後執行,而行級觸發在觸發器所影響的每一行觸發一次。
17. SQL Server 常用測試題(1)
問題描述:
爲管理崗位業務培訓信息,建立3 個表:
S (S#,SN,SD,SA) S#,SN,SD,SA 分別代表學號、學員姓名、所屬單位、學員年齡
C (C#,CN ) C#,CN 分別代表課程編號、課程名稱
SC ( S#,C#,G ) S#,C#,G 分別代表學號、所選修的課程編號、學習成績
1. 使用標準SQL 嵌套語句查詢選修課程名稱爲’稅收基礎’的學員學號和姓名
--實現代碼:
SELECT SN,SD FROM S
WHERE [S#] IN(SELECT [S#] FROM C,SC WHERE C.[C#]=SC.[C#] AND CN=N'稅收基礎')
2. 使用標準SQL 嵌套語句查詢選修課程編號爲’C2’的學員姓名和所屬單位
--實現代碼:
SELECT S.SN,S.SD FROM S,SC
WHERE S.[S#]=SC.[S#] AND SC.[C#]='C2'
3. 使用標準SQL 嵌套語句查詢不選修課程編號爲’C5’的學員姓名和所屬單位
--實現代碼:
SELECT SN,SD FROM S
WHERE [S#] NOT IN(SELECT [S#] FROM SC WHERE [C#]='C5')
4. 使用標準SQL 嵌套語句查詢選修全部課程的學員姓名和所屬單位
--實現代碼:
SELECT SN,SD FROM S
WHERE [S#] IN( SELECT [S#] FROM SC RIGHT JOIN
C ON SC.[C#]=C.[C#] GROUP BY [S#]
HAVING COUNT(*)=COUNT([S#]))
5. 查詢選修了課程的學員人數
--實現代碼:
SELECT 學員人數=COUNT(DISTINCT [S#]) FROM SC
6. 查詢選修課程超過5 門的學員學號和所屬單位
--實現代碼:
SELECT SN,SD FROM S
WHERE [S#] IN(
SELECT [S#] FROM SC
GROUP BY [S#]
HAVING COUNT(DISTINCT [C#])>5)
18. SQL Server 常用測試題(2)
問題描述:
已知關係模式:
S (SNO,SNAME) 學生關係。SNO 爲學號,SNAME 爲姓名
C (CNO,CNAME,CTEACHER) 課程關係。CNO 爲課程號,CNAME 爲課程名,CTEACHER 爲任課教

SC(SNO,CNO,SCGRADE) 選課關係。SCGRADE 爲成績
1. 找出沒有選修過“李明”老師講授課程的所有學生姓名
--實現代碼:
SELECT SNAME FROM S
WHERE NOT EXISTS(
SELECT * FROM SC,C WHERE SC.CNO=C.CNO AND CNAME='李明' AND SC.SNO=S.SNO)
2. 列出有二門以上(含兩門)不及格課程的學生姓名及其平均成績
--實現代碼:
SELECT S.SNO,S.SNAME,AVG_SCGRADE=AVG(SC.SCGRADE)
FROM S,SC,(
SELECT SNO FROM SC WHERE SCGRADE<60 GROUP BY SNO
HAVING COUNT(DISTINCT CNO)>=2)A WHERE S.SNO=A.SNO AND SC.SNO=A.SNO
GROUP BY S.SNO,S.SNAME
3. 列出既學過“1”號課程,又學過“2”號課程的所有學生姓名
--實現代碼:
SELECT S.SNO,S.SNAME
FROM S,(SELECT SC.SNO FROM SC,C
WHERE SC.CNO=C.CNO AND C.CNAME IN('1','2')
GROUP BY SNO
HAVING COUNT(DISTINCT CNO)=2
)SC WHERE S.SNO=SC.SNO
4. 列出“1”號課成績比“2”號同學該門課成績高的所有學生的學號
--實現代碼:
SELECT S.SNO,S.SNAME
FROM S,(
SELECT SC1.SNO
FROM SC SC1,C C1,SC SC2,C C2
WHERE SC1.CNO=C1.CNO AND C1.NAME='1'
AND SC2.CNO=C2.CNO AND C2.NAME='2'
AND SC1.SCGRADE>SC2.SCGRADE
)SC WHERE S.SNO=SC.SNO
5. 列出“1”號課成績比“2”號課成績高的所有學生的學號及其“1”號課和“2”號課的成績
--實現代碼:
SELECT S.SNO,S.SNAME,SC.[1 號課成績],SC.[2 號課成績]
FROM S,(
SELECT SC1.SNO,[1 號課成績]=SC1.SCGRADE,[2 號課成績]=SC2.SCGRADE
FROM SC SC1,C C1,SC SC2,C C2
WHERE SC1.CNO=C1.CNO AND C1.NAME='1'
AND SC2.CNO=C2.CNO AND C2.NAME='2'
AND SC1.SCGRADE>SC2.SCGRADE
)SC WHERE S.SNO=SC.SNO
19. Question 1:Can you use a batch SQL or store procedure to calculating the Number of Days in a
Month
找出當月的天數
select datepart(dd,dateadd(dd,-1,dateadd(mm,1,cast(cast(year(getdate()) as
varchar)+'-'+cast(month(getdate()) as varchar)+'-01' as datetime))))
20. Question2:Can you use a SQL statement to calculating it!
How can I print "10 to 20" for books that sell for between $10 and $20,"unknown" for books whose price
is null, and "other" for all other prices?
select bookid,bookname,price=case when price is null then 'unknown'
when price between 10 and 20 then '10 to 20' else price end
from books
21. Question3:Can you use a SQL statement to finding duplicate values!
How can I find authors with the same last name?
You can use the table authors in datatabase pubs. I want to get the result as below:
Output:
au_lname number_dups
---------------------------------------- -----------
Ringer 2
(1 row(s) affected)
Answer 3
select au_lname,number_dups=count(1) from authors group by au_lname
22. Question4:Can you create a cross-tab report in my SQL Server!
How can I get the report about sale quality for each store and each quarter and the total sale quality for
each quarter at year 1993?
You can use the table sales and stores in datatabase pubs.
Table Sales record all sale detail item for each store. Column store_id is the id of each store, ord_date is
the order date of each sale item, and column qty is the sale qulity. Table stores record all store
information.
I want to get the result look like as below:
Output:
stor_name Total Qtr1 Qtr2 Qtr3 Qtr4
---------------------------------------- ----------- ----------- ----------- ----------- -----------
Barnum's 50 0 50 0 0
Bookbeat 55 25 30 0 0
Doc-U-Mat: Quality Laundry and Books 85 0 85 0 0
Fricative Bookshop 60 35 0 0 25
Total 250 60 165 0 25
Answer 4:用動態SQL 實現
23. Question5: The Fastest Way to Recompile All Stored Procedures
I have a problem with a database running in SQL Server 6.5 (Service Pack 4). We moved the database
(object transfer) from one machine to another last night, and an error (specific to a stored procedure) is
cropping up. However, I can't tell which procedure is causing it. Permissions are granted in all of our
stored procedures; is there a way from the isql utility to force all stored procedures to recompile?
Tips: sp_recompile can recomplie a store procedure each time
Answer 5:在執行存儲過程時,使用with recompile 選項強制編譯新的計劃;使用sp_recompile 系統存儲
過程強制在下次運行時進行重新編譯
24. Question6: How can I add row numbers to my result set?
In database pubs, have a table titles , now I want the result shown as below,each row have a row number,
how can you do that?
Result:
line-no title_id
----------- --------
1 BU1032
2 BU1111
3 BU2075
4 BU7832
5 MC2222
6 MC3021
7 MC3026
8 PC1035
9 PC8888
10 PC9999
11 PS1372
12 PS2091
13 PS2106
14 PS3333
15 PS7777
16 TC3218
17 TC4203
18 TC7777
Answer 6:
--SQL 2005 的寫法
select row_number() as line_no ,title_id from titles
--SQL 2000 的寫法
select line_no identity(int,1,1),title_id into #t from titles
select * from #t
drop table #t
25. Question 7: Can you tell me what the difference of two SQL statements at performance of
execution?
Statement 1:
if NOT EXISTS ( select * from publishers where state = 'NY')
begin
SELECT 'Sales force needs to penetrate New York market'
end
else
begin
SELECT 'We have publishers in New York'
end
Statement 2:
if EXISTS ( select * from publishers where state = 'NY')
begin
SELECT 'We have publishers in New York'
end
else
begin
SELECT 'Sales force needs to penetrate New York market'
end
Answer 7:不同點:執行時的事務數,處理時間,從客戶端到服務器端傳送的數據量大小
26. Question8: How can I list all California authors regardless of whether they have written a book?
In database pubs, have a table authors and titleauthor , table authors has a column state, and titleauhtor
have books each author written.
CA behalf of california in table authors.
Answer 8:
select * from authors where state='CA'
27. Question9: How can I get a list of the stores that have bought both 'bussiness' and 'mod_cook' type
books?
In database pubs, use three table stores,sales and titles to implement this requestment. Now I want to
get the result as below:
stor_id stor_name
------- ----------------------------------------
...
7896 Fricative Bookshop
...
...
...
Answer 9:
select distinct a.stor_id, a.stor_name from stores a,sales b,titles c
where a.stor_id=b.stor_id and b.title_id=c.title_id and c.type='business' and
exists(select 1 from sales k,titles g where stor_id=b.stor_id
and k.title_id=g.title_id and g.type='mod_cook')
28. Question10: How can I list non-contignous data?
In database pubs, I create a table test using statement as below, and I insert several row as below
create table test
( id int primary key )
go
insert into test values (1 )
insert into test values (2 )
insert into test values (3 )
insert into test values (4 )
insert into test values (5 )
insert into test values (6 )
insert into test values (8 )
insert into test values (9 )
insert into test values (11)
insert into test values (12)
insert into test values (13)
insert into test values (14)
insert into test values (18)
insert into test values (19)
go
Now I want to list the result of the non-contignous row as below,how can I do it?
Missing after Missing before
------------- --------------
6 8
9 11
...
Answer 10:
select id from test t where not exists(select 1 from test where id=t.id+1)
or not exists(select 1 from test where id=t.id-1)
29. Question11: How can I list all book with prices greather than the average price of books of the
same type?
In database pubs, have a table named titles , its column named price mean the price of the book, and
another named type mean the type of books.
Now I want to get the result as below:
type title price
------------ -------------------------------------------------------------------------------- ---------------------
business The Busy Executive's Database Guide 19.9900
...
...
...
...
Answer 11:
select a.type,a.title,a.price from titles a,
(select type,price=avg(price) from titles group by type)b
where a.type=b.type and a.price>b.price
試題點評:通覽整個試題,我們不難發現,這份試題是針對SQL Server 數據庫人員的。而從難度分
析上來看,這份試題也屬於同類試題中比較難的了。之所以說它難,首先是限定時間的全英文試題;其次,
儘管這份試題主要是考覈開發能力,但卻涉及到了算法的選擇和性能的調優;最後,這份試題還夾進了SQL
Server 數據庫的升級問題。因此,綜上所述,我們估計這是一家從事程序外包工作的外企招聘後臺開發或
與後臺開發相關的SQL Server 高級程序員的試題。
-DBA 數據庫管理員JAVA 程序員架構師必看

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章