SQL Server面试题目精选 包含答案.docx
- 文档编号:8560486
- 上传时间:2023-01-31
- 格式:DOCX
- 页数:22
- 大小:28.17KB
SQL Server面试题目精选 包含答案.docx
《SQL Server面试题目精选 包含答案.docx》由会员分享,可在线阅读,更多相关《SQL Server面试题目精选 包含答案.docx(22页珍藏版)》请在冰豆网上搜索。
SQLServer面试题目精选包含答案
InsertInto数据表名称(字段名称1,字段名称2,...)values(字段值1,字段值2,...)
insertintouser(username,password,age)values('李老四','6666',45)
Update数据表名称Set字段名称=字段值,字段名称=字段值,...[Where条件]
DeleteFrom数据表
下列查询返回在LONDON(伦敦)或SEATTLE(西雅图)的所有雇员:
SELECT*FROMemployeesWHEREUPPER(city)IN('LONDON','SEATTLE')
下面示例利用DATEDIFF函数,确定在pubs数据库中标题发布日期和当前日期间的天数。
SELECTDATEDIFF(day,OrderDate,getdate())ASno_of_daysFROMtable1
返回字符串"wonderful"在titles表的notes列中开始的位置。
SELECTCHARINDEX('wonderful',notes)
以下是返回的结果:
(第47个字符位置)
显示工作站的名称:
selecthost_name()as[ClientComputerName]
下例是检索titles表中百分之五十的书。
如果titles表中包含了18行,则将检索前9行。
SELECTTOP50PERCENTtitleFROMtitles
字段名称[Not]Between起始值and终止值
列出BOOK表中30至50元的书
select*frombookwherepricebetween30and50
字段名称[Not]In(列出值1,列出值2,...)
从BOOK表中列出价格为30,40,50,60的所有书
select*frombookwherepricein(30,40,50,60)
字段名称[Not]Like"通配符"
列出BOOK表中出版社含电的所有记录
select*frombookwherepublishinglike'*电*'
列出BOOK表中出版社第一个字是电的所有记录
select*frombookwherepublishinglike'电*'
---
selectSum/Count/Avg/Max/Min(字段名称)[As新名称]From数据表名称
sum求和:
求出总价格做为合计字段
selectsum(price)as合计frombook
count统计数量:
统计BOOK表中有多少条记录做为数量字段
selectcount(id)as数量frombook
AVG平均:
算出BOOK表中所有书的平均价格
selectavg(price)as平均价格frombook
MAX最大:
列出BOOK表中最贵的书
selectmax(price)as最贵书frombook
MIN最小:
selectmin(price)as最便宜书frombook
交叉联接:
SELECT*FROMtable1CROSSJOINtable2
selectx.[name],y.[name]fromxleftjoinyonx.[refid]=y.id
selecty.[name],x.[name]fromxrightjoinyonx.[refid]=y.id
表联接查询
SELECTt1.ProductID,t2.VendorID,t2.Name
FROMtable1t1,table2t2
WHEREt1.VendorID=t2.VendorID
ANDStandardPrice>$10
ANDNameLIKE'F%'
SELECTProductID,talbe2.VendorID,Name
FROMtable1JOINtable2
ON(table1.VendorID=table2.VendorID)
WHEREStandardPrice>$10
ANDNameLIKE'F%'
COMPUTEby子句
可选BY关键字。
它基于每一列计算指定的行聚合。
行聚合函数名称。
包括SUM、AVG、MIN、MAX或COUNT。
要对其执行行聚合函数的列。
SELECTRateId,ConnectionFee,Rate
FROMUTC_Rate
ORDERBYRateId
COMPUTESUM(ConnectionFee),SUM(Rate)--Compute用法(总计)
SELECTRateId,ConnectionFee,Rate
FROMUTC_Rate
ORDERBYRateId
COMPUTESUM(ConnectionFee),SUM(Rate)BYRateId--Computeby用法(小计)
DISTINCT
指定AVG只在每个值的唯一实例上执行,而不管该值出现了多少次。
SELECTAVG(DISTINCTRate)—-计算不重复Rate的avg
FROMUTC_Rate
SELECTdistinctRateFROMUTC_Rate
表的复制Selectinto
SELECT*intonewtableFROMoldtable
联合查询UNION所有查询中的列数和列的顺序必须相同,数据类型必须兼容
SELECTCountry,FirstName,LastNameFROMEmployees
UNIONSELECTCountry,NULL,NULLFROMRegions;
子查询:
--使用聚合函数
SELECTtitleFROMtitles
WHEREadvance>
(SELECTmax(advance)
FROMpublishersINNERJOINtitlesON
titles.pub_id=publishers.pub_id
WHEREpub_name='NewMoonBooks')
--使用all
SELECTtitleFROMtitles
WHEREadvance>all
(SELECTadvance
FROMpublishersINNERJOINtitlesON
titles.pub_id=publishers.pub_id
WHEREpub_name='NewMoonBooks')
--嵌套
SELECTfield
FROMtable1
WHEREidIN
(SELECTid
FROMtable2
WHEREtitle_idIN
(SELECTtitle_id
FROMtable3
WHEREtitle_idlike'PC%'))
--EXISTS和NOTEXISTS查找交集与差集
SELECTDISTINCTfieldFROMtable1
WHEREEXISTS
(SELECT*FROMtable2WHEREtable1.field=table2.field)
--等效
SELECTDISTINCTtable1.field
FROMtable1INNERJOINtable2
ONtable1.field=publishers.field
--差集
SELECTDISTINCTfield
FROMtable1
WHERENOTEXISTS
(SELECT*FROMtable2WHEREtable1.field=table2.field)
--等效
SELECTDISTINCTfield
FROMtable1
WHEREfieldNOTIN
(SELECTfield
FROMtable2)
指定组或聚合的搜索条件。
HAVING只能与SELECT语句一起使用。
HAVING通常在GROUPBY子句中使用。
如果不使用GROUPBY子句,则HAVING的行为与WHERE子句一样。
SELECTid,SUM(price)
FROMSales
GROUPBYid
HAVINGSUM(price)>10.00--检索超过$10.00的每个ID的总计
ORDERBYid;
更新表:
UPDATEtitles
SETprice=price*2
WHEREpub_idIN
(SELECTpub_id
FROMpublishers
WHEREpub_name='NewMoonBooks')
1:
找出那些工资高于他们所在部门的manager的工资的员工。
selectw.ename,w.sal,w.mgr,m.empno,m.ename,m.sal
fromempw,empm
wherew.mgr=m.empnoandw.sal>m.sal
2:
哪些人是领导?
selectdistinctm.enamefromempw,empm
wherew.mgr=m.empno
selectenamefromempwhereempnoin(selectmgrfromemp)
selectenamefromempowhereexists(select'a'fromempiwhereo.empno=i.mgr)
3:
哪些人不是领导?
selectm.enamefromempm,empw
wherem.empno=w.mgr(+)
andw.mgrisnull
selectenamefromempwhereempnonotin(selectmgrfromempwheremgrisnotnull)
selectenamefromempowherenotexists(select'a'fromempiwhereo.empno=i.mgr)
哪个部门没有员工?
哪个学生没有选课?
哪个部门没有smith这个人?
selectename,emp.deptno,dept.deptno,dnamefromemp,dept
whereemp.deptno(+)=dept.deptno
andename(+)='SMITH'
andenameisnull
4:
找出公司里收入最高的前三名员工:
SQL>selectrownum,last_name,salary
2from(selectlast_name,salary
3froms_emp
4orderbysalarydesc)
5whererownum<=3;
ROWNUMLAST_NAMESALARY
---------------------------------------------
1Velasquez4750
2Ropeburn2945
3Nguyen2897.5
不用max找出工资最高的人?
5:
找出表中的某一行或某几行的数据:
SQL>l
1selectlast_name,salary
2from(selectrownuma,b.*
3froms_empb)
4*wherea=3
SQL>/
LAST_NAMESALARY
-----------------------------------
Nagayama2660
6:
找出第三行到第五行之间的数据:
SQL>l
1selectlast_name,salary
2from(selectrownuma,b.*
3froms_empbwhererownum<=5)
4*whereabetween3and5
SQL>/
LAST_NAMESALARY
-----------------------------------
Nagayama2660
Quick-To-See2755
Ropeburn2945
7:
找出那些工资高于他们所在部门的平均工资的员工。
(1):
第一种方法:
SQL>selectlast_name,dept_id,salary
2froms_empa
3wheresalary>(selectavg(salary)
4froms_emp
5wheredept_id=a.dept_id);
LAST_NAMEDEPT_IDSALARY
---------------------------------------------
Velasquez504750
Urguhart412280
Menchu422375
Biri432090
Catchpole442470
Havel452483.3
Nguyen342897.5
Maduro412660
Nozaki422280
Schwartz452090
10rowsselected.
(2):
第二种方法:
SQL>l
1selecta.last_name,a.salary,a.dept_id,b.avgsal
2froms_empa,(selectdept_id,avg(salary)avgsal
3froms_emp
4groupbydept_id)b
5wherea.dept_id=b.dept_id
6*anda.salary>b.avgsal
SQL>/
LAST_NAMESALARYDEPT_IDAVGSAL
-------------------------------------------------------
Velasquez4750503847.5
Urguhart2280412181.5
Menchu2375422055.16667
Biri2090431710
Catchpole2470441995
Havel2483.3452069.1
Nguyen2897.5342204
Maduro2660412181.5
Nozaki2280422055.16667
Schwartz2090452069.1
10rowsselected.
8:
找出重复数据:
SQL>l
1selectrowid,e.*fromae
2*wheree.rowid>(selectmin(x.rowid)fromaxwherex.bm=e.bmandx.mc=e.mc);
ROWIDBMMC
------------------------------------------
AAABdcAAGAAAAYyAAE11111111
AAABdcAAGAAAAYyAAF11121111
AAABdcAAGAAAAYyAAG11131111
AAABdcAAGAAAAYyAAH11141111
9:
删除重复数据:
SQL>l
1deletefroma
2whererowidin(selectrowidfromae
3*wheree.rowid>(selectmin(x.rowid)fromaxwherex.bm=e.bmandx.mc=e.mc))
SQL>/
10:
行列转置
selectsname,
max(decode(cname,'wuli',result,null))wuli,
max(decode(cname,'shuxue',result,null))shuxue
fromstu,cou,rou
wherestu.sno=rou.sno
ando=o
groupbysname
SNAMEWULISHUXUE
------------------------------
lisi8988
zhangsan9998
请在SQLServer中设计表来保存一个树状结构的组织图(假定结构图中只有名称这一项内容需要保存),如果我想查询某一职位下的所有职位,用一个存储过程来实现,你有什么思路?
答:
三个字段Id(可以自增),Name,ParendId,其中ParendId是父结点的ID。
使用存储过程查询一个职位下的所有职位,存储过程需要一个输入参数,这个参数就是父结点的id,可以查询ParendId等于输入参赛id,查询所有这个职位下的职位的记录。
一个新闻系统,有两张表,news表,new_class表,表结构如下:
表参加原始文档
其中2张表的newsID字段是关联的,请写出您写出classID是101101的新闻标题的SQL语句:
答:
selectN.titlefromNewsN,News_classCwhereN.NewsId=C.NewsIdandC.NewsId=101101
写出一条Sql语句:
取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:
ID可能不是连续的。
)
Selecttop10*fromawhereidnotin(selecttop30idfroma);go
SQLSERVER服务器中,给定表table1中有两个字段ID、LastUpdateDate,ID表示更新的事务号,LastUpdateDate表示更新时的服务器时间,请使用一句SQL语句获得最后更新的事务号。
selecttop1idfromtable1orderbylastupdatedesc
selectidfromtable1wherelastupdate=(selectmax(lastipdate)fromtable1)
写出一条Sql语句:
取出表A中第31到第40记录(SQLServer,以自动增长的ID作为主键,注意:
ID可能不是连续的。
)
Selecttop10*fromawhereidnotin(selecttop30idfroma);go
有一人事表,计算两个同时入职的员工的生日的差,用一句SQL语句将EGTB1中的结果变成EGTB2的结果?
Selectdeffdate(ss,'2005-03-20','2005-03-28')fromtabletherec1.datetime=c2.datetime
SQL中游标的定义?
类似于指针,它用于指向的某一行即为选定或执行到的当前行
基本的步骤:
声明游标、打开游标、提取数据、关闭游标。
如何在定义游标的时候使用动态sql语句?
declare@qanvarchar(200)
declare@iint
declare@sqlnvarchar(255)
set@i=1
while@i<=5
begin
set@sql='declarecurcursorfor
selectq'+convert(nvarchar
(2),@i)+'fromImportSurveyInfo'
set@i=@i+1
exec(@sql)
opencur
fetchcurinto@qa
select@qa
closecur
deallocatecur
end
产品表 销售计划表
ProductID 产品名 单价ProductID客户名 订货数量 销售单价
1name11102m2250
2name22201n3110
3name33303n1300
4name4440 4m2400
a.是否能删除产品表中的name2?
请说明理由与过程。
答案:
不能,两表都用ProductId做字段,要删除name2也要删除销售计划表ProductId为2的一行
………………………………………………………………………………………………
b.将销售计划表中m客户的产品名为name2的销售单价更换为产品表中相应的单价
update销售计划表set销售单价=select单价from产品表innerjoin销售计划表
on产品表.ProductID=销售计划表.ProductIDwhere客户名=m
…………………………………………………………………………………
c.求销售计划表中各客户各自的销售总金额的sql语句
selecttotal(销售单价*订货数量)as销售总金额from销售计划表groupby客户名
………………………………………………………………………………
d.求客户中销售总量最大的销售总金额的客户的sql语句
selectmax(销售单价*订货数量)as销售总金额from销售计划表groupby客户名
…………………………………………………………………………………
e.什么是事务(transaction)?
它有什么好处。
将更改数据库的操作作为一个单元来提交或取消.
原子性(全部执行),
一致性(所有的数据保持一致状态),
隔离性(由并发事物所做的修改必须与任何其他并发食务所做的修改隔离),
持久性(完成事务,对系统的影响是永久性的)
………………………………………………………………………………………
f.updatetable2...数据库为默认设置能不能开始事务?
为什么
答案:
数据库开发技巧:
内容:
1、开发人员如果用到其他库的Table或View,务必在当前库中建立View来实现跨库操作,最好不要直接使用“databse.dbo.table_name”,因为sp_depends不能显示出该SP所使用的跨库table或view,不方便校验。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SQL Server面试题目精选 包含答案 Server 面试 题目 精选 包含 答案