sql经典面试题.docx
《sql经典面试题.docx》由会员分享,可在线阅读,更多相关《sql经典面试题.docx(26页珍藏版)》请在冰豆网上搜索。
sql经典面试题
1.张表,学生表S,课程C,学生课程表SC,学生可以选修多门课程,一门课程可以被各种学生选修,通过SC表关联;(SQL)
1)写出建表语句;
答:
建表语句如下(mysql数据库):
createtables(idintegerprimarykey,namevarchar(20));
createtablec(idintegerprimarykey,namevarchar(20));
createtablesc(
sidintegerreferencess(id),
cidintegerreferencesc(id),
primarykey(sid,cid)
);
2)写出SQL语句,查询选修了所有选修课程学生;
答:
SQL语句如下:
selectstu.id,stu.namefromsstu
where(selectcount(*)fromscwheresid=stu.id)=
(selectcount(*)fromc);
3)写出SQL语句,查询选修了至少5门以上课程学生。
答:
SQL语句如下:
selectstu.id,stu.namefromsstu
where(selectcount(*)fromscwheresid=stu.id)>=5;
2.数据库表(Test)构造如下:
(SQL)
IDNAMEAGEMANAGER(所属主管人ID)
106A30104
109B19104
104C1
107D35109
112E25120
119F45NULL
规定:
列出所有年龄比所属主管年龄大人ID和名字?
答:
SQL语句如下:
selectemployee.namefromtestemployeewhereemployee.age>
(selectmanager.agefromtestmanagerwheremanager.id=employee.manager);
3.有3个表(15分钟):
(SQL)
Student学生表(学号,姓名,性别,年龄,组织部门)
Course课程表(编号,课程名称)
Sc选课表(学号,课程编号,成绩)
表构造如下:
1)写一种SQL语句,查询选修了’计算机原理’学生学号和姓名(3分钟)
答:
SQL语句如下:
selectstu.sno,stu.snamefromStudentstu
where(selectcount(*)fromscwheresno=stu.snoandcno=
(selectcnofromCoursewherecname=’计算机原理’))!
=0;
2)写一种SQL语句,查询’周星驰’同窗选修了课程名字(3分钟)
答:
SQL语句如下:
selectcnamefromCoursewherecnoin(selectcnofromscwheresno=(selectsnofromStudentwheresname=’周星驰’));
3)写一种SQL语句,查询选修了5门课程学生学号和姓名(9分钟)
答:
SQL语句如下:
selectstu.sno,stu.snamefromstudentstu
where(selectcount(*)fromscwheresno=stu.sno)=5;
小小+霸霸+王王=小霸王
小=?
霸=?
王=?
用sql求证
参照答案:
declare@dataint,@iint,@jint,@lint
set@data=100
while(@data<=999)
begin
set@i=@data/100
set@j=@data/10%10
set@l=@data%10
if((@i+@j+@l)*11=@data)
begin
Select@datadata,@ii,@jj,@ll
break
end
set@data=@data+1
end;
分析:
II+JJ+LL=IJL
I*10+I+J*10+J+L*10+L=I*100+J*10+L
(I+J+L)*11
1.用一条SQL语句查询出每门课都不不大于80分学生姓名
namekechengfenshu
张三语文81
张三数学75
李四语文76
李四数学90
王五语文81
王五数学100
王五英语90
A:
selectdistinctnamefromtablewherenamenotin(selectdistinctnamefromtablewherefenshu<=80)
B:
selectnamefromtablegroupbynamehavingmin(fenshu)>80
2.一种叫depart表,里面只有一种字段team,一共有4条纪录,分别是a,b,c,d,相应四个球对,当前四个球对进行比赛,用一条sql语句显示所有也许比赛组合.
你先按你自己想法做一下,当作果有我这个简朴吗?
createtabledepart
(
teamvarchar(50)notnull
)
答:
selecta.team,b.teamfromdeparta,departbwherea.team3.请用SQL语句实现:
从TestDB数据表中查询出所有月份发生额都比101科目相应月份发生额高科目。
请注意:
TestDB中有诸多科目,均有1-12月份发生额。
AccID:
科目代码,Occmonth:
发生额月份,DebitOccur:
发生额。
数据库名:
JcyAudit,数据集:
Select*fromTestDB
答:
selecta.*
fromTestDBa
(selectOccmonth,max(DebitOccur)Debit101ccurfromTestDBwhereAccID='101'groupbyOccmonth)b
wherea.Occmonth=b.Occmonthanda.DebitOccur>b.Debit101ccur
4.阐明:
复制表(只复制构造,源表名:
a新表名:
b)
SQL:
select*intobfromawhere1<>1(where1=1,拷贝表构造和数据内容)
ORACLE:
createtableb
As
Select*fromawhere1=2
[<>(不等于)(SQLServerCompact)
比较两个表达式。
当使用此运算符比较非空表达式时,如果左操作数不等于右操作数,则成果为TRUE。
否则,成果为FALSE。
]
5.阐明:
拷贝表(拷贝数据,源表名:
a目的表名:
b)
SQL:
insertintob(a,b,c)selectd,e,ffroma;
6.阐明:
两张关联表,删除主表中已经在副表中没有信息
SQL:
Deletefrominfowherenotexists
(select*frominfobzwhereinfo.infid=infobz.infid)
7.有两个表A和B,均有key和value两个字段,如果Bkey在A中也有,就把Bvalue换为A中相应value这道题SQL语句怎么写?
updatebsetb.value=(selecta.valuefromawherea.key=b.key)whereb.idin(selectb.idfromb,awhereb.key=a.key);
8.为了便于阅读,查询此表后成果显式如下(及格分数为60):
courseidcoursenamescoremark
---------------------------------------------------
1java70pass
2oracle90pass
3xml40fail
4jsp30fail
5servlet80pass
---------------------------------------------------
写出此查询语句
selectcourseid,coursename,score,decode(sign(score-60),-1,'fail','pass')asmarkfromcourse
'decode'貌似在我SQLSERVER里无法辨认,可用如下办法代替
selectcourseid,coursename,score,
(casewhen(score-60)>=0then'pass'else'fail'end)asmark
fromcourse
************************************************************************************************
sql面试题
(2)
有表A,构造如下:
A:
p_IDp_Nums_id
11001
11202
2801
31101
3803
其中:
p_ID为产品ID,p_Num为产品库存量,s_id为仓库ID。
请用SQL语句实现将上表中数据合并,合并后数据为:
p_IDs1_ids2_ids3_id
110120
2800
31108
其中:
s1_id为仓库1库存量,s2_id为仓库2库存量,s3_id为仓库3库存量。
如果该产品在某仓库中无库存量,那么就是0代替。
成果:
selectp_id,
sum(casewhens_id=1thenp_numelse0end)ass1_id
sum(casewhens_id=2thenp_numelse0end)ass2_id
sum(casewhens_id=3thenp_numelse0end)ass3_id
frommyProgroupbyp_id
7。
为管理业务培训信息,建立3个表:
S(S#,SN,SD,SA)S#,SN,SD,SA分别代表学号,学员姓名,所属单位,学员年龄
C(C#,CN)C#,CN分别代表课程编号,课程名称
SC(S#,C#,G)S#,C#,G分别代表学号,所选课程编号,学习成绩
(1)使用原则SQL嵌套语句查询选修课程名称为’税收基本’学员学号和姓名?
答案:
selects#,snfromswhereS#in(selectS#fromc,scwherec.c#=sc.c#andcn=’税收基本’)
(2)使用原则SQL嵌套语句查询选修课程编号为’C2’学员姓名和所属单位?
答:
selectsn,sdfroms,scwheres.s#=sc.s#andsc.c#=’c2’
(3)使用原则SQL嵌套语句查询不选修课程编号为’C5’学员姓名和所属单位?
答:
selectsn,sdfromswheres#notin(selects#fromsc