1、sql经典面试题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、;2)写出SQL语句,查询选修了所有选修课程学生;答:SQL语句如下:select stu.id,stu.name from s stuwhere (select count(*) from sc where sid=stu.id) =(select count(*) from c);3)写出SQL语句,查询选修了至少5门以上课程学生。答:SQL语句如下:select stu.id,stu.name from s stuwhere (select count(*) from sc where sid=stu.id)=5;2.数据库表(Test)构造如下:(SQL)IDNAMEAGEMANAGE
3、R(所属主管人ID)106A30104109B19104104C1107D35109112E25120119F45NULL规定:列出所有年龄比所属主管年龄大人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 选课表
4、 (学号,课程编号,成绩)表构造如下:1)写一种SQL语句,查询选修了计算机原理学生学号和姓名(3分钟)答:SQL语句如下:select stu.sno,stu.sname from Student stuwhere (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 f
5、rom sc where sno=(select sno from Student where sname=周星驰);3)写一种SQL语句,查询选修了5门课程学生学号和姓名(9分钟)答:SQL语句如下:select stu.sno,stu.sname from student stuwhere (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) begi
6、n 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)*111. 用一条SQL 语句 查询出每门课都不不大于80 分学生姓名name kecheng fenshu张三 语文 81张三 数学 75李四 语文 76李四 数学 90王五 语文 81王五 数学 100
7、王五 英语 90A:select distinct name from table where name not in (select distinct name from table where fenshu80 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
8、,depart b where a.team b.Debit101ccur4.阐明:复制表( 只复制构造,源表名:a 新表名:b)SQL:select * into b from a where 11 (where1=1,拷贝表构造和数据内容)ORACLE:create table bAsSelect * from a where 1=2 (不等于)(SQL Server Compact)比较两个表达式。 当使用此运算符比较非空表达式时,如果左操作数不等于右操作数,则成果为 TRUE。否则,成果为 FALSE。 5. 阐明:拷贝表( 拷贝数据,源表名:a 目的表名:b)SQL:insert i
9、nto 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) wher
10、e b.id in(select b.id from b,a where b.key=a.key); 8.为了便于阅读,查询此表后成果显式如下( 及格分数为60):courseid coursename score mark-1 java 70 pass2 oracle 90 pass3 xml 40 fail4 jsp 30 fail5 servlet 80 pass-写出此查询语句select courseid,coursename ,score ,decode (sign(score-60),-1,fail,pass) as mark from coursedecode貌似在我SQLSE
11、RVER里无法辨认,可用如下办法代替select courseid,coursename,score,(case when (score-60)=0 then pass else fail end) as markfrom course* sql面试题(2)有表A,构造如下:A:p_ID p_Num s_id1 10 011 12 022 8 013 11 013 8 03其中:p_ID为产品ID,p_Num为产品库存量,s_id为仓库ID。请用SQL语句实现将上表中数据合并,合并后数据为:p_ID s1_id s2_id s3_id1 10 12 02 8 0 03 11 0 8其中:s1_
12、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_idfrom myPro group by p_id 7。为管理业务培训信息,建立3个表: S(S#,SN,SD,SA)S#,SN,SD,
13、SA分别代表学号,学员姓名,所属单位,学员年龄 C(C#,CN)C#,CN分别代表课程编号,课程名称 SC(S#,C#,G) S#,C#,G分别代表学号,所选课程编号,学习成绩 (1)使用原则SQL嵌套语句查询选修课程名称为税收基本学员学号和姓名? 答案:select s# ,sn from s where S# in(select S# from c,sc where c.c#=sc.c# and cn=税收基本) (2) 使用原则SQL嵌套语句查询选修课程编号为C2学员姓名和所属单位?答:select sn,sd from s,sc where s.s#=sc.s# and sc.c#=c2 (3) 使用原则SQL嵌套语句查询不选修课程编号为C5学员姓名和所属单位?答:select sn,sd from s where s# not in(select s# from sc
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1