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