暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

面试常遇到的sql语句面试题

程序员溪言 2020-01-13
226




 


1. 用一条SQL 语句 查询出每门课都大于80 分的学生姓名


INSERT INTO student (name,course,score)

VALUES

('张小明','语文','65'),

('张小明','数学','67'),

('李颖','语文','72'),

('李颖','数学','96'),

('黄一山','语文','85'),

('黄一山','数学','99'),

('黄一山','英语','93');

 

select name from student GROUP BY name HAVING MIN(score)>80;

 

select distinct name from student where name not in (select distinct name from student where score<=80);

 

2. 删除冗余,删除所有信息都相同的学生记录

 

delete student where id not in (SELECT min(id) from student GROUP BY name,course,score);

 

3. 一个叫 team 的表,里面只有一个字段name, 一共有4 条纪录,分别是a,b,c,d, 对应四个球对,现在四个球对进行比赛,用一条sql 语句显示所有可能的比赛组合.

 

SELECT a.name, b.name from team a, team b where a.name < b.name;

 

4.  面试题:怎么把这样一个aaa表

year   month amount

1991   1       1.1

1991   2       1.2

1991   3       1.3

1991   4       1.4

1992   1       2.1

1992   2       2.2

1992   3       2.3

1992   4       2.4

查成这样一个结果

year m1   m2   m3   m4

1991 1.1 1.2 1.3 1.4

1992 2.1 2.2 2.3 2.4 


select year, (select amount from   aaa m where month=1   and m.year=aaa.year) as m1,(select amount from   aaa m where month=2   and m.year=aaa.year) as m2,(select amount from   aaa m where month=3   and m.year=aaa.year) as m3,(select amount from   aaa m where month=4   and m.year=aaa.year) as m4from aaa   group by year;

 

5. sql面试题

 

有表A,结构如下: 


其中:p_ID为产品ID,p_Num为产品库存量,s_id为仓库ID。请用SQL语句实现将上表中的数据合并,合并后的数据为: 

p_ID s1_id s2_id s3_id 

1      10    12     0 

2      8     0      

3      11    0      

其中: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 A group by p_id;

 

6. 每个部门工资最高的员工(如果有两个薪资相同的会显示出来)

 

select a.`Name`,a.Salary,b.Name from employee a,department b WHERE a.DepartmentId=b.Id And

a. Salary =(select MAX(Salary) from employee where DepartmentId = a.DepartmentId);

 

7. 删除表中多余的重复记录,重复记录是根据单个字段(name)来判断,只留有id最小的记录

 

 

DELETE FROM employee

WHERE name in (SELECT a.name from (SELECT name from employee GROUP BY name HAVING COUNT(name) > 1) AS a)

AND id not in (SELECT b.id from (SELECT min(id) id from employee GROUP BY name HAVING COUNT(name)>1) AS b);

 

8. 计算每个人的总成绩并排名(要求显示字段:姓名,总成绩)

 


SELECT name,sum(score) s from student GROUP BY name ORDER BY s DESC;

 

9. 列出各门课程成绩最好的学生(要求显示字段:学号,姓名,科目,成绩)

 

SELECT s.name,s.subject,s.score,s.stuid from student s,

(SELECT subject,max(score) ms from student GROUP BY subject) as m

WHERE s.subject=m.subject AND s.score=m.ms;

 

10. 列出各个课程的平均成绩(要求显示字段;课程,平均成绩)

 

SELECT subject, avg(score) from student GROUP BY subject;



☆ END ☆

如果读完觉得有收获的话,欢迎点【在看】,关注【程序员溪言】,及时获得精彩推送!!!回复口令”java”,获得大量学习视频资料!

扫描二维码

获取更多精彩

关注程序员溪言


点这里在看

 
文章转载自程序员溪言,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论