数据库面试宝典Word文档下载推荐.docx
- 文档编号:22681239
- 上传时间:2023-02-05
- 格式:DOCX
- 页数:14
- 大小:18.27KB
数据库面试宝典Word文档下载推荐.docx
《数据库面试宝典Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据库面试宝典Word文档下载推荐.docx(14页珍藏版)》请在冰豆网上搜索。
注意:
请大家分析一下一下语句为什么不对:
=3
orderbysalarydesc;
3Nagayama
2660
2Ngao
2000
2:
找出表中的某一行或某几行的数据:
(1):
找出表中第三行数据:
用以下方法是不行的,因为rownum后面至可以用<
或<
=号,不可以用=,>
号和其它的比较符号。
select*froms_emp
whererownum=3;
norowsselected
whererownumbetween3and5;
正确的方法如下:
l
1
selectlast_name,salary
from(selectrownuma,b.*
froms_empb)
4*wherea=3
/
LAST_NAME
-----------------------------------
Nagayama
(2):
找出第三行到第五行之间的数据:
4*whereabetween3and5
Quick-To-See
2755
Ropeburn
3:
找出那些工资高于他们所在部门的平均工资的员工。
第一种方法:
selectlast_name,dept_id,salary
froms_empa
wheresalary>
(selectavg(salary)
wheredept_id=a.dept_id);
DEPT_ID
---------------------------------------------
Velasquez
50
Urguhart
41
2280
Menchu
42
2375
Biri
43
2090
Catchpole
44
2470
Havel
45
2483.3
Nguyen
34
2897.5
Maduro
2660
Nozaki
Schwartz
45
10rowsselected.
第二种方法:
selecta.last_name,a.salary,a.dept_id,b.avgsal
froms_empa,(selectdept_id,avg(salary)avgsal
froms_emp
groupbydept_id)b
wherea.dept_id=b.dept_id
6*anda.salary>
b.avgsal
SALARY
AVGSAL
-------------------------------------------------------
4750
3847.5
2280
41
2181.5
2375
422055.16667
2090
43
1710
2470
1995
2483.3
2069.1
2897.5
34
2204
2660
4:
找出那些工资高于他们所在部门的manager的工资的员工。
selectid,last_name,salary,manager_id
(selectsalary
5*
whereid=a.manager_id)
IDLAST_NAME
SALARYMANAGER_ID
-------------------------------------------------------
6Urguhart
2
7Menchu
8Biri
9Catchpole
10Havel
12Giljum
2831
3
13Sedeghi
2878.5
14Nguyen
15Dumas
2755
16Maduro
6
找出部门工资排名第二,三的员工
selectname,salary,deptnofrom(
selectconcat(last_name,first_name)name,salary,department_iddeptno,
rank()over(partitionbydepartment_idorderbysalarydesc)rnk
4*
fromemployees)wherernk=2orrnk=3
NAME
--------------------------------------------------------------------------------
DEPTNO
--------------------
FayPat
6000
20
KhooAlexander
3100
30
BaidaShelli
2900
WeissMatthew
8000
50
KauflingPayam
7900
ErnstBruce
60
AustinDavid
4800
PataballaValli
PartnersKaren
13500
80
ErrazurizAlberto
12000
KochharNeena
17000
90
DeHaanLex
FavietDaniel
9000
100
ChenJohn
8200
GietzWilliam
8300
110
15rowsselected.
又是一道面试题:
原表:
idproidproname
11M
12F
21N
22G
31B
32A
查询后的表:
idpro1pro2
1MF
2NG
3BA
写出查询语句
idproidproname
11M
12F
21N
22G
31B
32A
idpro1pro2
1MF
2NG
3BA
解决方案可有以下三种作参考:
使用pl/sql代码实现,但要求你组合后的长度不能超出oraclevarchar2长度的限制。
下面是一个例子
createorreplacetypestrings_tableistableofvarchar2(20);
/
createorreplacefunctionmerge(pvinstrings_table)returnvarchar2
is
lsvarchar2(4000);
begin
foriin1..pv.countloop
ls:
=ls||pv(i);
endloop;
returnls;
end;
createtablet(idnumber,namevarchar2(10));
insertintotvalues(1,'
Joan'
);
Jack'
Tom'
insertintotvalues(2,'
Rose'
Jenny'
columnnamesformata80;
selectt0.id,merge(cast(multiset(selectnamefromtwheret.id=t0.id)asstrings_table))names
from(selectdistinctidfromt)t0;
droptypestrings_table;
dropfunctionmerge;
droptablet;
用sql:
Wellifyouhaveathoreticalmaximum,whichIwouldassumeyouwouldgiventhelegibilityoflistinghundredsofemployeesinthewayyoudescribethenyes.ButtheSQLneedstousetheLAGfunctionforeachemployee,henceahundredempsahundredLAGs,sokindofbulky.
Thisexampleusesamaxof6,andwouldneedmorecutnpastingtodomorethanthat.
selectdeptno,dname,emps
2from(
3selectd.deptno,d.dname,rtrim(e.ename||'
'
||
4lead(e.ename,1)over(partitionbyd.deptno
5orderbye.ename)||'
6lead(e.ename,2)over(partitionbyd.deptno
7orderbye.ename)||'
8lead(e.ename,3)over(partitionbyd.deptno
9orderbye.ename)||'
10lead(e.ename,4)over(partitionbyd.deptno
11orderbye.ename)||'
12lead(e.ename,5)over(partitionbyd.deptno
13orderbye.ename),'
)emps,
14row_number()over(partitionbyd.deptno
15orderbye.ename)x
16fromempe,deptd
17whered.deptno=e.deptno
18)
19wherex=1
20/
DEPTNODNAMEEMPS
------------------------------------------------------------
10ACCOUNTINGCLARK,KING,MILLER
20RESEARCHADAMS,FO
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 面试 宝典