2022年sql面试题 3.pdf
d snamesmoneysprovince1 zhangsan 2098A2 lisi3000B3 wangwu6789C4 liumazi4587C5 dongjiu3298B6 shiga4567Aid: 合同 idsname:姓名smoney : 业绩sprovince: 地区第一道:显示出业绩 大于同一地区平均值的合同 id姓名 地区 业绩第二道:把同一地区的平均业绩地区 插入到新表中(新表只包含两个字段即:平均业绩地区)请写出 sql 语句1:selectA.*from testAwhere A.smoney (select avg(B.smoney)from test Bwhere B.sprovince = B.sprovince)第二道:把同一地区的平均业绩地区 插入到新表中(新表只包含两个字段即:平均业绩 地区) 2.题目中要求是向新表中插入,所以这个表是存在的。不防取名新表名为newsell,字段 “ 平均业绩地区 ” 为“smoney,sprovince ”.insert intonewsell (smoney,sprovince)名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 9 页 - - - - - - - - - selectavg(smoney)avgmoney,sprovincefrom sell group by sprovince;select* from record where substring(id,1,4)=2398试题说这条语句效率很低,试修改成效率高的语句, select* from record where id like 2398%这条语句应该效率更高一些,看看大家还有没有更好的办法?一道 SQL题, 比较简单table:city_infoidprovincecityarea population数据大家自己加吧1. 找出大于 1000 平方公里且人口在1000W以上省份2. 找出城市名重复的记录3. 更新城市名重复的记录area 为 530,population为 5301.select* from city_infoas c where c.area1000 and c.population10002.selectcityfrom city_infogroup by cityhaving (count(*)13.update city_infoset area=530 and population=530where cityin (selectcityfrom city_infogroup by cityhaving (count(*)1)昨天去滨江的一个公司面试,遇到一个数据库的题目,总结下题目是这样的:Java 代码1. name score2. 小明胜3. 小明胜4. 小李负5. 小李负名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 9 页 - - - - - - - - - 6. 小明负7. 小李胜8. 小李胜要求结果是:Java 代码1. 姓名胜负2. 小明213. 小李22回来写了下, 也不是很难,但当时写的确实不准确,大概有个思路,但还是错了正确的写法应该是:Java 代码1. 1.selectname姓名,sum(decode(score,胜, 1)胜,2. sum(decode(score,负, 1)负 from ttgroup by name3. 2.selectt.name 姓名,t.c_1胜,a.c_f负 from4. (selectdistincttt.name,b.c_1from tt5.leftjoin(selectname,count( 1) as c_1 from ttwhere score= 胜group by name) b on tt.name= b.name ) t6.leftjoin(selectname,count( 1) as c_f from ttwhere score= 负group by name) a on t.name=a.name7. 3.sqlserver 的写法8. selectname,sum(case when score= 胜then 1 else0 end) 胜,sum(case when score= 负then 1 else0 end) 负 from ttgroup by nameoracle 的呀,晓得了。mysql 有像是的: if()博主第一题构思很巧妙Java 代码1. selectname,sum(if(score=fu,1, 0)fu,sum(if(score=sheng,1, 0) sheng2. from score3. group by name;名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 9 页 - - - - - - - - - 目前在职场中很难找到非常合格的数据库开发人员。有人说: “SQL 开发是一门语言,它很容易学,但是很难掌握。 ”在面试应聘的SQL Server数据库开发人员时,我运用了一套标准的基准技术问题。下面这些问题是我觉得能够真正有助于淘汰不合格应聘者的问题。它们按照从易到难的顺序排列。当你问到关于主键和外键的问题时, 后面的问题都十分有难度,因为答案可能会更难解释和说明,尤其是在面试的情形下。你能向我简要叙述一下SQL Server2000 中使用的一些 数据库对象 吗?你希望听到的答案包括这样一些对象:表格 、视图 、用户定义的函数 ,以及 存储过程 ;如果他们还能够提到像 触发器 这样的对象就更好了。 如果应聘者不能回答这个基本的问题,那么这不是一个好兆头。NULL 是什么意思 ?NULL( 空 )这个值是数据库世界里一个非常难缠的东西,所以有不少应聘者会在这个问题上跌跟头您也不要觉得意外。NULL 这个值表示UNKNOWN (未知):它不表示 “ ”(空字符串 )。假设您的 SQL Server 数据库里有ANSI_NULLS ,当然在默认情况下会有,对NULL 这个值的任何比较都会生产一个NULL 值。您不能把任何值与一个UNKNOWN 值进行比较,并在逻辑上希望获得一个答案。您必须使用IS NULL操作符。什么是索引 ?SQLServer2000 里有什么类型的索引 ?任何有经验的数据库开发人员都应该能够很轻易地回答这个问题。一些经验不太多的开发人员能够回答这个问题,但是有些地方会说不清楚。简单地说, 索引是一个数据结构 ,用来快速访问数据库表格或者视图里的数据。在 SQL Server里,它们有两种形式:聚集索引 和非聚集索引 。聚集索引在索引的叶级保存数据。这意味着不论聚集索引里有表格的哪个(或哪些 )字段,这些字段都会按顺序被保存在表格。由于存在这种排序,所以每个表格只会有一个聚集索引。非聚集索引在索引的叶级有一个行标识符。这个行标识符是一个指向磁盘上数据的指针。它允许每个表格有多个非聚集索引。什么是主键 ?什么是外键 ?主键是表格里的 (一个或多个 )字段,只用来定义表格里的行;主键里的值总是唯一的。外键是一个用来建立两个表格之间关系的约束。这种关系一般都涉及一个表格里的主键字段与另外一个表格(尽管可能是同一个表格)里的一系列相连的字段。那么这些相连的字段就是外键。什么是触发器 ?SQL Server2000 有什么不同类型的触发器?让未来的数据库开发人员知道可用的触发器类型以及如何实现它们是非常有益的。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 9 页 - - - - - - - - - 触发器是一种专用类型的存储过程,它被捆绑到 SQL Server2000 的表格或者视图上 。在 SQLServer2000 里,有 INSTEAD-OF 和 AFTER 两种触发器。 INSTEAD-OF 触发器是替代 数据操控语言(DataManipulation Language, DML) 语句对表格执行语句的存储过程。例如,如果我有一个用于TableA的 INSTEAD-OF-UPDATE触发器,同时对这个表格执行一个更新语句,那么 INSTEAD-OF-UPDATE触发器里的代码会执行,而不是我执行的更新语句则不会执行操作。AFTER 触发器要在 DML 语句在数据库里使用之后才执行。这些类型的触发器对于监视发生在数据库表格里的数据变化十分好用。您如何确一个带有名为Fld1 字段的 TableB 表格里只具有 Fld1 字段里的那些值, 而这些值同时在名为 TableA 的表格的 Fld1 字段里 ?这个与关系相关的问题有两个可能的答案。第一个答案(而且是您希望听到的答案)是使用外键限制。外键限制用来维护引用的完整性。它被用来确保表格里的字段只保存有已经在不同的(或者相同的)表格里的另一个字段里定义了的值。这个字段就是候选键(通常是另外一个表格的主键)。另外一种答案是触发器。触发器可以被用来保证以另外一种方式实现与限制相同的作用,但是它非常难设置与维护,而且性能一般都很糟糕。由于这个原因,微软建议开发人员使用外键限制而不是触发器来维护引用的完整性。对一个投入使用的在线事务处理表格有过多索引需要有什么样的性能考虑?你正在寻找进行与数据操控有关的应聘人员。对一个表格的索引越多,数据库引擎用来更新、插入或者删除数据所需要的时间就越多,因为在数据操控发生的时候索引也必须要维护。你可以用什么来确保表格里的字段只接受特定范围里的值?这个问题可以用多种方式来回答,但是只有一个答案是“ 好” 答案。您希望听到的回答是Check限制,它在数据库表格里被定义,用来限制输入该列的值。触发器也可以被用来限制数据库表格里的字段能够接受的值,但是这种办法要求触发器在表格里被定义, 这可能会在某些情况下影响到性能。因此,微软建议使用 Check 限制而不是其他的方式来限制域的完整性。如果应聘者能够正确地回答这个问题,那么他的机会就非常大了,因为这表明他们具有使用存储过程的经验。返回参数总是由存储过程返回,它用来表示存储过程是成功还是失败。返回参数总是INT 数据类型。OUTPUT 参数明确要求由开发人员来指定,它可以返回其他类型的数据,例如字符型和数值型的值。(可以用作输出参数的数据类型是有一些限制的。)您可以在一个存储过程里使用多个OUTPUT 参数,而您只能够使用一个返回参数。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 9 页 - - - - - - - - - 什么是相关子查询 ?如何使用这些查询?经验更加丰富的开发人员将能够准确地描述这种类型的查询。相关子查询是一种包含子查询的特殊类型的查询。查询里包含的子查询会真正请求外部查询的值,从而形成一个类似于循环的状况。这个是在知春路那边, 我去笔试过, 一共 5 到 sql 题目题目出的还可以。 答了 1 个半小时然后让你回去等消息原题大致是这样合同表cid 主键cidRegion(区域)Saler(销售员)Money( 合同金额 )1北京杨建1002上海社长2003杭州副团5004上海社长2005上海杨建4006北京社长3007北京杨建2008杭州副团1001. 查询每个区域有多少个销售人员并按区域倒叙排列2. 查询所有相同区域中合同金额最少的区域3. 查询表中合同金额小于所在区域平均合同金额的合同id有 3 个表 S,C ,SCS(SNO ,SNAME)代表(学号,姓名)C (CNO ,CNAME,CTEACHER)代表(课号,课名,教师)SC (SNO ,CNO ,SCGRADE)代表(学号,课号成绩)问题:1,找出没选过“黎明”老师的所有学生姓名。2,列出 2 门以上(含 2 门)不及格学生姓名及平均成绩。3,即学过 1 号课程有学过 2 号课所有学生的姓名。请用标准 SQL语言写出答案,方言也行(请说明是使用什么方言)。1、Sql 代码1.名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 6 页,共 9 页 - - - - - - - - - 2. selectsname from s3.joinsc on (s.sno=sc.sno)4.joinc on (o= o)5.where cteacher= 黎明2、Sql 代码1.2. selectsname,avg(scgrade)from3.(4.selects.sname, sc.scgradefrom s5.joinsc on (s.sno=sc.son)6.where sno in7.(8.selectsno from sc9.where scgrade=212.)13.)14.groupby sno;15.3Sql 代码1.2. selectsname from s3. where4. sno in(selectsno from distinctsc where cno = 1)5. and6. sno in(selectdistinctsno from sc where cno = 2)=此题目出处一个简单的表 TABLE有 100 条以上的信息,其中包括:产品颜色数量产品 1红色123产品 1蓝色126名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 9 页 - - - - - - - - - 产品 2蓝色103产品 2红色NULL产品 2红色89产品 1红色203。请用 SQL语句完成以下问题:1。 按产品分类,仅列出各类商品中红色多于蓝色的商品名称及差额数量:2。按产品分类,将数据按下列方式进行统计显示产品红色蓝色-Sql 代码1. createtablet2. (3.cp varchar2(10),4.ys varchar2(5),5.slnumber(5)6. );-Sql 代码1. insertintot values(产品 1,红色,123);2. insertintot values(产品 1,蓝色,126);3. insertintot values(产品 2,蓝色,103);4. insertintot values(产品 2,红色, null);5. insertintot values(产品 2,红色,89);6. insertintot values(产品 1,红色,203);-1.Sql 代码1. selectt1.cpfrom2.(3.selectcp,sum (sl)sum_slfrom t where ys= 红色group by cp4.) t15. join6.(7.selectcp,sum (sl)sum_slfrom t where ys= 蓝色group by cp名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 9 页 - - - - - - - - - 8.) t29. on t1.cp=t2.cp10.where t1.sum_slt2.sum_sl2.Sql 代码1. selectt1.cp产品, t1.sum_sl红色, t2.sum_sl蓝色from2.(3.selectcp,sum (sl)sum_slfrom t where ys= 红色group by cp4.) t15. join6.(7.selectcp,sum (sl)sum_slfrom t where ys= 蓝色group by cp8.) t29. on t1.cp=t2.cp名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 9 页,共 9 页 - - - - - - - - -