sql经典面试题

更新时间:2023-10-12 14:55:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1.张表,学生表S,课程C,学生课程表SC,学生可以选修多门课程,一门课程可以被多个学生选修,通过SC表关联;(SQL) 1)写出建表语句;

答:建表语句如下(mysql数据库):

create table s(id integer primary key, name varchar(20)); create table c(id integer primary key, name varchar(20)); create table sc(

sid integer references s(id), cid integer references c(id), primary key(sid,cid) );

2)写出SQL语句,查询选修了所有选修课程的学生; 答:SQL语句如下:

select stu.id, stu.name from s stu

where (select count(*) from sc where sid=stu.id) = (select count(*) from c);

3)写出SQL语句,查询选修了至少5门以上的课程的学生。 答:SQL语句如下:

select stu.id, stu.name from s stu

where (select count(*) from sc where sid=stu.id)>=5;

2.数据库表(Test)结构如下:(SQL)

IDNAMEAGEMANAGER(所属主管人ID) 106A30104 109B19104 104C20111 107D35109 112E25120 119F45NULL

要求:列出所有年龄比所属主管年龄大的人的ID和名字? 答:SQL语句如下:

select employee.name from test employee where employee.age>

(select manager.age from test manager where manager.id=employee.manager);

3.有3个表(15分钟):(SQL)

Student 学生表 (学号,姓名,性别,年龄,组织部门) Course 课程表 (编号,课程名称) Sc 选课表 (学号,课程编号,成绩) 表结构如下:

1)写一个SQL语句,查询选修了’计算机原理’的学生学号和姓名(3分钟) 答:SQL语句如下:

select stu.sno, stu.sname from Student stu

where (select count(*) from sc where sno=stu.sno and cno =

(select cno from Course where cname=’计算机原理’)) != 0;

2)写一个SQL语句,查询’周星驰’同学选修了的课程名字(3分钟) 答:SQL语句如下:

select cname from Course where cno in (select cno from sc where sno=(select sno from Student where sname=’周星驰’));

3)写一个SQL语句,查询选修了5门课程的学生学号和姓名(9分钟) 答:SQL语句如下:

select stu.sno, stu.sname from student stu

where (select count(*) from sc where sno=stu.sno) = 5;

小小+霸霸+王王=小霸王 小=?,霸=?,王=? 用sql求证

参考答案:

declare @data int,@i int,@j int,@l int 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 @data data,@i i,@j j,@l l 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 分的学生姓名

name kecheng fenshu 张三语文 81 张三数学 75 李四语文 76 李四数学 90 王五语文 81 王五数学 100 王五英语 90

A: select distinct name from table where name not in (select distinct name from table where fenshu<=80)

B: select name from table group by name having min(fenshu)>80

2. 一个叫 depart 的表,里面只有一个字段team, 一共有4 条纪录,分别是a,b,c,d, 对应四个球对,现在四个球对进行比赛,用一条sql 语句显示所有可能的比赛组合. 你先按你自己的想法做一下,看结果有我的这个简单吗?

create table depart (

team varchar(50) not null )

答:select a.team, b.team from depart a, depart b where a.team < b.team

3. 请用SQL 语句实现:从TestDB 数据表中查询出所有月份的发生额都比101 科目相应月份的发生额高的科目。请注意:TestDB 中有很多科目,都有1 -12 月份的发生额。 AccID :科目代码,Occmonth :发生额月份,DebitOccur :发生额。 数据库名:JcyAudit ,数据集:Select * from TestDB

答:select a.* from TestDB a

,(select Occmonth,max(DebitOccur) Debit101ccur from TestDB where AccID='101' group by Occmonth) b

where a.Occmonth=b.Occmonth and a.DebitOccur>b.Debit101ccur

4.说明:复制表( 只复制结构, 源表名:a 新表名:b)

SQL: select * into b from a where 1<>1 (where1=1,拷贝表结构和数据内容) ORACLE:create table b As

Select * from a where 1=2

[<>(不等于)(SQL Server Compact)

比较两个表达式。当使用此运算符比较非空表达式时,如果左操作数不等于右操作数,则结果为 TRUE。否则,结果为 FALSE。]

5. 说明:拷贝表( 拷贝数据, 源表名:a 目标表名:b) SQL: insert into b(a, b, c) select d,e,f from a;

6.说明:两张关联表,删除主表中已经在副表中没有的信息 SQL:

Delete from info where not exists

(select * from infobz where info.infid=infobz.infid )

7.有两个表A 和B ,均有key 和value 两个字段,如果B 的key 在A 中也有,就把B 的value 换为A 中对应的value 这道题的SQL 语句怎么写?

update b set b.value=(select a.value from a where a.key=b.key) where b.id in(select b.id from b,a where b.key=a.key);

8.为了便于阅读, 查询此表后的结果显式如下( 及格分数为60): courseid coursename score mark

--------------------------------------------------- 1 java 70 pass 2 oracle 90 pass 3 xml 40 fail 4 jsp 30 fail

5 servlet 80 pass

--------------------------------------------------- 写出此查询语句

select courseid, coursename ,score ,decode (sign(score-60),-1,'fail','pass') as mark from course

'decode'貌似在我的SQLSERVER2005里无法识别,可用以下方法替代

select courseid,coursename,score,

(case when (score-60)>=0 then 'pass' else 'fail' end) as mark from course

************************************************************************************************

sql面试题(2)

有表A,结构如下: A: p_ID p_Num s_id 1 10 01 1 12 02 2 8 01 3 11 01 3 8 03

其中:p_ID为产品ID,p_Num为产品库存量,s_id为仓库ID。请用SQL语句实现将上表中的数据合并,合并后的数据为: p_ID s1_id s2_id s3_id 1 10 12 0 2 8 0 0 3 11 0 8

其中:s1_id为仓库1的库存量,s2_id为仓库2的库存量,s3_id为仓库3的库存量。如果该产品在某仓库中无库存量,那么就是0代替。

结果:

select p_id ,

sum(case when s_id=1 then p_num else 0 end) as s1_id ,sum(case when s_id=2 then p_num else 0 end) as s2_id ,sum(case when s_id=3 then p_num else 0 end) as s3_id from myPro group by p_id

7。为管理业务培训信息,建立3个表:

本文来源:https://www.bwwdw.com/article/gdqf.html

Top