當前位置:首頁 » 數據倉庫 » 基本的資料庫語句面試題
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

基本的資料庫語句面試題

發布時間: 2023-03-04 11:56:05

A. ORACLE資料庫面試題

1.
update t
set logdate=to_date('2003-01-01','yyyy-mm-dd')
where logdate=to_date('2001-02-11','yyyy-mm-dd');

2.
select *
from t
where name in (select name from t group by name having coung(*)>1)
order by name;--沒說清楚,到底是升序還是降序

3.
select ID,NAME,ADDRESS,PHONE,LOGDATE
from
(
select t.*,row_number() over(partition by name order by name) rn
from t
)
where rn = 1;

4.
update t
set (address,phone)=
(select address,phone from e where e.name=t.name);

5.
select *
from t
where rownum <=5
minus
select *
from t
where rownum <=2;

也沒什麼特別的地方,有些題目用oracle特有的函數去做會比較簡單,像在第三題中用到的oracle的分析函數,以及在第一題中用到的oracle的to_char()函數。

這幾個題目主要是看你能不能使用oracle的函數去處理

B. 急求sql Server 資料庫SQL語句面試題

What are two methods of retrieving SQL?
What cursor type do you use to retrieve multiple recordsets?
What is the difference between a 「where」 clause and a 「having」 clause? - 「Where」 is a kind of restiriction statement. You use where clause to restrict all the data from DB.Where clause is using before result retrieving. But Having clause is using after retrieving the data.Having clause is a kind of filtering command.
What is the basic form of a SQL statement to read data out of a table? The basic form to read data out of table is 『SELECT * FROM table_name; 『 An answer: 『SELECT * FROM table_name WHERE xyz= 『whatever』;』 cannot be called basic form because of WHERE clause.
What structure can you implement for the database to speed up table reads? - 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 datatype ( for example CLOB, LOB and …)
What are the tradeoffs with having indexes? - 1. Faster selects, slower updates. 2. Extra storage space to store indexes. Updates are slower because in addition to updating the table you have to update the index.

C. 資料庫SQL查詢語句面試題

5.1
select a.username,b.deptname from users a,dept b where a.dept_id=b.id;

5.2
update users set dept_id='9' where dept_id='2';

5.3
select a.deptname,b.count_id from dept a,(select dept_id,count(id) as count_id from users group by dept_id having count(id)>1) b where a.id=b.dept_id;

5.4
select a.deptname,b.count_man,c.count_woman from dept a,(select dept_id,count(sex) as count_man from users where sex='男' group by dept_id) b,(select dept_id,count(sex) as count_woman from users where sex='女' group by dept_id) c where a.id=b.dept_id and a.id=c.dept_id;

5.5
添加歷史記錄表
create table history(
id number(8), -- 記錄編號
dept_id varchar2(5), -- 部門ID
user_id varchar2(5), -- 用戶ID
change_date date -- 變動日期
);

D. 資料庫常見筆試面試題

資料庫常見筆試面試題

資料庫常見筆試面試題有哪些?資料庫常見筆試面試會考什麼?下面是資料庫常見面試題總結,為大家提供參考。

1、SQL的表連接方式有哪些?

SQL中連接按結果集分為:內連接,外連接,交叉連接

內連接:inner join on,兩表都滿足的組合。內連接分為等值連接,不等連接,自然連接。

等值連接:兩表中相同的列都會出現在結果集中。

自然連接:兩表中具體相同列表的列會合並為同一列出現在結果集中。

外連接:分為左(外)連接,右(外)連接,全連接

左(外)連接:A left (outer) join B,以A表為基礎,A表的全部數據,B表有的組合,沒有的為null。

右(外)連接:A right(outer) join B,以B表為基礎,B表的全部數據,A表有的組合,沒有的位null。

全連接:A full (outer) join 兩表相同的組合在一起,A表有,B表沒有的數據(顯示為null),同樣B表有,A表沒有的顯示為null。

交叉連接:cross join,就是笛卡爾乘積。

2、三範式

1NF:表中的欄位都是單一屬性,不再可分。

2NF:在1NF的基礎上,表中所有的非主屬性都必須完全依賴於任意一組候選鍵,不能僅依賴於候選鍵中的某個屬性。

3NF:在2NF的基礎上,表中所有的屬性都不依賴其他非主屬性。

簡單的說就是:1NF表示每個屬性不可分割,2NF表示非主屬性不存在對主鍵的部分依賴,3NF表示不存在非主屬性對主鍵的依賴傳遞。

3、表的操作

表的創建:create table 表名 (列名1 類型 約束,列2 類型 約束…)

表的刪除: 表名

表的更改(結構的更改,不是記錄的更新):alter table 表名 add|drop 列名|約束名

插入記錄: into 表名…values…

更新記錄:表名 set 列名=值 where 條件

刪除記錄: from 表名 where 條件

4、數據的完整性

數據完整性指的是存儲在資料庫中的數據的一致性和准確性。

完整性分類:

(1)實體完整性:主鍵值必須唯一且非空。(主鍵約束)

(2) 引用完整性(也叫參照完整性):外鍵要麼為空,要麼引用主表中存在的記錄。(外鍵約束)。

(3)用戶自定義完整性:針對某一具體關系資料庫中的約束條件。

5、SQL的查詢優化

(1)從表連接的角度優化:盡量使用內連接,因為內連接是兩表都滿足的行的組合,而外連接是以其中一個表的全部為基準。

(2)盡量使用存儲過程代替臨時寫SQL語句:因為存儲過程是預先編譯好的SQL語句的集合,這樣可以減少編譯時間。

(3)從索引的角度優化:對那些常用的查詢欄位簡歷索引,這樣查詢時值進行索引掃描,不讀取數據塊。

(4)還有一些常用的select優化技巧:

(5)A.只查詢那些需要訪問的欄位,來代替select*

B、將過濾記錄越多的where語句向前移:在一個SQL語句中,如果一個where條件過濾的資料庫記錄越多,定位越准確,則該where條件越應該前移。

6、索引的作用,聚集索引與非聚集索引的區別

索引是一個資料庫對象,使用索引,可以是資料庫程序無須對整個數據進行掃描,就可以在其中找到目標數據,從而提高查找效率。索引的底層採用的是B樹。

聚集索引:根據記錄的key再表中排序數據行。

非聚集索引:獨立於記錄的結構,非聚集所以包含的`key,且每個鍵值項都有指向該簡直的數據行的指針。

聚集索引與非聚集索引的區別:

(1)聚集索引的物理存儲按索引排序,非聚集所以的物理存儲不按索引排序。

(2) 聚集索引插入,更新數據的速度比非聚集索引慢,單查詢速度更快。

(3) 聚集索引的葉級結點保存的是時間的數據項,而非聚集結點的葉級結點保存的是指向數據項的指針。

(4)一個表只能有一個聚集索引(因為只有一種排序方式),但可以有多個非聚集索引。

7、存儲過程與函數的區別

(1)函數有返回值,存儲過程沒有返回值。

(2) 因為存儲過程沒有返回值,所以不能將存儲過程的執行結果賦值給變數;函數有返回值類型,調用函數時,可以將函數的執行結果賦值給變數。也就是說,函數可以在select語句中使用,而存儲過程則不能。


;

E. SQL資料庫面試題 急急急

a)select pname as '商品名',avg(qty) as 平均銷售量 from s,p,m where m.city='上海' and s.mno=m.mno and p.pno=s.pno,select p.Pno,p.pname,sum(s.qty)
from s left join p on s.pno=p.pno left join m on p.Mno=m.Mno
where m.city='上海市'
group by p.Pno,p.pname,p.city,p.color
b)、先刪除Sale表的外鍵PNO,再刪除gds表。

c)聯系:視圖(view)是在基本表之上建立的表,它的結構(即所定義的列)和內容(即所有數據行)都來自基本表,它依據基本表存在而存在。一個視圖可以對應一個基本表,也可以對應多個基本表。視圖是基本表的抽象和在邏輯意義上建立的新關系
區別:1、視圖是已經編譯好的sql語句。而表不是
2、視圖沒有實際的物理記錄。而表有。
3、表是內容,視圖是窗口
4、表只用物理空間而視圖不佔用物理空間,視圖只是邏輯概念的存在,表可以及時四對它進行修改,但視圖只能有創建的語句來修改
5、表是內模式,視圖是外模式
6、視圖是查看數據表的一種方法,可以查詢數據表中某些欄位構成的數據,只是一些SQL語句的集合。從安全的角度說,視圖可以不給用戶接觸數據表,從而不知道表結構。
7、表屬於全局模式中的表,是實表;視圖屬於局部模式的表,是虛表。
8、視圖的建立和刪除隻影響視圖本身,不影響對應的基本表。

F. 問幾題資料庫面試題++++++++++++++++++

14: C
select e.ename form emp e where e.empno not in (select m.mgr from emp m)

1:
1)
select A.sid, S.sname from
(select sid from sc where cid in (select cid from sc where sid = 123456)
group by sid having count(*) = (select count(*) from sc where sid = 123456)) as A inner join student as S on A.sid = S.sid

2)
select sc.cid, s.sname, sc.cid, c.cname, sc.scscore from sc, student as s, course as c
where s.sid = sc.sid and c.cid = sc.cid and sc.sid in
(
select sc.sid from sc,
(select cid, avg(scscore) as avg_score from sc group by cid) as a
where sc.cid = a.cid and sc.scscore < a.avg_score
group by sc.sid having count(*) > 2
)

1:
select 日期欄位,sum(case when 勝負欄位 = '勝' then 1 else 0 end) as [勝],sum(case when 勝負欄位 = '負' then 1 else 0 end) as [負] from 比賽表
group by 日期欄位

G. 資料庫經典筆試題和面試題答案

如下這些有關資料庫知識考查的經典筆試題,非常全面,對計算機專業畢業生參加筆試會很有幫助,建議大家收藏。
一、選擇題

1. 下面敘述正確的是___c___。

A、演算法的執行效率與數據的存儲結構無關

B、演算法的空間復雜度是指演算法程序中指令(或語句)的條數

C、演算法的有窮性是指演算法必須能在執行有限個步驟之後終止

D、以上三種描述都不對

2. 以下數據結構中不屬於線性數據結構的是___c___。

A、隊列B、線性表C、二叉樹D、棧

3. 在一棵二叉樹上第5層的結點數最多是__b____。2的(5-1)次方

A、8 B、16 C、32 D、15

4. 下面描述中,符合結構化程序設計風格的是___a___。

A、使用順序、選擇和重復(循環)三種基本控制結構表示程序的控制邏輯

B、模塊只有一個入口,可以有多個出口

C、注重提高程序的執行效率 D、不使用goto語句

5. 下面概念中,不屬於面向對象方法的是___d___。

A、對象 B、繼承 C、類 D、過程調用

6. 在結構化方法中,用數據流程圖(DFD)作為描述工具的軟體開發階段是___b___。

A、可行性分析 B、需求分析 C、詳細設計 D、程序編碼

7. 在軟體開發中,下面任務不屬於設計階段的是__d____。

A、數據結構設計 B、給出系統模塊結構 C、定義模塊演算法 D、定義需求並建立系統模型

8. 資料庫系統的核心是___b___。

A、數據模型 B、資料庫管理系統 C、軟體工具 D、資料庫

9. 下列敘述中正確的是__c____。

A、資料庫是一個獨立的系統,不需要操作系統的支持

B、資料庫設計是指設計資料庫管理系統

C、資料庫技術的根本目標是要解決數據共享的問題

D、資料庫系統中,數據的物理結構必須與邏輯結構一致

10. 下列模式中,能夠給出資料庫物理存儲結構與物理存取方法的是___a___。

A、內模式 B、外模式 C、概念模式 D、邏輯模式

11. Visual FoxPro資料庫文件是___d___。

A、存放用戶數據的文件 B、管理資料庫對象的系統文件

C、存放用戶數據和系統的文件 D、前三種說法都對

12. SQL語句中修改表結構的命令是___c___。

A、MODIFY TABLE B、MODIFY STRUCTURE

C、ALTER TABLE D、ALTER STRUCTURE

13. 如果要創建一個數據組分組報表,第一個分組表達式是"部門",第二個分組表達式是"性別",第三個分組表達式是"基本工資",當前索引的索引表達式應當是__b____。

A、部門+性別+基本工資 B、部門+性別+STR(基本工資)

C、STR(基本工資)+性別+部門 D、性別+部門+STR(基本工資)

14. 把一個項目編譯成一個應用程序時,下面的敘述正確的是___a___。

A、所有的項目文件將組合為一個單一的應用程序文件

B、所有項目的包含文件將組合為一個單一的應用程序文件

C、所有項目排除的文件將組合為一個單一的應用程序文件

D、由用戶選定的項目文件將組合為一個單一的應用程序文件

15. 資料庫DB、資料庫系統DBS、資料庫管理系統DBMS三者之間的關系是_a___。

A、DBS包括DB和DBMS B、DBMS包括DB和DBS

C、DB包括DBS和DBMS D、DBS就是DB,也就是DBMS

16. 在"選項"對話框的"文件位置"選項卡中可以設置___b___。

A、表單的默認大小 B、默認目錄

C、日期和時間的顯示格式 D、程序代碼的顏色

17. 要控制兩個表中數據的完整性和一致性可以設置"參照完整性",要求這兩個表_a_。

A、是同一個資料庫中的兩個表 B、不同資料庫中的兩個表

C、兩個自由表 D、一個是資料庫表另一個是自由表

18. 定位第一條記錄上的命令是___a___。

A、GO TOP B、GO BOTTOM C、GO 6 D、SKIP

19. 在關系模型中,實現"關系中不允許出現相同的元組"的約束是通過__b____。

A、候選鍵 B、主鍵 C、外鍵 D、超鍵

20. 設當前資料庫有10條記錄(記錄未進行任何索引),在下列三種情況下,當前記錄號為1時;EOF()為真時;BOF()為真時,命令?RECN()的結果分別是___a___。

A、1,11,1 B、1,10,1 C、1,11,0 D、1,10,0

21. 下列表達式中結果不是日期型的是___c___。

A、CTOD("2000/10/01") B、{^99/10/01}+365

C、VAL("2000/10/01") D、DATE()

22. 只有滿足聯接條件的記錄才包含在查詢結果中,這種聯接為___c___。

A、左聯接 B、右聯接 C、內部聯接 D、完全聯接

23. 索引欄位值不唯一,應該選擇的索引類型為___b___。

A、主索引 B、普通索引 C、候選索引 D、唯一索引

24. 執行SELECT 0選擇工作區的結果是___b___。

A、選擇了0號工作區 B、選擇了空閑的最小號工作區

C、關閉選擇的工作區 D、選擇已打開的工作區

25. 從資料庫中刪除表的命令是___a___。

A、DROP TABLE B、ALTER TABLE C、DELETE TABLE D、USE

26. DELETE FROM S WHERE 年齡>60語句的功能是__b____。

A、從S表中徹底刪除年齡大於60歲的記錄

B、S表中年齡大於60歲的記錄被加上刪除標記

C、刪除S表 D、刪除S表的年齡列 1 2

H. 資料庫面試題:

  1. create database aaa;

  2. create table users(id int NOT NULL AUTO_INCREMENT,

    user_name char(10),money char(10),add_time datetime

PRIMARY KEY (`id`))ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8;

3.insert into users values(2,'a1','a11',current_date),(3,'a1','a11',current_date),(4,'a1','a11',current_date),(5,'a1','a11',current_date),(6,'a1','a11',current_date),(7,'a1','a11',current_date),(8,'a1','a11',current_date),(9,'a1','a11',current_date),(10,'a1','a11',current_date),(11,'a1','a11',current_date);

4.參考第二步

5.參考第三步

6.select a.username,a.money,b.email,b.user_phone,b.weigh from users a,user_info b

where a.id=b.id and a.id=XXX(你指定的);

7.mysqlmp -uroot -p aaa > /tmp/aaa.sql (需要輸入密碼)

我用的是mysql上的寫法

I. SQL查詢面試題與答案

SQL查詢面試題與答案

SQL語言是一種資料庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關系資料庫系統;同時也是資料庫腳本文件的擴展名。下面是我搜集的SQL查詢面試題與答案,歡迎大家閱讀。

SQL查詢面試題與答案一

1.一道SQL語句面試題,關於group by表內容:

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

2.請教一個面試中遇到的SQL語句的查詢問題

表中有A B C三列,用SQL語句實現:當A列大於B列時選擇A列否則選擇B列,當B列大於C列時選擇B列否則選擇C列。

------------------------------------------

select (case when a>b then a else b end ),

(case when b>c then b esle c end)

from table_name

3.面試題:一個日期判斷的sql語句?

請取出tb_send表中日期(SendTime欄位)為當天的所有記錄?(SendTime欄位為datetime型,包含日期與時間)

------------------------------------------

select * from tb where datediff(dd,SendTime,getdate())=0

4.有一張表,裡面有3個欄位:語文,數學,英語。其中有3條記錄分別表示語文70分,數學80分,英語58分,請用一條sql語句查詢出這三條記錄並按以下條件顯示出來(並寫出您的思路):

大於或等於80表示優秀,大於或等於60表示及格,小於60分表示不及格。

顯示格式:

語文 數學 英語

及格 優秀 不及格

------------------------------------------

select

(case when 語文>=80 then '優秀'

when 語文>=60 then '及格'

else '不及格') as 語文,

(case when 數學>=80 then '優秀'

when 數學>=60 then '及格'

else '不及格') as 數學,

(case when 英語>=80 then '優秀'

when 英語>=60 then '及格'

else '不及格') as 英語,

from table

5.在sqlserver2000中請用sql創建一張用戶臨時表和系統臨時表,裡麵包含兩個欄位ID和IDValues,類型都是int型,並解釋下兩者的區別?

------------------------------------------

用戶臨時表:create table #xx(ID int, IDValues int)

系統臨時表:create table ##xx(ID int, IDValues int)

區別:

用戶臨時表只對創建這個表的用戶的Session可見,對其他進程是不可見的.

當創建它的進程消失時這個臨時表就自動刪除.

全局臨時表對整個SQL Server實例都可見,但是所有訪問它的Session都消失的時候,它也自動刪除.

6.sqlserver2000是一種大型資料庫,他的`存儲容量只受存儲介質的限制,請問它是通過什麼方式實現這種無限容量機制的。

------------------------------------------

它的所有數據都存儲在數據文件中(*.dbf),所以只要文件夠大,SQL Server的存儲容量是可以擴大的.

SQL Server 2000 資料庫有三種類型的文件:

主要數據文件

主要數據文件是資料庫的起點,指向資料庫中文件的其它部分。每個資料庫都有一個主要數據文件。主要數據文件的推薦文件擴展名是 .mdf。

次要數據文件

次要數據文件包含除主要數據文件外的所有數據文件。有些資料庫可能沒有次要數據文件,而有些資料庫則有多個次要數據文件。次要數據文件的推薦文件擴展名是 .ndf。

日誌文件

日誌文件包含恢復資料庫所需的所有日誌信息。每個資料庫必須至少有一個日誌文件,但可以不止一個。日誌文件的推薦文件擴展名是 .ldf。

7.請用一個sql語句得出結果

從table1,table2中取出如table3所列格式數據,注意提供的數據及結果不準確,只是作為一個格式向大家請教。

如使用存儲過程也可以。

table1

月份mon 部門dep 業績yj

-------------------------------

一月份 01 10

一月份 02 10

一月份 03 5

二月份 02 8

二月份 04 9

三月份 03 8

table2

部門dep 部門名稱dname

--------------------------------

01 國內業務一部

02 國內業務二部

03 國內業務三部

04 國際業務部

table3 (result)

部門dep 一月份 二月份 三月份

--------------------------------------

01 10 null null

02 10 8 null

03 null 5 8

04 null null 9

------------------------------------------

1)

select a.部門名稱dname,b.業績yj as '一月份',c.業績yj as '二月份',d.業績yj as '三月份'

from table1 a,table2 b,table2 c,table2 d

where a.部門dep = b.部門dep and b.月份mon = '一月份' and

a.部門dep = c.部門dep and c.月份mon = '二月份' and

a.部門dep = d.部門dep and d.月份mon = '三月份' and

2)

select a.dep,

sum(case when b.mon=1 then b.yj else 0 end) as '一月份',

sum(case when b.mon=2 then b.yj else 0 end) as '二月份',

sum(case when b.mon=3 then b.yj else 0 end) as '三月份',

sum(case when b.mon=4 then b.yj else 0 end) as '四月份',

sum(case when b.mon=5 then b.yj else 0 end) as '五月份',

sum(case when b.mon=6 then b.yj else 0 end) as '六月份',

sum(case when b.mon=7 then b.yj else 0 end) as '七月份',

sum(case when b.mon=8 then b.yj else 0 end) as '八月份',

sum(case when b.mon=9 then b.yj else 0 end) as '九月份',

sum(case when b.mon=10 then b.yj else 0 end) as '十月份',

sum(case when b.mon=11 then b.yj else 0 end) as '十一月份',

sum(case when b.mon=12 then b.yj else 0 end) as '十二月份',

from table2 a left join table1 b on a.dep=b.dep

8.華為一道面試題

一個表中的Id有多個記錄,把所有這個id的記錄查出來,並顯示共有多少條記錄數。

------------------------------------------

select id, Count(*) from tb group by id having count(*)>1

select * from(select count(ID) as count from table group by ID)T where T.count>1

SQL查詢面試題與答案二

1、查詢不同老師所教不同課程平均分從高到低顯示

SELECT max(Z.T#) AS 教師ID,MAX(Z.Tname) AS 教師姓名,C.C# AS 課程ID,MAX(C.Cname) AS 課程名稱,AVG(Score) AS 平均成績

FROM SC AS T,Course AS C ,Teacher AS Z

where T.C#=C.C# and C.T#=Z.T#

GROUP BY C.C#

ORDER BY AVG(Score) DESC

2、查詢如下課程成績第 3 名到第 6 名的學生成績單:企業管理(001),馬克思(002),UML (003),資料庫(004)

[學生ID],[學生姓名],企業管理,馬克思,UML,資料庫,平均成績

SELECT DISTINCT top 3

SC.S# As 學生學號,

Student.Sname AS 學生姓名 ,

T1.score AS 企業管理,

T2.score AS 馬克思,

T3.score AS UML,

T4.score AS 資料庫,

ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) as 總分

FROM Student,SC LEFT JOIN SC AS T1

ON SC.S# = T1.S# AND T1.C# = '001'

LEFT JOIN SC AS T2

ON SC.S# = T2.S# AND T2.C# = '002'

LEFT JOIN SC AS T3

ON SC.S# = T3.S# AND T3.C# = '003'

LEFT JOIN SC AS T4

ON SC.S# = T4.S# AND T4.C# = '004'

WHERE student.S#=SC.S# and

ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)

NOT IN

(SELECT

DISTINCT

TOP 15 WITH TIES

ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0)

FROM sc

LEFT JOIN sc AS T1

ON sc.S# = T1.S# AND T1.C# = 'k1'

LEFT JOIN sc AS T2

ON sc.S# = T2.S# AND T2.C# = 'k2'

LEFT JOIN sc AS T3

ON sc.S# = T3.S# AND T3.C# = 'k3'

LEFT JOIN sc AS T4

ON sc.S# = T4.S# AND T4.C# = 'k4'

ORDER BY ISNULL(T1.score,0) + ISNULL(T2.score,0) + ISNULL(T3.score,0) + ISNULL(T4.score,0) DESC);

3、統計列印各科成績,各分數段人數:課程ID,課程名稱,[100-85],[85-70],[70-60],[ <60]

SELECT SC.C# as 課程ID, Cname as 課程名稱

,SUM(CASE WHEN score BETWEEN 85 AND 100 THEN 1 ELSE 0 END) AS [100 - 85]

,SUM(CASE WHEN score BETWEEN 70 AND 85 THEN 1 ELSE 0 END) AS [85 - 70]

,SUM(CASE WHEN score BETWEEN 60 AND 70 THEN 1 ELSE 0 END) AS [70 - 60]

,SUM(CASE WHEN score < 60 THEN 1 ELSE 0 END) AS [60 -]

FROM SC,Course

where SC.C#=Course.C#

GROUP BY SC.C#,Cname;

4、查詢學生平均成績及其名次

SELECT 1+(SELECT COUNT( distinct 平均成績)

FROM (SELECT S#,AVG(score) AS 平均成績

FROM SC

GROUP BY S#

) AS T1

WHERE 平均成績 > T2.平均成績) as 名次,

S# as 學生學號,平均成績

FROM (SELECT S#,AVG(score) 平均成績

FROM SC

GROUP BY S#

) AS T2

ORDER BY 平均成績 desc;

5、查詢各科成績前三名的記錄:(不考慮成績並列情況)

SELECT t1.S# as 學生ID,t1.C# as 課程ID,Score as 分數

FROM SC t1

WHERE score IN (SELECT TOP 3 score

FROM SC

WHERE t1.C#= C#

ORDER BY score DESC

)

ORDER BY t1.C#;

6、查詢每門課程被選修的學生數

select c#,count(S#) from sc group by C#;

7、查詢出只選修了一門課程的全部學生的學號和姓名

select SC.S#,Student.Sname,count(C#) AS 選課數

from SC ,Student

where SC.S#=Student.S# group by SC.S# ,Student.Sname having count(C#)=1;

8、查詢課程編號“002”的成績比課程編號“001”課程低的所有同學的學號、姓名;

Select S#,Sname from (select Student.S#,Student.Sname,score ,(select score from SC SC_2 where SC_2.S#=Student.S# and SC_2.C#='002') score2

from Student,SC where Student.S#=SC.S# and C#='001') S_2 where score2

9、查詢所有課程成績小於60分的同學的學號、姓名;

select S#,Sname

from Student

where S# not in (select Student.S# from Student,SC where S.S#=SC.S# and score>60);

10、查詢沒有學全所有課的同學的學號、姓名;

select Student.S#,Student.Sname

from Student,SC

where Student.S#=SC.S# group by Student.S#,Student.Sname having count(C#) <(select count(C#) from Course);

11、查詢至少有一門課與學號為“1001”的同學所學相同的同學的學號和姓名;

select S#,Sname from Student,SC where Student.S#=SC.S# and C# in select C# from SC where S#='1001';

12、查詢至少學過學號為“001”同學所有一門課的其他同學學號和姓名;

select distinct SC.S#,Sname

from Student,SC

where Student.S#=SC.S# and C# in (select C# from SC where S#='001');

13、把“SC”表中“葉平”老師教的課的成績都更改為此課程的平均成績;

update SC set score=(select avg(SC_2.score)

from SC SC_2

where SC_2.C#=SC.C# ) from Course,Teacher where Course.C#=SC.C# and Course.T#=Teacher.T# and Teacher.Tname='葉平');

14、查詢和“1002”號的同學學習的課程完全相同的其他同學學號和姓名;

select S# from SC where C# in (select C# from SC where S#='1002')

group by S# having count(*)=(select count(*) from SC where S#='1002');

15、刪除學習“葉平”老師課的SC表記錄;

Delect SC

from course ,Teacher

where Course.C#=SC.C# and Course.T#= Teacher.T# and Tname='葉平';

16、向SC表中插入一些記錄,這些記錄要求符合以下條件:沒有上過編號“003”課程的同學學號、2、

號課的平均成績;

Insert SC select S#,'002',(Select avg(score)

from SC where C#='002') from Student where S# not in (Select S# from SC where C#='002');

17、按平均成績從高到低顯示所有學生的“資料庫”、“企業管理”、“英語”三門的課程成績,按如下形式顯示: 學生ID,,資料庫,企業管理,英語,有效課程數,有效平均分

SELECT S# as 學生ID

,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='004') AS 資料庫

,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='001') AS 企業管理

,(SELECT score FROM SC WHERE SC.S#=t.S# AND C#='006') AS 英語

,COUNT(*) AS 有效課程數, AVG(t.score) AS 平均成績

FROM SC AS t

GROUP BY S#

ORDER BY avg(t.score)

18、查詢各科成績最高和最低的分:以如下形式顯示:課程ID,最高分,最低分

SELECT L.C# As 課程ID,L.score AS 最高分,R.score AS 最低分

FROM SC L ,SC AS R

WHERE L.C# = R.C# and

L.score = (SELECT MAX(IL.score)

FROM SC AS IL,Student AS IM

WHERE L.C# = IL.C# and IM.S#=IL.S#

GROUP BY IL.C#)

AND

R.Score = (SELECT MIN(IR.score)

FROM SC AS IR

WHERE R.C# = IR.C#

GROUP BY IR.C#

);

19、按各科平均成績從低到高和及格率的百分數從高到低順序

SELECT t.C# AS 課程號,max(course.Cname)AS 課程名,isnull(AVG(score),0) AS 平均成績

,100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) AS 及格百分數

FROM SC T,Course

where t.C#=course.C#

GROUP BY t.C#

ORDER BY 100 * SUM(CASE WHEN isnull(score,0)>=60 THEN 1 ELSE 0 END)/COUNT(*) DESC

20、查詢如下課程平均成績和及格率的百分數(用"1行"顯示): 企業管理(001),馬克思(002),OO&UML (003),資料庫(004)

SELECT SUM(CASE WHEN C# ='001' THEN score ELSE 0 END)/SUM(CASE C# WHEN '001' THEN 1 ELSE 0 END) AS 企業管理平均分

,100 * SUM(CASE WHEN C# = '001' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '001' THEN 1 ELSE 0 END) AS 企業管理及格百分數

,SUM(CASE WHEN C# = '002' THEN score ELSE 0 END)/SUM(CASE C# WHEN '002' THEN 1 ELSE 0 END) AS 馬克思平均分

,100 * SUM(CASE WHEN C# = '002' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '002' THEN 1 ELSE 0 END) AS 馬克思及格百分數

,SUM(CASE WHEN C# = '003' THEN score ELSE 0 END)/SUM(CASE C# WHEN '003' THEN 1 ELSE 0 END) AS UML平均分

,100 * SUM(CASE WHEN C# = '003' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '003' THEN 1 ELSE 0 END) AS UML及格百分數

,SUM(CASE WHEN C# = '004' THEN score ELSE 0 END)/SUM(CASE C# WHEN '004' THEN 1 ELSE 0 END) AS 資料庫平均分

,100 * SUM(CASE WHEN C# = '004' AND score >= 60 THEN 1 ELSE 0 END)/SUM(CASE WHEN C# = '004' THEN 1 ELSE 0 END) AS 資料庫及格百分數

FROM SC

;

J. Oracle面試題(基礎篇)

Oracle面試題(基礎篇)

Oracle Database,又名Oracle RDBMS,或簡稱Oracle。是甲骨文公司的一款關系資料庫管理系統。以下是關於Oracle面試題(基礎篇),希望大家認真閱讀!

1. Oracle跟SQL Server 2005的區別?

宏觀上:

1). 最大的區別在於平台,oracle可以運行在不同的平台上,sql server只能運行在windows平台上,由於windows平台的穩定性和安全性影響了sql server的穩定性和安全性

2). oracle使用的腳本語言為PL-SQL,而sql server使用的腳本為T-SQL

微觀上: 從數據類型,資料庫的結構等等回答

2. 如何使用Oracle的游標?

1). oracle中的游標分為顯示游標和隱式游標

2). 顯示游標是用cursor...is命令定義的游標,它可以對查詢語句(select)返回的多條記錄進行處理;隱式游標是在執行插入 (insert)、刪除(delete)、修改(update)和返回單條記錄的查詢(select)語句時由PL/SQL自動定義的。

3). 顯式游標的操作:打開游標、操作游標、關閉游標;PL/SQL隱式地打開SQL游標,並在它內部處理SQL語句,然後關閉它

3. Oracle中function和procere的區別?

1). 可以理解函數是存儲過程的一種

2). 函數可以沒有參數,但是一定需要一個返回值,存儲過程可以沒有參數,不需要返回值

3). 函數return返回值沒有返回參數模式,存儲過程通過out參數返回值, 如果需要返回多個參數則建議使用存儲過程

4). 在sql數據操縱語句中只能調用函數而不能調用存儲過程

4. Oracle的導入導出有幾種方式,有何區別?

1). 使用oracle工具 exp/imp

2). 使用plsql相關工具

方法1. 導入/導出的是二進制的數據, 2.plsql導入/導出的是sql語句的文本文件

5. Oracle中有哪幾種文件?

數據文件(一般後綴為.dbf或者.ora),日誌文件(後綴名.log),控制文件(後綴名為.ctl)

6. 怎樣優化Oracle資料庫,有幾種方式?

個人理解,資料庫性能最關鍵的因素在於IO,因為操作內存是快速的,但是讀寫磁碟是速度很慢的,優化資料庫最關鍵的問題在於減少磁碟的IO,就個人理解應該分為物理的和邏輯的優化, 物理的是指oracle產品本身的一些優化,邏輯優化是指應用程序級別的優化

物理優化的一些原則:

1). Oracle的運行環境(網路,硬體等)

2). 使用合適的優化器

3). 合理配置oracle實例參數

4). 建立合適的索引(減少IO)

5). 將索引數據和表數據分開在不同的表空間上(降低IO沖突)

6). 建立表分區,將數據分別存儲在不同的分區上(以空間換取時間,減少IO)

邏輯上優化:

1). 可以對表進行邏輯分割,如中國移動用戶表,可以根據手機尾數分成10個表,這樣對性能會有一定的作用

2). Sql語句使用佔位符語句,並且開發時候必須按照規定編寫sql語句(如全部大寫,全部小寫等)oracle解析語句後會放置到共享池中

如: select * from Emp where name=? 這個語句只會在共享池中有一條,而如果是字元串的話,那就根據不同名字存在不同的語句,所以佔位符效率較好

3). 資料庫不僅僅是一個存儲數據的地方,同樣是一個編程的地方,一些耗時的操作,可以通過存儲過程等在用戶較少的情況下執行,從而錯開系統使用的高峰時間,提高資料庫性能

4). 盡量不使用*號,如select * from Emp,因為要轉化為具體的列名是要查數據字典,比較耗時

5). 選擇有效的表名

對於多表連接查詢,可能oracle的優化器並不會優化到這個程度, oracle 中多表查詢是根據FROM字句從右到左的數據進行的,那麼最好右邊的表(也就是基礎表)選擇數據較少的表,這樣排序更快速,如果有link表(多對多中間表),那麼將link表放最右邊作為基礎表,在默認情況下oracle會自動優化,但是如果配置了優化器的情況下,可能不會自動優化,所以平時最好能按照這個方式編寫sql

6). Where字句 規則

Oracle 中Where字句時從右往左處理的,表之間的連接寫在其他條件之前,能過濾掉非常多的數據的條件,放在where的末尾, 另外!=符號比較的列將不使用索引,列經過了計算(如變大寫等)不會使用索引(需要建立起函數), is null、is not null等優化器不會使用索引

7). 使用Exits Not Exits 替代 In Not in

8). 合理使用事務,合理設置事務隔離性

資料庫的數據操作比較消耗資料庫資源的,盡量使用批量處理,以降低事務操作次數

7. Oracle中字元串用什麼符號鏈接?

Oracle中使用 || 這個符號連接字元串 如 ‘abc’ || ‘d’

8. Oracle分區是怎樣優化資料庫的`?

Oracle的分區可以分為:列表分區、范圍分區、散列分區、復合分區。

1). 增強可用性:如果表的一個分區由於系統故障而不能使用,表的其餘好的分區仍可以使用;

2). 減少關閉時間:如果系統故障隻影響表的一部份分區,那麼只有這部份分區需要修復,可能比整個大表修復花的時間更少;

3). 維護輕松:如果需要得建表,獨產管理每個公區比管理單個大表要輕松得多;

4). 均衡I/O:可以把表的不同分區分配到不同的磁碟來平衡I/O改善性能;

5). 改善性能:對大表的查詢、增加、修改等操作可以分解到表的不同分區來並行執行,可使運行速度更快

6). 分區對用戶透明,最終用戶感覺不到分區的存在。

9. Oracle是怎樣分頁的?

Oracle中使用rownum來進行分頁, 這個是效率最好的分頁方法,hibernate也是使用rownum來進行oralce分頁的

select * from

( select rownum r,a from tabName where rownum <= 20 )

where r > 10

10. Oralce怎樣存儲文件,能夠存儲哪些文件?

Oracle 能存儲 clob、nclob、 blob、 bfile

Clob 可變長度的字元型數據,也就是其他資料庫中提到的文本型數據類型

Nclob 可變字元類型的數據,不過其存儲的是Unicode字元集的字元數據

Blob 可變長度的二進制數據

Bfile 資料庫外面存儲的可變二進制數據

11. Oracle中使用了索引的列,對該列進行where條件查詢、分組、排序、使用聚集函數,哪些用到了索引?

均會使用索引, 值得注意的是復合索引(如在列A和列B上建立的索引)可能會有不同情況

12. 資料庫怎樣實現每隔30分鍾備份一次?

通過操作系統的定時任務調用腳本導出資料庫

13. Oracle中where條件查詢和排序的性能比較?

Order by使用索引的條件極為嚴格,只有滿足如下情況才可以使用索引,

1). order by中的列必須包含相同的索引並且索引順序和排序順序一致

2). 不能有null值的列

所以排序的性能往往並不高,所以建議盡量避免order by

14. 解釋冷備份和熱備份的不同點以及各自的優點?

冷備份發生在資料庫已經正常關閉的情況下,將關鍵性文件拷貝到另外位置的一種說法

熱備份是在資料庫運行的情況下,採用歸檔方式備份數據的方法

冷備的優缺點:

1).是非常快速的備份方法(只需拷貝文件)

2).容易歸檔(簡單拷貝即可)

3).容易恢復到某個時間點上(只需將文件再拷貝回去)

4).能與歸檔方法相結合,作資料庫“最新狀態”的恢復。

5).低度維護,高度安全。

冷備份不足:

1).單獨使用時,只能提供到“某一時間點上”的恢復。

2).在實施備份的全過程中,資料庫必須要作備份而不能作其它工作。也就是說,在冷備份過程中,資料庫必須是關閉狀態。

3).若磁碟空間有限,只能拷貝到磁帶等其它外部存儲設備上,速度會很慢。

4).不能按表或按用戶恢復。

熱備的優缺點

1).可在表空間或數據文件級備份,備份時間短。

2).備份時資料庫仍可使用。

3).可達到秒級恢復(恢復到某一時間點上)。

4).可對幾乎所有資料庫實體作恢復。

5).恢復是快速的,在大多數情況下在資料庫仍工作時恢復。

熱備份的不足是:

1).不能出錯,否則後果嚴重。

2).若熱備份不成功,所得結果不可用於時間點的恢復。

3).因難於維護,所以要特別仔細小心,不允許“以失敗而告終”。

15. 解釋data block , extent 和 segment的區別?

data block 數據塊,是oracle最小的邏輯單位,通常oracle從磁碟讀寫的就是塊

extent 區,是由若干個相鄰的block組成

segment段,是有一組區組成

tablespace表空間,資料庫中數據邏輯存儲的地方,一個tablespace可以包含多個數據文件

;