sql经典面试题

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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 , from s stu

where (select count(*) from sc where sid= =

(select count(*) from c);

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

答:SQL语句如下:

select , from s stu

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

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

IDNAMEAGEMANAGER(所属主管人ID)

106A30104

109B19104

104C20111

107D35109

112E25120

119F45NULL

要求:列出所有年龄比所属主管年龄大的人的ID和名字

答:SQL语句如下:

select from test employee where >

(select from test manager where =;

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

Student 学生表 (学号,姓名,性别,年龄,组织部门)

Course 课程表 (编号,课程名称)

Sc 选课表 (学号,课程编号,成绩)

表结构如下:

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

答:SQL语句如下:

select , from Student stu

where (select count(*) from sc where 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 , from student stu

where (select count(*) from sc where 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 , from depart a, depart b where <

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 = and >

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)

相关文档
最新文档