當前位置:首頁 » 編程語言 » sql50道面試題知乎
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

sql50道面試題知乎

發布時間: 2022-06-06 18:54:43

『壹』 求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語句 面試題

A.創建表格CODE省略

註明:學生表PK stu_id 課程表pk cos_id 分數表PK enrollment_id FK stu_id,cos_id

B.插入數據code省略

C.Query

  1. 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;

  2. 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%';

  3. 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

  4. 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;

  5. update student

    set avg_grade =(select avg(grade) X from enrollments group by stu_id

    having student.stu_id = enrollments.stu_id);

  6. 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資料庫面試題 急急急

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面試題,請大神解答,急!!!

第一題,最高的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面試題

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行)

『陸』 資料庫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 -- 變動日期
);

『柒』 sql語句的面試題目

select (sum(id)+sum(no)) from table1