频道栏目
首页 > 资讯 > SQL Server > 正文

总结一些面试时常考的sql语句

18-07-03        来源:[db:作者]  
收藏   我要投稿

数据准备

--创建测试数据
create table Student(S varchar(10),Sname nvarchar(10),Sage datetime,Ssex nvarchar(10));
insert into Student values('01','赵英','1990-01-01','男');
insert into Student values('02','钱雄','1990-12-21','男');
insert into Student values('03','孙豪','1990-05-20','男');
insert into Student values('04','李杰','1990-08-06','男');
insert into Student values('05','周梅','1991-12-01','女');
insert into Student values('06','吴兰','1992-03-01','女');
insert into Student values('07','郑竹','1989-07-01','女');
insert into Student values('08','王菊','1990-01-20','女');
create table Course(C varchar(10),Cname nvarchar(10),T varchar(10));
insert into Course values('01','语文','02');
insert into Course values('02','数学','01');
insert into Course values('03','英语','03');
insert into Course values('04','物理','01');
create table Teacher(T varchar(10),Tname nvarchar(10));
insert into Teacher values('01','张三');
insert into Teacher values('02','李四');
insert into Teacher values('03','王五');
create table SC(S varchar(10),C varchar(10),score decimal(18,1));
insert into SC values('01','01',80);
insert into SC values('01','02',90);
insert into SC values('01','03',99);
insert into SC values('02','01',70);
insert into SC values('02','02',60);
insert into SC values('02','03',80);
insert into SC values('03','01',80);
insert into SC values('03','02',80);
insert into SC values('03','03',80);
insert into SC values('04','01',50);
insert into SC values('04','02' 30);
insert into SC values('04','03',20);
insert into SC values('05','01',76);
insert into SC values('05','02',87);
insert into SC values('06','01',31);
insert into SC values('06','03',34);
insert into SC values('07','02',89);
insert into SC values('07','03',98);

--1、查询"01"课程比"02"课程成绩高的学生的信息及课程分数
自己一开始想的:
select * from (select m.S, m.score "01",n.score "02" from (select S,score from sc where sc.c="01") m, (select S,score from sc where sc.c="02")n where m.s=n.s and m.score>n.score) o , student where o.S=student.S;


select * from student s ,sc s1,sc s2 where s.S = s1.S and s1.c='01' and s.S = s2.S and s2.c='02' and s1.Score>s2.Score;
--3、查询平均成绩大于等于60分的同学的学生编号和学生姓名和平均成绩
select s.S,s.Sname,avg(sc.score) avgscore from student s,sc where s.S = sc.S group by sc.S having avg(sc.score)>=60;
--5、查询所有同学的学生编号、学生姓名、选课总数、所有课程的总成绩
select s.S,s.Sname,count(sc.C) Ctotal,ifnull(sum(sc.score),0) Stotal from student s left join sc on s.S = sc.S group by s.S;
--6、查询"李"姓老师的数量 
select count(*) from teacher t where t.Tname like '李%';
--7、查询学过"张三"老师授课的同学的信息 
select s.S,s.Sname,s.Sage,s.Ssex from teacher t ,course c ,sc,student s where t.Tname="张三" and t.T=c.T and c.C=sc.C and sc.S = s.S; 
--8、查询没学过"张三"老师授课的同学的信息 
select * from student s where s.S not in (select s.S from teacher t ,course c ,sc,student s where t.Tname="张三" and t.T=c.T and c.C=sc.C and sc.S = s.S);
--11、查询没有学全所有课程的同学的信息 
select s.S,S.Sname,s.Sage,s.Ssex from student s,sc,(select count(sc.C) m from sc) n, (select count(*) m from course) c where c.m !=n.m and sc.S=s.S group by s.S;
--15、查询两门及其以上不及格课程的同学的学号,姓名及其平均成绩 
select * from student s,(select sc.S,avg(sc.Score) from sc where sc.Score<60 group by sc.S having (count(*)>=2)) m where s.S=m.S;

--16、检索"01"课程分数小于60,按分数降序排列的学生信息
select * from  student s right join (select * from sc where sc.C='01' and sc.Score<60) m on m.S=s.S ;
--26、查询每门课程被选修的学生数 
 select c.C,count(sc.S) from course c left join sc on c.C=sc.C group by c.C;
--32、查询每门课程的平均成绩,结果按平均成绩降序排列,平均成绩相同时,按课程编号升序排列 
select c.C, ifnull(avg(sc.Score),0) from course c left join sc on c.C=sc.C group by c.C order by avg(sc.Score) desc;
--40、查询选修"张三"老师所授课程的学生中,成绩最高的学生信息及其成绩
select s.*,c.Cname,max(sc.Score) from student s,sc,course c ,teacher t where s.S=sc.S and c.C=sc.C and c.T=t.T and t.Tname="张三"; 
相关TAG标签
上一篇:MySQL 8.0使用MySQLWorkbench出现“外部组件发生异常”和“authentication plugin 'caching_sha2_password”问题的解决方案
下一篇:Linux中nc命令的安装使用教程
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站