『壹』 sql面試題,請大神解答,急!!!
第一題,最高的10-20。
1234select*from(selectcolD,colE,dense_rank()over(orderbycolGdesc)asrkfromtableb)whererkbetween10and20--當然面試的話這里可以註明dense_rank和rank區別等等。
第二題,2樓寫的就可以了
第三題,注意題目是人數之和
12345selectcount(*)ascntfromtableBwherecolAin(=傳入idconnectbypriorcolA=colB)
第四題
--測試數據
withtableAas(select1ascolA,0ascolB,'北京',0ascolB,'上海'fromal),tableBas(select1ascolD,'人員1'ascolE,1ascolA,2000ascolG,0ascolHfromalunionallselect2,'人員2',1,2000,0fromalunionallselect3,'人員3',1,2000,0fromalunionallselect4,'人員4',1,2000,0fromalunionallselect5,'人員5',1,2000,1fromalunionallselect6,'人員6',2,2000,1fromalunionallselect7,'人員7',1,2000,1fromal)--查詢sqlselectdecode(t.colH,0,'女','男')asgender,max(decode(t.colC,'北京',t.cnt,0))as北京,max(decode(t.colC,'上海',t.cnt,0))as上海from(selecta.colC,b.colH,count(*).colA=b.colAgroupbycolC,colH)tgroupbyt.colH
這里可以解釋下本sql的思路:--首先查出每個地區不同性別的人數,在行轉列(由於題目很明顯告訴你固定數據)
『貳』 求sql常考面試題
排序順序會影響系統性能嗎?
問:一些資料介紹說,在SQL Server 6.5中,排序方式會對系統性能造成影響,但是我並沒有發現有針對SQL Server 2000或SQL Server 7.0的類似說法。我想知道二分法檢索對SQL Server 2000程序到底有何意義。SQL Server 2000所支持的各種排序方式之間在執行性能上存在哪些差異呢?
答:請記住:各類排序方式間的性能差異受制於SQL Server在數據排序和數據比較上所花費的CPU周期數量。排序速度快並不代表性能就一定會得到改善。事實上,選擇較為「快速」的排序方法(例如二分法)可能會導致應用程序在其它方面的性能降低。
例如,假設您有一個查詢,該查詢通過last_name欄位進行搜索。二分法排序的規則規定:Smith 並不等於smith。您的應用程序開發人員可以通過要求所有數菥笮蔥問交蛐⌒蔥問嚼詞迪終飧鮃滴衤嘸5牽導實慕餼靄旆ㄊ嵌運閹鞅碇械乃惺菔褂肬PPER() 或者 LOWER() 函數。但不幸的是, 如果類似UPPER()這樣的函數對一個經過索引的列進行了操作,SQL Server將不再能夠使用索引搜索數據。在這種情況下,通過使用二分法所獲得的所有性能提升都將被花費在全表掃描上的巨大性能降低所抵消。所以,您無需考慮不同排序方法間可能存在的微小性能差異,您也無需費神考慮何種排序方法最能滿足程序開發人員和最終用戶的需要。
— SQL Server MVPs
--------------------------------------------------------------------------
日誌文件的增長和DBCC DBREINDEX
問:我有一個30GB的資料庫,我使用完全恢復模式。無論什麼時候,只要我使用資料庫一致性檢查程序(DBCC)語句DBCC DBREINDEX對特定的大型數據表進行重新索引,我都要將恢復模式改為Bulk_Logged,在重新索引過程完成後再改回完全模式。我希望這樣做能夠避免事務日誌文件急劇增長,但是隨後的日誌文件備份工作量卻非常大--有大約15GB。從邏輯上說,資料庫中的數據在重新索引後同原先並沒有什麼不同,只是索引重新進行了組織,那麼為什麼日誌文件還是那樣大呢?我怎樣才能避免日誌文件出現這樣的急劇增長呢?
答:是的,在重新索引前後的數據是完全一樣的,但是索引卻全面進行了更新。當您執行DBCC DBREINDEX命令的時候,SQL Server的日誌僅僅記錄了擴展盤區的分配情況(8頁面單位),而不是記錄了每一行或者每一頁所發生的變化。這種類型的日誌記錄方式避免了物理文件由於系統故障而遭到破壞,並且將更詳細的日誌記錄對系統吞吐量產生的影響降低到最小。
當您備份日誌文件的時候,SQL Server必須對分配在擴展盤區中的頁面進行備份,以便保持資料庫備份和日誌備份的一致性。如果SQL Server不備份這些頁面,您將不能夠切換回完全恢復模式,除非你進行一次完整的資料庫備份。您必須能夠從最近一次的完全備份、任何差異備份以及任何更新的事務日誌備份中對資料庫進行恢復。
——————————————————————————————————————————
再者,看你面試什麼方面的啦!
要是DBA的話,層次更高一些!
『叄』 SQL面試題
推薦的學習Java的學習順序如下: 學習Java SE部分的內容,這部分是基礎內容。掌握的越扎實,後面的內容學習起來就越容易。學習SQL和資料庫的內容 ,這個也是非常基礎的內容,舉個例子:程序員的面試題中一定會有SQL部分的考試。學習HTML、css、JavaScript的內容。學習,JSP、Servlet、JavaBean、標記庫、JSTL、MVC、JSP EL等Web編程的部分學習Struts 或者Spring MVC。二者取其一即可,推薦選Struts 學習Java與XML ,重點掌握使用Java技術對XML文件的解析學習Java EE的核心技術 ,例如:JNDI、EJB3等,同時還需要學習使用與配置應用伺服器,例如:webLogic Server,Websphere,JBoss 學習Hibernate 等持久層的技術學習Spring 學習AJAX 學習ANT、Subversion等開發工具,熟悉常見的軟體開發模型,例如:rup、XP 學習OOA與OOD,uml,設計模式學習Web Services、SOA的原理與應用開發 最後,現在很多公司都使用Linux系統做為伺服器系統,並且使用Linux系統進行程序的開發(都是出於使用正版的考慮),所以Linux系統的安裝、使用和簡單管與配置,也是需要學習,這部分內容,跟其他內容沒有關聯,可以在任何時候學。推薦學習完SQL與資料庫之後進行學習。 你要想找到一份不錯的Java程序員工作,最基本的也要把1-12都學習了,當然有的內容需要深入掌握,有的內容可以慢慢的深入掌握的。
『肆』 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、視圖的建立和刪除隻影響視圖本身,不影響對應的基本表。
『伍』 這個一個SQL面試題該怎麼寫
一、表設計(表只列主鍵和最少符合需求欄位,欄位類型省略):
員工表:id, 員工姓名
樓盤表:id, 樓盤名稱, 員工id
出單表:id, 出單年月,員工id, 樓盤id, 出單價格
工資表:id, 工資年月, 員工id, 工資
樓盤分攤表:id, 分攤年月, 樓盤id, 員工id, 分攤成本
二、分攤成本記錄(只查詢樓盤分攤表的記錄,如何插入根據資料庫類型 select into或者insert into)
select 工資表.工資年月 as 分攤年月, 出單表.樓盤id, 出單表.員工id, 工資表.工資 / 員工出單數.出單合計 as 分攤成本
from 出單表 join 工資表 on (出單表.員工id = 工資表.員工id and 出單表.出單年月 = 工資表.工資年月)
join (select 員工id, 出單年月, count(1) as 出單合計 from 出單表 group by 員工id, 出單年月) 員工出單數 on (出單表.員工id = 員工出單數.員工id and 出單表.出單年月 = 員工出單數.出單年月)
where 工資表.工資年月 = '這個條件填最新的年月,如果不加這個條件,就是所有月份的'
union all
select 工資表.工資年月 as 分攤年月, 出單表.樓盤id, 出單表.員工id, 工資表.工資 / 員工出單數.出單合計 as 分攤成本
from 樓盤表 join 工資表 on 樓盤表.員工id = 工資表.員工id
join (select 員工id, count(1) as 樓盤合計 from 樓盤表 group by 員工id) 員工負責樓盤數 on 樓盤表.員工id = 員工負責樓盤數.員工id
left join (select 員工id, 出單年月, count(1) as 出單合計 from 出單表 group by 員工id, 出單年月) 員工出單數 on (工資表.員工id = 員工出單數.員工id and 工資表.工資年月 = 員工出單數.出單年月)
where 員工出單數.員工id is null and 工資表.工資年月 = '這個條件填最新的年月,如果不加這個條件,就是所有月份的'
『陸』 有關SQL的面試題。。。
1:
〔車輛〕、〔站台〕、〔行車路線〕最少3個表
〔車輛〕表欄位〔ID〕,〔名稱〕
〔站台〕表欄位〔ID〕,〔名稱〕,〔描述〕
〔行車路線〕表欄位〔ID〕,〔車ID〕,〔站ID〕
查詢:
SELECT 〔車輛〕.〔名稱〕,〔站台〕.〔名稱〕
FROM 〔車輛〕 INNER JOIN 〔行車路線〕
ON 〔車輛〕.〔ID〕=〔行車路線〕.〔車ID〕
INNER JOIN 〔站台〕
ON 〔站台〕.〔ID〕=〔行車路線〕.〔站ID〕
WHERE 〔站台〕.〔名稱〕 = '車站1'
OR 〔站台〕.〔名稱〕 = '車站2'
2:資料庫設計
〔部門〕表:ID,父級ID,名稱
〔員工〕表:ID,父級ID,名稱,許可權
〔員工所屬部門〕表:ID,員工ID,部門ID
〔申請〕表:ID,內容,申請人ID,審核人ID,審核結果,備注
系統設計:
1 員工進入申請頁面時,根據〔員工〕的許可權來判斷是否能進入
2 員工查詢〔申請〕表,通過申請人ID過濾,只有申請許可權
3 經理查詢〔申請〕表,通過〔員工〕表查申請人的父級ID過濾,可以進行審批操作
『柒』 SQL語句面試題
SELECT*,
(SELECTCOUNT(*)FROM(SELECTCOUNT(*),b.sidFROMscbLEFTJOINcoursecONb.Cid=c.CidGROUPBYb.sid,c.tid)owWHEREow.sid=a.sid)as'
選課數量',
(SELECTsum(Score)FROMScdWHEREa.sid=d.sid)as'總成績'
FROMstudenta
;
SELECTd.sid,d.snamefromteachera
LEFTJOINcoursebona.tid=b.tid
LEFTJOINscconc.cid=b.cid
leftJOINstudentdONd.sid=c.sid
WHEREa.tname='葉萍';
SELECTsid,sname
FROMstudent
WHEREsidin(selecta.sid
FROMscAleftjoinscbona.sid=b.sid
WHEREa.cid=1andb.cid=2anda.score>b.score)
SELECTsc.Sid,sum(CASEWHENc.Cname='
數學'thensc.Scoreelse0end)數學,SUM(casewhenc.Cname='物理
'THENsc.ScoreELSE0END)物理,AVG(sc.Score)平均分
FROMsc
INNERJOINCourseconsc.Cid=c.Cid
WHEREc.Cnamein('數學','物理')
GROUPBYsc.Sid
ORDERBYAVG(sc.Score)DESC
insertintoSc(Sid,Cid,Score)values(003,3,85);
insertintoSc(Sid,Cid,Score)values(003,3,30);
首先這個不知道是你i寫錯了還是怎麼一個人化學成績有2個所以我在這里按照你這個上做的查詢所以有一個人是選了單個課程
『捌』 sql語句 面試題
A.創建表格CODE省略
註明:學生表PK stu_id 課程表pk cos_id 分數表PK enrollment_id FK stu_id,cos_id
B.插入數據code省略
C.Query
select s.stu_id,stu_name,count(cos_id) from student s,enrollments e where s.stu_id = e.stu_id and e.grade>60 group by s.stu_id,stu_name;
select e.stu_id,s.stu_name,c.cos_name from student s,enrollments e,course c
where s.stu_id = e.stu_id
and e.cos_id = c.cos_id
and c.cos_name = 'CHINESE'
and s.stu_name like 'W%';
select stu_id,stu_name from (select e.stu_id,stu_name,cos_name from enrollments e,student s,course c
where s.stu_id = e.stu_id
and e.cos_id = c.cos_id
and c.cos_name IN ('CHINESE','MUSIC'))
group by stu_id,stu_name
having count(cos_name) = 2
select distinct e.cos_id,c.cos_name,count(e.stu_id) stu_count,count(e.stu_id)-NVL(A.FAIL,0) upscore,(count(e.stu_id)-NVL(A.FAIL,0))/count(e.stu_id) rate from
(select cos_id,count(stu_id) fail from enrollments where grade<60 group by cos_id) a,enrollments e,course c
where e.cos_id = a.cos_id(+)
and e.cos_id = c.cos_id
group by e.cos_id,NVL(a.fail,0),c.cos_name;
update student
set avg_grade =(select avg(grade) X from enrollments group by stu_id
having student.stu_id = enrollments.stu_id);
select stu_id,avg(grade) from
(select stu_id,cos_id,grade,row_number() over(partition by stu_id order by grade ) X from enrollments)
group by stu_id
having count(*)<=2
UNION
select A.stu_id,avg(A.grade)from
(select stu_id,cos_id,grade,row_number() over(partition by stu_id order by grade ) X from enrollments) A,
(select stu_id,count(*) c from
(select stu_id,cos_id,grade,row_number() over(partition by stu_id order by grade ) X from enrollments)
group by stu_id) B
where A.stu_id = B.stu_id
and A.x>1 and x<B.c
group by A.stu_id,b.c
_________________________________________________
環境:oracle 10g/TOAD 以上代碼均通過測試,如有問題,請聯系,謝謝
『玖』 面試題目(sql)
1、忍不住想說一句,因為第一題中的欄位類型是
【日期型】,而各種資料庫操作日期型數據有不同的方法,沒有一種共通的方法,所以脫離了資料庫而言沒有一種共通的sql。
2、select
ID,NAME,ADDRESS,PHONE,LOGDATE
from
T
where
ID
in(
select
ID
from
T
group
by
NAME
having
count(*)>1)
order
by
NAME;
3、delete
from
T
where
ID
not
in
(select
min(id)
from
T
group
by
name);
4、update
T
set
T.ADDRESS=(select
E.ADDRESS
from
E
where
E.NAME=T.NAME),
T.PHONE=(select
E.PHONE
from
E
where
E.NAME=T.NAME);
5、這個不同的資料庫也有不同的處理方法,不能脫離資料庫談了。
如:SqlServer或者access可以使用
top
oracle可以使用
rownum
等
---
以上,希望對你有所幫助。
『拾』 sql面試題
1.
select
s.title,
count(p.id)
from
書表
s
left
join
評論
p
on
s.id=p.書表中的id
group
by
s.title
(注意:左外連接的作用是將評價數為0的書顯示出來.count(p.id)和count(*)的區別是count(p.id)不計入p.id為null的行)
2.
select
top
1
s.title,
count(p.id)
from
書表
s
left
join
評論
p
on
s.id=p.書表中的id
group
by
s.title
order
by
2
desc
(以第2列倒序排序,取第1行)