几个常见的SQL面试题

1、表一test1 id fgid source,表二test2 id fgid cuid,test1的fgid和source是一一对应的,求每个source的cuid的个数。

思路:第一遍读这个题有点晕,不知所云。然后反复读了几遍,终于有所顿悟,不就是求表一的fgid对应表二的fgid行数数吗。

考察点: right join
数据实例

test1                                                                                     test2

91F9D9DC-2D1F-4F10-AD57-F2DA7C209C4EC93345AA-EDC7-42ED-A0B2-57A6CD983D47

 

 

 

 

 

 

答案

select source, count(*) from (select source from t1 right join t2 on t1.ftid=t2.ftid) a group by source;

结果
4567F59B-B03C-4A04-9071-6612ADE9DF44

 

 

 

 

 

2、学生表student id name class score,找出每门功课都大于80分的同学名字。

数据实例:

E13B1570-5048-448B-AE9F-E346702A3DCF

 

 

 

 

 

 

 

 

 

思路:这个题需要用排除法,排除所有小于80分的同学。

考察点:not in

答案:

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

结果集:
5BF140FB-9728-411F-BF98-916DC550304A

 

 

 

3、还是student 表,删除所有除id不同别的列都相同的冗余数据。

数据实例

B8C9EF81-7136-4A08-BFD6-3F50FE5676F9

 

 

 

 

 

思路:先找出所有存在冗余的数据,然后根据id删除。

答案

delete from student where id not in(select * from( select min(id) from student group by name,class,score) a);
JackSun

JackSun

I'm a coder.

Leave a Reply

Your email address will not be published.