首頁 資料庫 Oracle 整理Oracle面試題目及答案

整理Oracle面試題目及答案

Jul 31, 2020 pm 03:36 PM
oracle面試題

整理Oracle面試題目及答案

一下題目根據此表變換

1、表:table1(FId,Fclass,Fscore),用最高效最簡單的SQL列出各班成績最高的列表,顯示班級,成績兩個字段。

 select stu_class, max(stu_score) from core group by stu_class ;
登入後複製

2、有一個表table1有兩個欄位FID,Fno,字都非空,寫一個SQL語句列出該表中一個FID對應多個不同的Fno的紀錄。

select t2.* from table1 t1, table1 t2 where t1.fid = t2.fid and t1.fno <> t2.fno;
登入後複製

三種寫法:

select * from core co1 where co1.STU_CLASS in ( select co.STU_CLASS from CORE co group by co.STU_CLASS  having count(co.STU_CLASS) >1); 
 select DISTINCT c2.* from core c1 ,core c2 where c1.STU_CLASS = c2.STU_CLASS and c1.STU_SCORE <> c2.STU_SCORE; SELECT * FROM core c1 where 1=1 and  EXISTS (select 1 from core c2 where c1.STU_CLASS = c2.STU_CLASS and c1.STU_SCORE <> c2.STU_SCORE);
登入後複製

 3、有員工表empinfo 

( 
Fempno varchar2(10) not null pk, 
Fempname varchar2(20) not null, 
Fage number not null, 
Fsalary number not null 
);
登入後複製

假如資料量很大約1000萬條;寫一個你認為最有效率的SQL,用一個SQL計算以下四種人: 

fsalary>9999 and fage > 35 
fsalary>9999 and fage < 35 
fsalary <9999 and fage > 35 
fsalary <9999 and fage < 35
登入後複製

每種員工的數量; 

select sum(case when fsalary > 9999 and fage > 35then 1else 0end) as "fsalary>9999_fage>35",sum(case when fsalary > 9999 and fage < 35then 1else 0end) as "fsalary>9999_fage<35",sum(case when fsalary < 9999 and fage > 35then 1else 0end) as "fsalary<9999_fage>35",sum(case when fsalary < 9999 and fage < 35then 1else 0end) as "fsalary<9999_fage<35"from empinfo;
登入後複製
select sum(case when stu_score < 60 then 1 else 0 end ) as "60分以下人数" ,sum(case when stu_score > 60 and stu_score <= 70 then 1 else 0 end ) as "60到70分人数" ,sum(case when stu_score > 70 and stu_score <= 80 then 1 else 0 end ) as "70到80分人数" ,sum(case when stu_score > 80 and stu_score <= 100 then 1 else 0 end ) as "80分以上人数" 
from core;
登入後複製

4、表A欄位如下 
#month person income 
月份人員收入 
要求用一個SQL語句(注意是一個)的處所有人(不區分人員)每個月及上月和下個月的總收入 
要求列表輸出為 
月份當月收入上月收入下個月收入 

MONTHS PERSON INCOME
---------- ---------- ----------200807 mantisXF 5000200806 mantisXF2 3500200806 mantisXF3 3000200805 mantisXF1 2000200805 mantisXF6 2200200804 mantisXF7 1800200803 8mantisXF 4000200802 9mantisXF 4200200802 10mantisXF 3300200801 11mantisXF 4600200809 11mantisXF 6800
登入後複製

11 rows selected

 months, (incomes), (prev_months),  (( ), ), ), lag(incomes) (  months), )  prev_months, decode(lead(months) (  months), to_char(add_months(to_date(months, ), ), ), lead(incomes) (  months), )  next_months  ( months, (income)  incomes  a   months) aa) aaagroup (INCOMES) (PREV_MONTHS) (NEXT_MONTHS)
登入後複製

5,表B 
C1 c2 
2005-01- 01 1 
2005-01-01 3 
2005-01-02 5

要求的處資料 
2005-01-01 4 
2005-01-02 5 
#合計9 
試用一個Sql語句完成。

select nvl(to_char(t02,&#39;yyyy-mm-dd&#39;),&#39;合计&#39;),sum(t01)from test 
group by rollup(t02)
登入後複製

6,資料庫1,2,3 範式的概念與理解。

關係資料庫設計之時是要遵守一定的規則的。特別是資料庫設計範式 
簡單介紹1NF(第一範式),2NF(第二範式),3NF(第三範式),
第一範式(1NF):在關係模式R中的每一個具體在關係r中,如果每個屬性值都是不可再分的最小資料單位,則稱R為第一範式的關係。

範例:如職工號,姓名,電話號碼組成一個表格(一個人可能有一個辦公室電話和一個家裡電話號碼) 規範成為1NF有三種方法: 
  一是重複儲存職工號碼和姓名。這樣,關鍵字只能是電話號碼。 
  二是職工號碼為關鍵字,電話號碼分為單位電話和住宅電話兩個屬性 
  三是職工號碼為關鍵字,但強制每筆記錄只能有一個電話號碼。 
  以上三種方法,第一種方法最不可取,依實際情況選取後兩種情況。 

 第二範式(2NF):如果關係模式R(U,F)中的所有非主屬性都完全依賴任一個候選關鍵字,則稱關係R 是屬於第二範式的。 
  例:選課關係 SCI(SNO,CNO,GRADE,CREDIT)其中SNO為學號, CNO為課程號,GRADEGE 為成績,CREDIT 為學分。上述 
條件,關鍵字為組合關鍵字(SNO,CNO) 
  在應用中使用上述關係模式有下列問題: 

a.資料冗餘,假設同一門課程由40個學生選修,學分就重複40次。 
b.更新異常,若調整了某課程的學分,對應的元組CREDIT值都要更新,有可能會出現同一門課學分不同。 
c.插入異常,如計畫開新課,由於沒人選修,沒有學號關鍵字,只能等有人選修才能把課程、學分存入。 
d.刪除異常,若學生已經結業,從目前資料庫刪除選修記錄。某些門課程新生尚未選修,則此門課程及學分記錄無法保存。 

  原因:非關鍵字屬性CREDIT只函數依賴CNO,也就是CREDIT部分依賴組合關鍵字(SNO,CNO)而不是完全依賴。 

  解決方法:分成兩個關係模式 SC1(SNO,CNO,GRADE),C2(CNO,CREDIT)。新關係包括兩個關係模式,它們之間透過SCN中
的外關鍵字CNO相聯繫,需要時再進行自然聯接,恢復了原來的關係 
 第三範式(3NF):如果關係模式R(U,F)中的所有非主屬性對任何候選關鍵字都不存在傳遞信賴,則稱關係R是屬於第三範式的。 

例:如S1(SNO,SNAME,DNO,DNAME,LOCATION) 各屬性分別代表學號, 
姓名,所在系,系名稱,繫地址。 
關鍵字SNO決定各個屬性。由於是單一關鍵字,沒有部分依賴的問題,肯定是2NF。但這段關係肯定有大量的冗餘,有關學生所在的幾個
屬性DNO,DNAME,LOCATION將重複存儲,插入,刪除和修改時也將產生類似以上例的情況。 
原因:關係中存在傳遞依賴所造成的。即SNO -> DNO。而DNO -> SNO卻不存在,DNO -> LOCATION, 因此關鍵遼 SNO 對 LOCATIO

N 函数决定是通过传递依赖 SNO -> LOCATION 实现的。也就是说,SNO不直接决定非主属性LOCATION。
解决目地:每个关系模式中不能留有传递依赖。
解决方法:分为两个关系 S(SNO,SNAME,DNO),D(DNO,DNAME,LOCATION)
注意:关系S中不能没有外关键字DNO。否则两个关系之间失去联系。

7,简述oracle行触发器的变化表限制表的概念和使用限制,行触发器里面对这两个表有什么限制。

变化表mutating table
被DML语句正在修改的表
需要作为DELETE CASCADE参考完整性限制的结果进行更新的表也是变化的

限制:对于Session本身,不能读取正在变化的表

限制表constraining table
需要对参考完整性限制执行读操作的表

限制:如果限制列正在被改变,那么读取或修改会触发错误,但是修改其它列是允许的。

8、oracle临时表有几种。
临时表和普通表的主要区别有哪些,使用临时表的主要原因是什么?

在Oracle中,可以创建以下两种临时表:
a。会话特有的临时表

CREATE GLOBAL TEMPORARY ( ) 
ON COMMIT PRESERVE ROWS;
登入後複製

b。事务特有的临时表

CREATE GLOBAL TEMPORARY ( ) 
ON COMMIT DELETE ROWS; 
CREATE GLOBAL TEMPORARY TABLE MyTempTable
登入後複製

所建的临时表虽然是存在的,但是你试一下insert 一条记录然后用别的连接登上去select,记录是空的,明白了吧。
下面两句话再贴一下:

  • ON COMMIT DELETE ROWS 说明临时表是事务指定,每次提交后ORACLE将截断表(删除全部行)

  • ON COMMIT PRESERVE ROWS 说明临时表是会话指定,当中断会话时ORACLE将截断表。

9,怎么实现:使一个会话里面执行的多个过程函数或触发器里面都可以访问的全局变量的效果,并且要实现会话间隔离?

--个人理解就是建立一个包,将常量或所谓的全局变量用包中的函数返回出来就可以了,摘抄一短网上的解决方法Oracle数据库程序包中的变量,在本程序包中可以直接引用,但是在程序包之外,则不可以直接引用。对程序包变量的存取,可以为每个变量配套相应的存储过程<用于存储数据>和函数<用于读取数据>来实现。 
  
  3.2 实例 
  --定义程序包   create or replace package PKG_System_Constant is   
    C_SystemTitle nVarChar2(100):=&#39;测试全局程序变量&#39;; --定义常数     --获取常数<系统标题>     Function FN_GetSystemTitle 
     Return nVarChar2; 
  
    G_CurrentDate Date:=SysDate; --定义全局变量     --获取全局变量<当前日期>     Function FN_GetCurrentDate 
     Return Date; 
    --设置全局变量<当前日期>     Procedure SP_SetCurrentDate 
     (P_CurrentDate In Date); 
  End PKG_System_Constant; 
  /   create or replace package body PKG_System_Constant is     --获取常数<系统标题>     Function FN_GetSystemTitle 
     Return nVarChar2 
     Is      Begin        Return C_SystemTitle; 
     End FN_GetSystemTitle; 
  
    --获取全局变量<当前日期>     Function FN_GetCurrentDate 
     Return Date 
     Is      Begin        Return G_CurrentDate; 
     End FN_GetCurrentDate; 
    --设置全局变量<当前日期>     Procedure SP_SetCurrentDate 
     (P_CurrentDate In Date) 
     Is      Begin        G_CurrentDate:=P_CurrentDate; 
     End SP_SetCurrentDate; 
  End PKG_System_Constant; 
  /     
  3.3 测试 
  --测试读取常数   Select PKG_System_Constant.FN_GetSystemTitle From Dual;    
  --测试设置全局变量   Declare 
  Begin     PKG_System_Constant.SP_SetCurrentDate(To_Date(&#39;2001.01.01&#39;,&#39;yyyy.mm.dd&#39;)); 
  End; 
  /   --测试读取全局变量   Select PKG_System_Constant.FN_GetCurrentDate From Dual;
登入後複製

10,aa,bb表都有20个字段,且记录数量都很大,aa,bb表的X字段(非空)上有索引,
请用SQL列出aa表里面存在的X在bb表不存在的X的值,请写出认为最快的语句,并解译原因。

select aa.x from aa
where not exists (select &#39;x&#39; from bb where aa.x = bb.x) ;
登入後複製

以上语句同时使用到了aa中x的索引和的bb中x的索引

11,简述SGA主要组成结构和用途?

SGA是Oracle为一个实例分配的一组共享内存缓冲区,它包含该实例的数据和控制信息。SGA在实例启动时被自动分配,当实例关闭时被收回。数据库的所有数据操作都要通过SGA来进行。 
SGA中内存根据存放信息的不同,可以分为如下几个区域:
a.Buffer Cache:存放数据库中数据库块的拷贝。它是由一组缓冲块所组成,这些缓冲块为所有与该实例相链接的用户进程所共享。缓冲块的数目由初始化参数DB_BLOCK_BUFFERS确定,缓冲块的大小由初始化参数DB_BLOCK_SIZE确定。大的数据块可提高查询速度。它由DBWR操作。 
b. 日志缓冲区Redo Log Buffer:存放数据操作的更改信息。它们以日志项(redo entry)的形式存放在日志缓冲区中。当需要进行数据库恢复时,日志项用于重构或回滚对数据库所做的变更。日志缓冲区的大小由初始化参数LOG_BUFFER确定。大的日志缓冲区可减少日志文件I/O的次数。后台进程LGWR将日志缓冲区中的信息写入磁盘的日志文件中,可启动ARCH后台进程进行日志信息归档。 
c. 共享池Shared Pool:包含用来处理的SQL语句信息。它包含共享SQL区和数据字典存储区。共享SQL区包含执行特定的SQL语句所用的信息。数据字典区用于存放数据字典,它为所有用户进程所共享。

12什么是分区表?简述范围分区和列表分区的区别,分区表的主要优势有哪些?

使用分区方式建立的表叫分区表

范围分区 
每个分区都由一个分区键值范围指定(对于一个以日期列作为分区键的表,“2005 年 1 月”分区包含分区键值为从“2005 年 1 月 1 日” 
到“2005 年 1 月 31 日”的行)。

列表分区 
每个分区都由一个分区键值列表指定(对于一个地区列作为分区键的表,“北美”分区可能包含值“加拿大”“美国”和“墨西哥”)。

分区功能通过改善可管理性、性能和可用性,从而为各式应用程序带来了极大的好处。通常,分区可以使某些查询以及维护操作的性能大大提高。此外,分区还可以极大简化常见的管理任务。通过分区,数据库设计人员和管理员能够解决前沿应用程序带来的一些难题。分区是构建千兆字节数据系统或超高可用性系统的关键工具。

13,背景:某資料運行在archivelog,且用rman作過全備份和資料庫的冷備份, 
且所有的歸檔日誌都有,現控製檔案全部損壞,其他檔案全部完好,請問該怎麼恢復該資料庫,說一兩種方法。

回覆的方法:
一.使用冷備份,直接將冷備份的檔案全部COPY到原先的目錄下,在從新啟動資料庫就可以
二.使用歸檔日誌,

  • 啟動資料庫NOMOUNT

  • 建立控制檔,控製檔案指定資料檔案和重做日誌檔案的位置.

  • 使用RECOVER DATABASE using backup controlfile until cancel 命令回複數據庫,這時可以使用歸檔日誌

  • ALETER DATABASE OPEN RESETLOGS;

  • 重新備份資料庫和控制檔

14,用rman寫一個備份語句:備份表空間TSB,level 為2的增量備份。

15,有個表a(x number(20),y number(20))用最快速有效率的SQL向該表插入從1開始的連續的1000萬記錄。

相關學習推薦:oracle資料庫學習教學

#【專題推薦】:2020年oracle面試題彙總(最新)

以上是整理Oracle面試題目及答案的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.聊天命令以及如何使用它們
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何在Oracle中創建用戶和角色? 如何在Oracle中創建用戶和角色? Mar 17, 2025 pm 06:41 PM

本文介紹瞭如何使用SQL命令在Oracle中創建用戶和角色,並討論了管理用戶權限的最佳實踐,包括使用角色,遵循最低特權的原則以及常規審核的原則。

如何使用透明數據加密(TDE)在Oracle中配置加密? 如何使用透明數據加密(TDE)在Oracle中配置加密? Mar 17, 2025 pm 06:43 PM

本文概述了在Oracle中配置透明數據加密(TDE)的步驟,詳細介紹了Wallet創建,啟用TDE和數據加密。它還討論了TDE的好處,例如數據保護和合規性,以及如何進行Veri

如何使用最少的停機時間在Oracle中執行在線備份? 如何使用最少的停機時間在Oracle中執行在線備份? Mar 17, 2025 pm 06:39 PM

本文討論了使用RMAN使用最少的停機時間在Oracle中執行在線備份的方法,減少停機時間,確保數據一致性和監視備份進度的最佳實踐。

如何在Oracle中使用自動工作負載存儲庫(AWR)和自動數據庫診斷監視器(ADDM)? 如何在Oracle中使用自動工作負載存儲庫(AWR)和自動數據庫診斷監視器(ADDM)? Mar 17, 2025 pm 06:44 PM

本文介紹瞭如何將Oracle的AWR和ADDM用於數據庫性能優化。它詳細介紹了生成和分析AWR報告,並使用ADDM來識別和解決性能瓶頸。

oracle如何查表空間大小 oracle如何查表空間大小 Apr 11, 2025 pm 08:15 PM

要查詢 Oracle 表空間大小,請遵循以下步驟:確定表空間名稱,方法是運行查詢:SELECT tablespace_name FROM dba_tablespaces;查詢表空間大小,方法是運行查詢:SELECT sum(bytes) AS total_size, sum(bytes_free) AS available_space, sum(bytes) - sum(bytes_free) AS used_space FROM dba_data_files WHERE tablespace_

Oracle PL/SQL Deep Dive:掌握過程,功能和軟件包 Oracle PL/SQL Deep Dive:掌握過程,功能和軟件包 Apr 03, 2025 am 12:03 AM

OraclePL/SQL中的過程、函數和包分別用於執行操作、返回值和組織代碼。 1.過程用於執行操作,如輸出問候語。 2.函數用於計算並返回值,如計算兩個數之和。 3.包用於組織相關元素,提高代碼的模塊化和可維護性,如管理庫存的包。

Oracle Goldengate:實時數據複製與集成 Oracle Goldengate:實時數據複製與集成 Apr 04, 2025 am 12:12 AM

OracleGoldenGate通過捕獲源數據庫的事務日誌並將變更應用到目標數據庫,實現實時數據複製和集成。 1)捕獲變更:讀取源數據庫的事務日誌,轉換為Trail文件。 2)傳輸變更:通過網絡傳輸到目標系統,使用數據泵進程管理傳輸。 3)應用變更:在目標系統上,複製進程讀取Trail文件並應用變更,確保數據一致性。

如何在Oracle Data Guard中執行切換和故障轉移操作? 如何在Oracle Data Guard中執行切換和故障轉移操作? Mar 17, 2025 pm 06:37 PM

本文詳細介紹了Oracle數據護罩中切換和故障轉移的過程,強調其差異,計劃和測試,以最大程度地減少數據丟失並確保順暢的操作。

See all articles