最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

sql面试题

来源:动视网 责编:小OO 时间:2025-09-23 18:05:06
文档

sql面试题

dsnamesmoneysprovince1zhangsan2098A2lisi3000B3wangwu67C4liumazi4587C5dongjiu3298B6shiga4567A  id:合同id sname:姓名    smoney:业绩    sprovince:地区 第一道:显示出 业绩大于同一地区平均值的合同id 姓名地区业绩  第二道:把同一地区的 平均业绩地区插入到新表中(新表只包含两个字段即:平均业绩地区)  请写出sql语句1:selectA.*fromtestAwh
推荐度:
导读dsnamesmoneysprovince1zhangsan2098A2lisi3000B3wangwu67C4liumazi4587C5dongjiu3298B6shiga4567A  id:合同id sname:姓名    smoney:业绩    sprovince:地区 第一道:显示出 业绩大于同一地区平均值的合同id 姓名地区业绩  第二道:把同一地区的 平均业绩地区插入到新表中(新表只包含两个字段即:平均业绩地区)  请写出sql语句1:selectA.*fromtestAwh

dsnamesmoneysprovince
1zhangsan2098A
2lisi3000B
3wangwu67C
4liumazi4587C
5dongjiu3298B
6shiga4567A
 

 

id:合同id  sname:姓名     smoney :业绩     sprovince:地区

 

第一道:显示出  业绩 大于同一地区平均值的 合同id  姓名 地区 业绩

 

 

第二道:把同一地区的  平均业绩 地区 插入到新表中 (新表只包含两个字段即:平均业绩 地区)

 

 

请写出sql语句

1: 

select A.* 

from test A 

where A.smoney > (select avg(B.smoney) 

                  from test B 

                  where B.sprovince = B.sprovince) 

"第二道:把同一地区的  平均业绩 地区 插入到新表中 (新表只包含两个字段即:平均业绩 地区)" 

2.题目中要求是向新表中插入,所以这个表是存在的。不防取名新表名为newsell,字段“平均业绩 地区”为“smoney,sprovince”. 

insert into  newsell (smoney,sprovince) 

select avg(smoney)avgmoney,sprovince 

from sell group by sprovince;

select * from record where substring(id,1,4)="2398" 试题说这条语句效率很低,试修改成效率高的语句,select * from record where id like "2398%" 这条语句应该效率更高一些,看看大家还有没有更好的办法?

一道SQL题,比较简单 

  table:city_info 

  id province city area population 

  数据大家自己加吧 

  1.找出大于1000平方公里且人口在1000W以上省份 

  2.找出城市名重复的记录 

  3.更新城市名重复的记录area为530,population为530 

 

 

1.select * from city_info as c where c.area> 1000 and c.population>1000

2.select city from city_info group by city having (count(*)) >1

3.update city_info set area=530 and population=530 where city in (select city from city_info group by city having (count(*)) >1)

昨天去滨江的一个公司面试,遇到一个数据库的题目,总结下 

    题目是这样的: 

Java代码 

1.name  score   

2.小明   胜   

3.小明   胜   

4.小李   负   

5.小李   负   

6.小明   负   

7.小李   胜   

8.小李   胜  

name  score

小明   胜

小明   胜

小李   负

小李   负

小明   负

小李   胜

小李   胜

要求结果是: 

Java代码 

1.姓名   胜    负   

2.小明   2     1  

3.小李   2     2  

姓名   胜    负

小明   2     1

小李   2     2

回来写了下,也不是很难,但当时写的确实不准确,大概有个思路,但还是错了 

   正确的写法应该是: 

Java代码 

1.1.select name 姓名,sum(decode(score,'胜',1)) 胜,   

2.sum(decode(score,'负',1)) 负 from tt group by name   

3.2.select t.name 姓名,t.c_1 胜,a.c_f 负 from    

4.(select distinct tt.name,b.c_1 from tt   

5. left join (select name,count(1) as c_1 from tt where score='胜' group by name) b on tt.name = b.name ) t   

6. left join (select name,count(1) as c_f from tt where score='负' group by name) a on t.name=a.name   

7.3.sql server的写法   

8.select name,sum(case when score='胜' then 1 else 0 end) 胜,sum(case when score='负' then 1 else 0 end) 负 from tt group by name  

1.select name 姓名,sum(decode(score,'胜',1)) 胜,

sum(decode(score,'负',1)) 负 from tt group by name

2.select t.name 姓名,t.c_1 胜,a.c_f 负 from 

(select distinct tt.name,b.c_1 from tt

 left join (select name,count(1) as c_1 from tt where score='胜' group by name) b on tt.name = b.name ) t

 left join (select name,count(1) as c_f from tt where score='负' group by name) a on t.name=a.name

3.sql server的写法

select name,sum(case when score='胜' then 1 else 0 end) 胜,sum(case when score='负' then 1 else 0 end) 负 from tt group by name

oracle的呀,晓得了。 

mysql有像是的:if() 

博主第一题构思很巧妙 

Java代码 

1.select name,sum(if(score='fu',1,0)) fu,sum(if(score='sheng',1,0)) sheng   

2.from score   

3.group by name;  

目前在职场中很难找到非常合格的数据库开发人员。有人说:“SQL开发是一门语言,它很容易学,但是很难掌握。” 

  在面试应聘的SQL Server数据库开发人员时,我运用了一套标准的基准技术问题。下面这些问题是我觉得能够真正有助于淘汰不合格应聘者的问题。它们按照从易到难的顺序排列。当你问到关于主键和外键的问题时,后面的问题都十分有难度,因为答案可能会更难解释和说明,尤其是在面试的情形下。 

  你能向我简要叙述一下SQL Server 2000中使用的一些数据库对象吗? 

  你希望听到的括这样一些对象:表格、视图、用户定义的函数,以及存储过程;如果他们还能够提到像触发器这样的对象就更好了。如果应聘者不能回答这个基本的问题,那么这不是一个好兆头。 

  NULL是什么意思? 

  NULL(空)这个值是数据库世界里一个非常难缠的东西,所以有不少应聘者会在这个问题上跌跟头您也不要觉得意外。 

  NULL这个值表示UNKNOWN(未知):它不表示“”(空字符串)。假设您的SQL Server数据库里有ANSI_NULLS,当然在默认情况下会有,对NULL这个值的任何比较都会生产一个NULL值。您不能把任何值与一个 UNKNOWN值进行比较,并在逻辑上希望获得一个答案。您必须使用IS NULL操作符。 

  什么是索引?SQL Server 2000里有什么类型的索引? 

  任何有经验的数据库开发人员都应该能够很轻易地回答这个问题。一些经验不太多的开发人员能够回答这个问题,但是有些地方会说不清楚。 

  简单地说,索引是一个数据结构,用来快速访问数据库表格或者视图里的数据。在SQL Server里,它们有两种形式:聚集索引和非聚集索引。聚集索引在索引的叶级保存数据。这意味着不论聚集索引里有表格的哪个(或哪些)字段,这些字段都会按顺序被保存在表格。由于存在这种排序,所以每个表格只会有一个聚集索引。非聚集索引在索引的叶级有一个行标识符。这个行标识符是一个指向磁盘上数据的指针。它允许每个表格有多个非聚集索引。 

  什么是主键?什么是外键? 

  主键是表格里的(一个或多个)字段,只用来定义表格里的行;主键里的值总是唯一的。外键是一个用来建立两个表格之间关系的约束。这种关系一般都涉及一个表格里的主键字段与另外一个表格(尽管可能是同一个表格)里的一系列相连的字段。那么这些相连的字段就是外键。 

  什么是触发器?SQL Server 2000有什么不同类型的触发器? 

  让未来的数据库开发人员知道可用的触发器类型以及如何实现它们是非常有益的。 

  触发器是一种专用类型的存储过程,它被捆绑到SQL Server 2000的表格或者视图上。在SQL Server 2000里,有INSTEAD-OF和AFTER两种触发器。INSTEAD-OF触发器是替代数据操控语言(Data Manipulation Language,DML)语句对表格执行语句的存储过程。例如,如果我有一个用于TableA的INSTEAD-OF-UPDATE触发器,同时对这个表格执行一个更新语句,那么INSTEAD-OF-UPDATE触发器里的代码会执行,而不是我执行的更新语句则不会执行操作。 

  AFTER触发器要在DML语句在数据库里使用之后才执行。这些类型的触发器对于监视发生在数据库表格里的数据变化十分好用。 

  您如何确一个带有名为Fld1字段的TableB表格里只具有Fld1字段里的那些值,而这些值同时在名为TableA的表格的Fld1字段里? 

  这个与关系相关的问题有两个可能的答案。第一个答案(而且是您希望听到的答案)是使用外键。外键用来维护引用的完整性。它被用来确保表格里的字段只保存有已经在不同的(或者相同的)表格里的另一个字段里定义了的值。这个字段就是候选键(通常是另外一个表格的主键)。 

  另外一种答案是触发器。触发器可以被用来保证以另外一种方式实现与相同的作用,但是它非常难设置与维护,而且性能一般都很糟糕。由于这个原因,微软建议开发人员使用外键而不是触发器来维护引用的完整性。 

  对一个投入使用的在线事务处理表格有过多索引需要有什么样的性能考虑? 

  你正在寻找进行与数据操控有关的应聘人员。对一个表格的索引越多,数据库引擎用来更新、插入或者删除数据所需要的时间就越多,因为在数据操控发生的时候索引也必须要维护。 

  你可以用什么来确保表格里的字段只接受特定范围里的值? 

  这个问题可以用多种方式来回答,但是只有一个答案是“好”答案。您希望听到的回答是Check,它在数据库表格里被定义,用来输入该列的值。 

  触发器也可以被用来数据库表格里的字段能够接受的值,但是这种办法要求触发器在表格里被定义,这可能会在某些情况下影响到性能。因此,微软建议使用Check而不是其他的方式来域的完整性。 

  如果应聘者能够正确地回答这个问题,那么他的机会就非常大了,因为这表明他们具有使用存储过程的经验。 

  返回参数总是由存储过程返回,它用来表示存储过程是成功还是失败。返回参数总是INT数据类型。 

  OUTPUT参数明确要求由开发人员来指定,它可以返回其他类型的数据,例如字符型和数值型的值。(可以用作输出参数的数据类型是有一些的。)您可以在一个存储过程里使用多个OUTPUT参数,而您只能够使用一个返回参数。 

  什么是相关子查询?如何使用这些查询? 

  经验更加丰富的开发人员将能够准确地描述这种类型的查询。 

  相关子查询是一种包含子查询的特殊类型的查询。查询里包含的子查询会真正请求外部查询的值,从而形成一个类似于循环的状况。

这个是在知春路那边,我去笔试过,一共5到sql题目 题目出的还可以。答了1个半小时 然后让你回去等消息  

原题大致是这样 合同表 cid主键 

cid  Region(区域)   Saler(销售员)  Money(合同金额) 

  1         北京           杨建               100 

  2         上海           社长               200 

  3         杭州           副团               500 

  4         上海           社长               200 

  5         上海           杨建               400 

  6         北京           社长               300 

  7         北京           杨建               200 

  8         杭州           副团               100 

1. 查询每个区域有多少个销售人员并按区域倒叙排列 

2. 查询所有相同区域中合同金额最少的区域 

3. 查询表中合同金额小于所在区域平均合同金额的合同id

有3个表S,C,SC 

S(SNO,SNAME)代表(学号,姓名) 

C(CNO,CNAME,CTEACHER)代表(课号,课名,教师) 

SC(SNO,CNO,SCGRADE)代表(学号,课号成绩) 

问题: 

1,找出没选过“黎明”老师的所有学生姓名。 

2,列出2门以上(含2门)不及格学生姓名及平均成绩。 

3,即学过1号课程有学过2号课所有学生的姓名。 

请用标准SQL语言写出答案,方言也行(请说明是使用什么方言)。 

1、 

Sql代码 

1.    

2.select sname from s    

3.  join sc on (s.sno =sc.sno )    

4.  join c on (c.cno = sc.cno)    

5.  where cteacher = '黎明'   

 

select sname from s 

  join sc on (s.sno =sc.sno ) 

  join c on (c.cno = sc.cno) 

  where cteacher = '黎明' 

2、 

Sql代码 

1.    

2.select sname,avg(scgrade) from  

3.  (   

4.    select s.sname, sc.scgrade from s   

5.    join sc on (s.sno =sc.son )   

6.    where sno in    

7.    (   

8.      select sno from sc    

9.      where scgrade<60    

10.      group by sno    

11.      haviing count(*)>=2   

12.    )   

13.  )   

14.group by sno;   

15.   

 

select sname,avg(scgrade) from

  (

    select s.sname, sc.scgrade from s

    join sc on (s.sno =sc.son )

    where sno in 

    (

      select sno from sc 

where scgrade<60

      group by sno 

haviing count(*)>=2

    )

  )

group by sno;

 

Sql代码 

1.    

2.select sname from s    

3.where    

4.sno in (select sno from distinct sc where cno = 1)    

5.and    

6.sno in (select distinct sno from sc where cno = 2)   

 

select sname from s 

where 

sno in (select sno from distinct sc where cno = 1) 

and 

sno in (select distinct sno from sc where cno = 2) 

====================================================================== 

此题目出处 

一个简单的表TABLE   有100条以上的信息,其中包括:   

  产品                   颜色                           数量   

  产品1               红色                           123   

  产品1               蓝色                           126   

  产品2               蓝色                           103   

  产品2               红色                           NULL   

  产品2               红色                              

  产品1               红色                           203   

  。。。。。。   

  请用SQL语句完成以下问题:       

  1。按产品分类,仅列出各类商品中红色多于蓝色的商品名称及差额数量:     

  2。按产品分类,将数据按下列方式进行统计显示   

              产品                   红色                       蓝色 

------------------------------------------ 

Sql代码 

1.create table t   

2.(   

3.  cp varchar2(10),   

4.  ys varchar2(5),   

5.  sl number(5)   

6.);  

create table t

(

  cp varchar2(10),

  ys varchar2(5),

  sl number(5)

);

------------------------------------------ 

Sql代码 

1.insert into t values('产品1','红色',123 );   

2.insert into t values('产品1','蓝色',126 );   

3.insert into t values('产品2','蓝色',103 );   

4.insert into t values('产品2','红色',null );   

5.insert into t values('产品2','红色', );   

6.insert into t values('产品1','红色',203 );  

insert into t values('产品1','红色',123 );

insert into t values('产品1','蓝色',126 );

insert into t values('产品2','蓝色',103 );

insert into t values('产品2','红色',null );

insert into t values('产品2','红色', );

insert into t values('产品1','红色',203 );

------------------------------------------ 

1. 

Sql代码 

1.select t1.cp  from    

2.  (   

3.    select cp, sum(sl) sum_sl  from t where ys='红色' group by cp   

4.  ) t1   

5.join    

6.  (   

7.    select cp, sum(sl) sum_sl  from t where ys='蓝色' group by cp   

8.  ) t2   

9.on t1.cp=t2.cp   

10.where t1.sum_sl >t2.sum_sl  

select t1.cp  from 

  (

    select cp, sum(sl) sum_sl  from t where ys='红色' group by cp

  ) t1

join 

  (

    select cp, sum(sl) sum_sl  from t where ys='蓝色' group by cp

  ) t2

on t1.cp=t2.cp

where t1.sum_sl >t2.sum_sl

2. 

Sql代码 

1.select t1.cp 产品, t1.sum_sl 红色, t2.sum_sl 蓝色  from    

2.  (   

3.    select cp, sum(sl) sum_sl  from t where ys='红色' group by cp   

4.  ) t1   

5.join    

6.  (   

7.    select cp, sum(sl) sum_sl  from t where ys='蓝色' group by cp   

8.  ) t2   

9.on t1.cp=t2.cp  

select t1.cp 产品, t1.sum_sl 红色, t2.sum_sl 蓝色  from 

  (

    select cp, sum(sl) sum_sl  from t where ys='红色' group by cp

  ) t1

join 

  (

    select cp, sum(sl) sum_sl  from t where ys='蓝色' group by cp

  ) t2

on t1.cp=t2.cp

文档

sql面试题

dsnamesmoneysprovince1zhangsan2098A2lisi3000B3wangwu67C4liumazi4587C5dongjiu3298B6shiga4567A  id:合同id sname:姓名    smoney:业绩    sprovince:地区 第一道:显示出 业绩大于同一地区平均值的合同id 姓名地区业绩  第二道:把同一地区的 平均业绩地区插入到新表中(新表只包含两个字段即:平均业绩地区)  请写出sql语句1:selectA.*fromtestAwh
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top