sql面试题.doc
优质文本常见面试题总结1.用一条语句 查询出每门课都大于80分的学生姓名 张三 语文 81张三 数学 75李四 语文 76李四 数学 90王五 语文 81王五 数学 100王五 英语 90A: ( <=80)2.学生表 如下:自动编号 学号 姓名 课程编号 课程名称 分数1 2005001 张三 0001 数学 692 2005002 李四 0001 数学 893 2005001 张三 0001 数学 69删除除了自动编号不同,其他都相同的学生冗余信息A: 自动编号 ( (自动编号) 学号,姓名,课程编号,课程名称,分数)一个叫的表,里面只有一个字段,一共有4条纪录,分别是,对应四个球对,现在四个球对进行比赛,用一条语句显示所有可能的比赛组合.你先按你自己的想法做一下,看结果有我的这个简单吗?答: , a, b < 请用语句实现:从数据表中查询出所有月份的发生额都比101科目相应月份的发生额高的科目。请注意:中有很多科目,都有112月份的发生额。:科目代码,:发生额月份,:发生额。数据库名:,数据集: * 答: a.* a ,( () 101 '101' ) b >101*面试题:怎么把这样一个表儿 1991 1 1.11991 2 1.21991 3 1.31991 4 1.41992 1 2.11992 2 2.21992 3 2.31992 4 2.4查成这样一个结果 m1 m2 m3 m41991 1.1 1.2 1.3 1.41992 2.1 2.2 2.3 2.4 答案一、 , ( m 1 ) m1,( m 2 ) m2,( m 3 ) m3,( m 4 ) m4 这个是 中做的: * ( , b1, () ( ) b2, (m,2) ( ) b3()( ) t) 1;*精妙的语句!精妙语句 说明:复制表(只复制结构,源表名:a 新表名:b) : * b a 1<>1 说明:拷贝表(拷贝数据,源表名:a 目标表名:b) : b(a, b, c) b; 说明:显示文章、提交人和最后回复时间 : a,( () ) b 说明:外连接查询(表名1:a 表名2:b) : , , , , , a b = 说明:日程安排提前五分钟提醒 : * 日程安排 (''开始时间()>5 说明:两张关联表,删除主表中已经在副表中没有的信息 : ( * ) 说明: : , , , 1, ( , , ( , , , 2 (,'') = (, '') X, ( , , 2 (,'') = (, '') ¦¦ '/01','') - 1, '') ) Y, = + + (,0) <> ) B = 说明: : * ( * ) 系名称='""' 专业名称='""' 性别,生源地,高考总成绩 说明: 从数据库中去一年的各单位 费统计( 费定额贺电化肥清单两个表来源 : , , , (, '') , (, ''), '01', ) , (, ''), '02', ) , (, ''), '03', ) , (, ''), '04', ) , (, ''), '05', ) , (, ''), '06', ) , (, ''), '07', ) , (, ''), '08', ) , (, ''), '09', ) , (, ''), '10', ) , (, ''), '11', ) , (, ''), '12', ) ( , , , , a, b = ) a , , , (, '') 说明:四表联查问题: : * a b c d . 说明:得到表中最小的未使用的号 : ( ( * b = 1) () + 1 1 ) ( - 1 a)*有两个表A和B,均有和两个字段,如果B的在A中也有,就把B的换为A中对应的这道题的语句怎么写? b ( a ) ( );*高级面试题原表: 1 70 2 90 3 40 4 30 5 80 为了便于阅读,查询此表后的结果显式如下(及格分数为60): 1 70 2 90 3 40 4 30 5 80 写出此查询语句没有装,没试过 , (60)1,'','') 完全正确 > ? 2(10) > * ; 1 70 2 90 3 40 4 30 5 80 > , (60)1,'','') ; 1 70 2 90 3 40 4 30 5 80 *原表: 1 1 M 1 2 F 2 1 N 2 2 G 3 1 B 3 2 A 查询后的表: 1 2 1 M F 2 N G 3 B A 写出查询语句解决方案 求解 表a 列 a1 a2 记录 1 a 1 b 2 x 2 y 2 z 用能选成以下结果吗? 1 2 使用代码实现,但要求你组合后的长度不能超出 2长度的限制。 下面是一个例子 2(20); / ( ) 2 2(4000); i 1 (i); ; ; ; / t ( 2(10); t (1,''); t (1,''); t (1,''); t (2,''); t (2,''); a80; t0( t = t0) ) ( t) t0; ; ; t; 用: a , I . , a a , . a 6, n . > , , 2 ( 3 , , ( ', ' 4 (,1) ( 5 ) ', ' 6 (,2) ( 7 ) ', ' 8 (,3) ( 9 ) ', ' 10 (,4) ( 11 ) ', ' 12 (,5) ( 13 ),', ') , 14 () ( 15 ) x 16 e, d 17 = 18 ) 19 x = 1 20 / 10 , , 20 , , , , , 30 , , , , , 先 2; 2( 1 ) 2 2 2(4000); 2'' ( a2 a11) 222; ; 2; 2; a1 2(a1) 1 2 3 *一个 面试题 去年应聘一个职位未果,其间被考了一个看似简单的题,但我没有找到好的大案.不知各位大虾有无好的解法?题为:有两个表, t1, t2, t1: | A BA CA DB AB CB DC AC BC DD AD BD C t2: | | A 9 100B 9 200C 9 300D 9 400A 9.5 100B 9.5 20A 10 80要求用 语句列出如下结果如A的()为的和的()为的和.且用的方法不要增加数据库负担,如用临时表等. | () A 9 900B 9 800C 9 700D 9 600 A 9.5 20B 9.5 100C 9.5 120D 9.5 120A 10 0B 10 80C 10 80D 10 80关于论坛上那个微软面试题问题:一百个账户各有100$,某个账户某天如有支出那么添加一条新记录,记录其余额。一百天后,请输出每天所有账户的余额信息 这个问题的难点在于每个用户在某天可能有多条纪录,也可能一条纪录也没有不包括第一天返回的记录集是一个100天*100个用户的纪录集下面是我的思路:1.创立表并插入测试数据:我们要求从1-100 .2 ( (50) , 用户名 , 日期 余额) 1 <=100 2 (50),'2001-10-1',100) 2 (50),'2001-11-1',50) 1 2 (50),'2001-10-1',90) * 2 ()2.组合查询语句:a.我们必须返回一个从第一天开始到100天的纪录集:如:2001-10-1这个日期是任意的 到 2002-1-8由于第一天是任意一天,所以我们需要下面的语句: 100 ()-1() 2 ()这里的微妙在于:()-1记得我们指定用户名从1-100 ) ():第一天就可能每个用户有多个纪录。返回的结果: 2001-10-01 00:00:00.000.2002-01-08 00:00:00.000b.返回一个所有用户名的纪录集: 2 返回结果: 110100.99c.返回一个100天记录集和100个用户记录集的笛卡尔集合: * ( 100 ()-1() 2 () A ( 2 ) B ()返回结果100*100条纪录: 2001-10-01 00:00:00.000 1.2002-01-08 00:00:00.000 100d.返回当前所有用户在数据库的有的纪录: () 2 ()返回纪录: 2001-10-01 00:00:00.000 1 90.2002-01-08 00:00:00.000 100 50e.将c中返回的笛卡尔集和d中返回的纪录做 : ,( * ( 100 ()-1() 2 () A ( 2 ) B) C ( () 2 ) D( ()=0) ()注意:用户在当天如果没有纪录,字段返回,否那么返回每个用户当天的余额 2001-10-01 00:00:00.000 1 902001-10-01 00:00:00.000 2 100.2001-10-02 00:00:00.000 1 902001-10-02 00:00:00.000 2 <注意这里.2002-01-08 00:00:00.000 100 50f.好了,现在我们最后要做的就是,如果为,我们要返回小于当前纪录日期的第一个用户余额(由于我们使用 ,所以返回 1纪录即可,使用应该也可以),这个余额即为当前的余额: (,0) 0 ( 1 2 2 (2)<0 2) g.最后组合的完整语句就是 , (,0) 0 ( 1 2 2 (2)<0 2) ( * ( 100 ()-1() 2 () A ( 2 ) B) C ( () 2 ) D( ()=0) ()返回结果: 2001-10-01 00:00:00.000 1 902001-10-01 00:00:00.000 2 100.2002-01-08 00:00:00.000 100 50*取出表中第31到40的记录以自动增长为主键*从数据表中取出第n条到第m条的记录*/ (800) 40 31 ' '(1) + '* ( '+ (1) + ' )' () 10 * t ( 30 t ) 10 * t ( 40 t ) *一道面试题,写语句有表a存储二叉树的节点,要用一条语句查出所有节点及节点所在的层.表a c1 c2 A 1 / A B B C 2A C / / B D D N E 3C E / D F F K I 4E ID KC N所要得到的结果如下 A 1B 2C 2D 3N 3E 3F 4K 4I 4有高手指导一下,我只能用写出来,请教用一条语句的写法> c2, + 1 2 3 c1 = 'A'4 c1 = c25 6 'A', 1 7 ;C2 A 1B 2C 2D 3E 3N 3F 4I 4K 4已选择9行。