oracle面试上机题,Oracle面试题附带答案
1.你要對操縱Oracle數(shù)據(jù)庫中的數(shù)據(jù)。下列哪個選項表示Oracle中select語句的功能,
并且不需要使用子查詢(C)
A.可以用select語句改變Oracle中的數(shù)據(jù)
B.可以用select語句刪除Oracle中的數(shù)據(jù)
C.可以用select語句和另一個表的內(nèi)容生成一個表
D.可以用select語句對表截斷
2. 你要在Oracle中定義SQL查詢。下列哪個數(shù)據(jù)庫對象不能直接從select語句中引用(C)
A.表?????? B.序列?????? C.索引???? D.視圖
3. ?用下列代碼塊回答問題:
SQL>?select?______(-45)?as?output?from?dual;
OUTPUT
------
-45
下列哪個單行函數(shù)無法產(chǎn)生這個輸出(A)
A.abs()?????????B.ceil()??????????C.floor()????????D.round()
4. ?SQL?*Plus中發(fā)出的下列語句:
SQL>?select?ceil(-97.342),
2 ?floor(-97.342),
3??round(-97.342),
4??trunc(-97.342)
5??from?dual;
下列哪個函數(shù)不返回結果-97(B)
A.ceil()??????????B.floor()??????????C.round()??????????D.trunc()
5. ?你要定義外連接,下列哪個選項正確描述了外連接語句?( D )
A.由于外連接操作允許一個表中有NULL值,因此連接這些表時不必指定相等性比較。
B.在表A與B的外連接語句中,如果不管B表有無相應記錄,都要顯示表A的所有行,則可以使用右外連接。
C.在表A與B的外連接語句中,如果不管A表有無相應記錄,都要顯示表B的所有行,則可以使用左外連接。
D.盡管外連接操作允許一個表中有NULL值,但連接這些表時仍要指定相等性比較
6. 對數(shù)據(jù)庫運行下列哪個group by查詢時會從Oracle產(chǎn)生錯誤?( C )
A.select deptno, job, sum(sal) from emp group by job, deptno;
B.select sum(sal), deptno, job from emp group by job, deptno;
C.select deptno, job, sum(sal) from emp;
D. select deptno, sum(sal), job from emp group by job, deptno;
7.若account表中有14條記錄,則用戶執(zhí)行了以下操作,結果是( A )
declare
cursor mycur is select * from emp;
begin
open mycur;
dbms_output.put_line(mycur%rowcount);
close mycur;
end;
A.0
B.14
C.7
D.編譯不通過,無法執(zhí)行。
8. 數(shù)據(jù)庫系統(tǒng)的核心是__B____。
A、數(shù)據(jù)模型B、數(shù)據(jù)庫管理系統(tǒng)C、軟件工具D、數(shù)據(jù)庫
9. 下列敘述中正確的是___C__。
A、數(shù)據(jù)庫是一個獨立的系統(tǒng),不需要操作系統(tǒng)的支持
B、數(shù)據(jù)庫設計是指設計數(shù)據(jù)庫管理系統(tǒng)
C、數(shù)據(jù)庫技術的根本目標是要解決數(shù)據(jù)共享的問題
D、數(shù)據(jù)庫系統(tǒng)中,數(shù)據(jù)的物理結構必須與邏輯結構一致
10. SQL 語句中修改表結構的命令是_C___。
A、MODIFY TABLE B、MODIFY STRUCTURE C、ALTER TABLE
D、ALTER STRUCTURE
11. 如果要創(chuàng)建一個數(shù)據(jù)組分組報表,第一個分組表達式是"部門",第二個分組表達
式是"性別",第三個分組表達式是"基本工資",當前索引的索引表達式應當是___B__。
A、部門+性別+基本工資
B、部門+性別+STR(基本工資)
C、STR(基本工資)+性別+部門
D、性別+部門+STR(基本工資)
12. 數(shù)據(jù)庫DB、數(shù)據(jù)庫系統(tǒng)DBS、數(shù)據(jù)庫管理系統(tǒng)DBMS 三者之間的關系是___A___。
A、DBS 包括DB 和DBMS
B、DBMS 包括DB 和DBS
C、DB 包括DBS 和DBMS
D、DBS 就是DB,也就是DBMS
13. 定位第一條記錄上的命令是__A____。
A、GO TOP B、GO BOTTOM C、GO 6 D、SKIP
14. 在關系模型中,實現(xiàn)"關系中不允許出現(xiàn)相同的元組"的約束是通過__B____。
A、候選鍵B、主鍵C、外鍵D、超鍵
15. 只有滿足聯(lián)接條件的記錄才包含在查詢結果中,這種聯(lián)接為__C____。
A、左聯(lián)接
B、右聯(lián)接
C、內(nèi)部聯(lián)接
D、完全聯(lián)接
16. 索引字段值不唯一,應該選擇的索引類型為____B__。
A、主索引
B、普通索引
C、候選索引
D、唯一索引
17. 10. 從數(shù)據(jù)庫中刪除表的命令是___A__。
A、DROP TABLE
B、ALTER TABLE
C、DELETE TABLE
D、USE? TABLE
18. DELETE FROM S WHERE 年齡>60 語句的功能是___B__。
A、從S 表中徹底刪除年齡大于60 歲的記錄
B、S 表中年齡大于60 歲的記錄被加上刪除標記
C、刪除S 表
D、刪除S 表的年齡列
19. SELECT-SQL 語句是__B___。
A、選擇工作區(qū)語句
B、數(shù)據(jù)查詢語句
C、選擇標準語句
D、數(shù)據(jù)修改語句
20. SQL 語言是__C___語言。
A、層次數(shù)據(jù)庫
B、網(wǎng)絡數(shù)據(jù)庫
C、關系數(shù)據(jù)庫
D、非數(shù)據(jù)庫
21. 在SQL 中,刪除視圖用__C____。
A、DROP SCHEMA 命令
B、CREATE TABLE 命令
C、DROP VIEW 命令
D、DROP INDEX 命令
22. 在數(shù)據(jù)庫設計器中,建立兩個表之間的一對多聯(lián)系是通過以下索引實現(xiàn)的
__? A____。
A、"一方"表的主索引或候選索引,"多方"表的普通索引
B、"一方"表的主索引,"多方"表的普通索引或候選索引
C、"一方"表的普通索引,"多方"表的主索引或候選索引
D、"一方"表的普通索引,"多方"表的候選索引或普通索引
23. 下列函數(shù)中函數(shù)值為字符型的是___B___。
A、DATE()
B、TIME()
C、YEAR()
D、DATETIME()
24. 將查詢結果放在數(shù)組中應使用___A___短語。
A、INTO CURSOR B、TO ARRAY C、INTO TABLE D、INTO ARRAY
簡答題
1. 如何判斷游標是否到了末尾。
答: cursor_name%notfound
2.寫一個‘游標’并使用它。
答:
Declare
cursor cursor_name is
Select real_name from account;
Name varchar2(10);
Begin
open cursor_name;
loop
fetch cursor into name;
exit when cursor_name%notfound;
sql…
end loop;
close cursor_name;
end;
3. 使用存儲過程訪問數(shù)據(jù)庫比直接用SQL語句訪問有哪些優(yōu)點?
答:
存儲過程是預編譯過的,執(zhí)行時勿須編譯,執(zhí)行速度更快;存儲過程封裝了一批SQL語句,便于維護數(shù)據(jù)的完整性與一致性;可以實現(xiàn)代碼的復用。
4.簡述數(shù)據(jù)庫的第一范式,第二范式,第三范式。并舉例
答:
第一范式:(1NF)無重復的列。
第二范式:(2NF)屬性完全依賴于主鍵。
第三范式:(3NF)屬性不依賴于其它非主屬性。
5. 試述事務的概念及事務的四個特性。
答:
事務是用戶定義的一個數(shù)據(jù)庫操作序列,這些操作要么全做要么全不做,是一個不可分割的工作單位。事務具有四個特性:原子性(Atomicity)、一致性(Consistency)、隔離性(Isolation)和持續(xù)性(Durability)。這個四個特性也簡稱為ACID特性。
原子性:事務是數(shù)據(jù)庫的邏輯工作單位,事務中包括的諸操作要么都做,要么都不做。一致性:事務執(zhí)行的結果必須是使數(shù)據(jù)庫從一個一致性狀態(tài)變到另一個一致性狀態(tài)。隔離性:一個事務的執(zhí)行不能被其他事務干擾。即一個事務內(nèi)部的操作及使用的數(shù)據(jù)對其他并發(fā)事務是隔離的,并發(fā)執(zhí)行的各個事務之間不能互相干擾。
持續(xù)性:持續(xù)性也稱永久性(Permanence),指一個事務一旦提交,它對數(shù)據(jù)庫中數(shù)據(jù)的改變就應該是永久性的。接下來的其他操作或故障不應該對其執(zhí)行結果有任何影響。
6. Truncate與?delete的區(qū)別?
答:
delete一般用于刪除少量記錄的操作,而且它是要使用回滾段并且要進行顯示的提交事務。而truncate則使用于大量刪除數(shù)據(jù),而且隱式提交事務,其速度要比使用delete快的。
7. Truncate與?delete的區(qū)別?
答:
DDL表示數(shù)據(jù)定義語言,在ORACLE中主要包括CREATE,ALTER,DROP;
DML表示數(shù)據(jù)操作語言,主要的DML有SELECT,INSERT,UPDATE,DELETE。
8.如何獲取系統(tǒng)時間。
答:
select sysdate from dual;
編程題
1、一個日期判斷的sql 語句?
請取出tb_send 表中日期(SendTime 字段) 為當天的所有記錄?(SendTime 字段為
datetime 型,包含日期與時間)
答:select * from tb where datediff(dd,SendTime,getdate())=0
2.一道SQL 語句面試題,關于group by 表內(nèi)容:
2005-05-09 勝
2005-05-09 勝
2005-05-09 負
2005-05-09 負
2005-05-10 勝
2005-05-10 負
2005-05-10 負
如果要生成下列結果, 該如何寫sql 語句?
勝負
2005-05-09 2 2
2005-05-10 1 2
答:
create table #tmp(rq varchar(10),shengfu nchar(1))
insert into #tmp values('2005-05-09','勝')
insert into #tmp values('2005-05-09','勝')
insert into #tmp values('2005-05-09','負')
insert into #tmp values('2005-05-09','負')
insert into #tmp values('2005-05-10','勝')
insert into #tmp values('2005-05-10','負')
insert into #tmp values('2005-05-10','負')
1)select rq, sum(case when shengfu='勝' then 1 else 0 end)'勝',sum(case when shengfu='負'
then 1 else 0 end)'負' from #tmp group by rq
2) select N.rq,N.勝,M.負from (
select rq,勝=count(*) from #tmp where shengfu='勝'group by rq)N inner join
(select rq,負=count(*) from #tmp where shengfu='負'group by rq)M on N.rq=M.rq
3)select a.col001,a.a1 勝,b.b1 負from
(select col001,count(col001) a1 from temp1 where col002='勝' group by col001) a,
(select col001,count(col001) b1 from temp1 where col002='負' group by col001) b
where a.col001=b.col001
3、請用SQL 語句實現(xiàn):從TestDB 數(shù)據(jù)表中查詢出所有月份的發(fā)生額都比101 科目相應月份的發(fā)生額高的科目。請注意:TestDB 中有很多科目,都有1-12 月份的發(fā)生額。
AccID:科目代碼,Occmonth:發(fā)生額月份,DebitOccur:發(fā)生額。
數(shù)據(jù)庫名:JcyAudit,數(shù)據(jù)集:Select * from TestDB
答:select a.*
from TestDB a
,(select Occmonth,max(DebitOccur) Debit101ccur from TestDB where AccID='101' group
by Occmonth) b
where a.Occmonth=b.Occmonth and a.DebitOccur>b.Debit101ccur
4.有一個兩維表,M行N列,請用Oracle的存儲過程,轉(zhuǎn)置成N行M列。
答:???? CREATE OR REPLACE PROCEDURE row_col_convert(p_tabname IN VARCHAR2,view_name IN VARCHAR2 DEFAULT 'v_tmp')
AUTHID CURRENT_USER
AS
sqlstr VARCHAR2(4000);
sqlstr1 varchar2(500):='select ''??'' newid';
cur sys_refcursor;
id_col VARCHAR2(30);
id varchar2(100);
BEGIN
if trim(p_tabname) is null then return; end if;
SELECT column_name INTO id_col FROM user_tab_cols WHERE table_name=upper(p_tabname) AND column_id=1;
OPEN cur FOR 'select to_char('||id_col||') from '||p_tabname||' order by 1';
loop
fetch cur INTO ID;
exit WHEN cur%notfound;
sqlstr1:=sqlstr1||',max(decode('||id_col||','''||id||''',to_char(??)))"'||id||'"';
END loop;
sqlstr1:=sqlstr1||' from '||p_tabname;
FOR cur1 IN(SELECT column_name FROM user_tab_cols WHERE table_name=upper(p_tabname) AND column_id>1) loop
sqlstr:=sqlstr||chr(10)||'union all '||REPLACE(sqlstr1,'??',cur1.column_name);
END loop;
execute immediate 'create or replace view '||view_name||' as '||substr(sqlstr,12);
END;
5.請根據(jù)以下的描述,編寫存儲過程 sp_terminal
用戶資料表:serv( serv_id number(10), pro_id number(10), user_type varchar2(30), terminal_name varchar2(30) )
其中,serv_id 為用戶標識,是serv表的主鍵,prod_id為產(chǎn)品標識;user_type為用戶類型;terminal_name為終端類型
終端類型臨時表:terminal(serv_id number(10),terminal_name varchar2(30))
初始化的情況下,serv表的serv_id,prod_id,user_type字段是已知的,terminal_name字段是空的,現(xiàn)在主要根據(jù)prod_id,user_type字段的值來更新terminal_name字段
更新條件為:
當條件滿足“prod_id = 1 and user_type='A'“時,terminal_name更新為‘固話’
當條件滿足”prod_id = 1 and user_type='B'“時,terminal_name更新為‘小靈通’
當條件滿足”prod_id = 2“時,terminal_name更新為‘寬帶’
當條件滿足”user_type=‘C’“時,terminal_name更新為‘CDMA’
以上條件均不滿足時,terminal_name更新為? -1;
答:
create or replace procedure sp_terminal
is
begin
update serv t
set t.terminal_name = case when t.pro_id = 1 and t.user_type = 'A' then '固話'
when t.pro_id = 1 and t.user_type = 'B' then '小靈通'
when t.pro_id = 2 then '寬帶'
when t.user_type = 'C' then 'CDMA'
else '-1'
end;
update terminal a
set a.terminal_name = (select t.terminal_name
from serv t
where t.serv_id = a.serv_id)
where exists (select 'x'
from serv t
where t.serv_id = a.serv_id);
end;
總結
以上是生活随笔為你收集整理的oracle面试上机题,Oracle面试题附带答案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mysql sql语句面试经典50题_常
- 下一篇: SQL岗位30个面试题,SQL面试问题及