搞定SQL面试(1)

SQL是数据分析的第一技能,很多人转行数据分析,说自己学python,学R,但是却忽略了sql的重要性,去面试数据分析岗,专业点的公司,基本都会有sql的面试题,整理了下网上的sql面试题,分享给大家。

创建表,包括学生表,课程表,关系表,教师表

CREATE TABLE student
  (
     sid    INT,
     sname varchar(32),
     sage  INT,
     ssex  varchar(8)
  ) 

CREATE TABLE course
  (
     cid   INT,
     cname varchar(32),
     tid    INT
  ) 

CREATE TABLE sc
  (
     sid    INT,
     cid    INT,
     score INT
  ) 

CREATE TABLE teacher
  (
     tid    INT,
     tname varchar(16)
  ) 

插入数据

insert into Student
select 1,N‘刘一‘,18,N‘男‘ union all
 select 2,N‘钱二‘,19,N‘女‘ union all
 select 3,N‘张三‘,17,N‘男‘ union all
 select 4,N‘李四‘,18,N‘女‘ union all
 select 5,N‘王五‘,17,N‘男‘ union all
 select 6,N‘赵六‘,19,N‘女‘ 

 insert into Teacher select 1,N‘叶平‘ union all
 select 2,N‘贺高‘ union all
 select 3,N‘杨艳‘ union all
 select 4,N‘周磊‘

 insert into Course select 1,N‘语文‘,1 union all
 select 2,N‘数学‘,2 union all
 select 3,N‘英语‘,3 union all
 select 4,N‘物理‘,4

insert into SC
 select 1,1,56 union all
 select 1,2,78 union all
 select 1,3,67 union all
 select 1,4,58 union all
 select 2,1,79 union all
 select 2,2,81 union all
 select 2,3,92 union all
 select 2,4,68 union all
 select 3,1,91 union all
 select 3,2,47 union all
 select 3,3,88 union all
 select 3,4,56 union all
 select 4,2,88 union all
 select 4,3,90 union all
 select 4,4,93 union all
 select 5,1,46 union all
 select 5,3,78 union all
 select 5,4,53 union all
 select 6,1,35 union all
 select 6,2,68 union all
 select 6,4,71
  • 1、查询“001”课程比“002”课程成绩高的所有学生的学号;
select a.sid from
(SELECT sid,score from sc where cid=‘001‘) a,
(select sid,score from sc where cid=‘002‘) b
  • 2、查询平均成绩大于60分的同学的学号和平均成绩;
select sid,avg(score) as avg_score from sc
group by sid having avg(score)>60;
  • 3、查询所有同学的学号、姓名、选课数、总成绩;
select a.sid,a.sname,count(b.cid) as nums_course,sum(score) as total_score
from student a left join sc b on a.sid=b.sid group by 1,2;
  • 4、查询姓“李”的老师的个数;
select count(distinct(Tname))
  from Teacher
  where Tname like ‘李%‘;
  • 5、查询没学过“叶平”老师课的同学的学号、姓名;
select a.sid,a.sname from student a where a.sid not in
(select distinct sc.sid from sc,course,teacher where sc.cid=course.cid
and course.tid=teacher.tid and teacher.tname="叶平")
  • 6、查询学过“001”并且也学过编号“002”课程的同学的学号、姓名;
select a.sid,a.sname from student a,sc b
where a.sid=b.sid and b.cid=‘001‘ and exists
(select 1 from sc c where b.sid=c.sid and c.cid=‘002‘)
  • 7、查询学过“叶平”老师所教的所有课的同学的学号、姓名;
select sid,sname from student where sid in
(select sid from sc,course,teacher where
sc.cid=course.cid and course.tid=teacher.tid and teacher.tname=‘叶平‘
group by sid
having count(sid)=
(select count(distinct cid) from course a,teacher b where
a.tid=b.tid and b.tname=‘叶平‘))
  • 8、查询课程编号“002”的成绩比课程编号“001”课程低的所有同学的学号、姓名
Select sid,Sname from
(select Student.sid,Student.Sname,score ,
(select score from SC SC_2 where
SC_2.sid=Student.sid and SC_2.cid=‘002‘) score2
 from Student,SC where Student.sid=SC.sid and cid=‘001‘) S_2
where score2 <score;
  • 9、查询所有课程成绩小于60分的同学的学号、姓名
 select sid,Sname
 from Student
 where Sid  in (select S.sid from Student AS S,SC where S.Sid=SC.sid and score<60); 
  • 10、查询没有学全所有课的同学的学号、姓名;
select s.sid,s.sname from student s
where s.sid not in(
    select sc.sid from sc sc
    group by sc.sid
    having count(distinct sc.cid)=(
        select count(distinct c.cid) from course c
    )
)
  • 11、查询至少有一门课与学号为“001”的同学所学相同的同学的学号和姓名
select distinct(s.sid),s.Sname
from Student s,SC sc
where s.sid=sc.sid and sc.sid in
(
    select distinct(sc2.cid) from SC sc2
    where sc2.sid=‘001‘
)
order by s.sid asc
  • 12、把“SC”表中“叶平”老师教的课的成绩都更改为此课程的平均成绩;
update sc set score=
(
    select avg(score) from sc sc,course c, teacher t
    where sc.cid=c.cid and c.tid=t.tid and  t.tname=‘叶平‘
)
where cid in
(
 select distinct(sc.cid) from sc sc,course c,teacher t
 where sc.cid=c.cid and c.tid=t.tid and t.tname=‘叶平‘
)
  • 13、查询和“002”号的同学学习的课程完全相同的其他同学学号和姓名
select student.sid, student.sname
from sc,student
where sc.cid in (select sc.cid from sc where sc.sid=‘002‘)
and sc.sid = student.sid and sc.sid != ‘002‘
group by student.sid, student.sname
having count(*)=(select count(*) from sc where sc.sid=‘002‘);

14、删除学习“叶平”老师课的SC表记录;

delete from sc where cid in
(select c.cid from course c,teacher t
    where c.tid=t.tid and t.tname=‘叶平‘
)

15、向SC表中插入一些记录,这些记录要求符合以下条件:

①没有上过编号“002”课程的同学学号;

②插入“002”号课程的平均成绩;

insert into sc
select s.sid,‘002‘,(select avg(score) from sc where cid=‘002‘)
from student s
where s.sid not in (select distinct(sid) from sc where cid!=‘002‘)

文章转载自https://www.cnblogs.com/edisonchou/p/3878135.html

欢迎加入数据分析交流群(加群备注博客园)

原文地址:https://www.cnblogs.com/linxiaochi/p/9650339.html

时间: 2024-10-06 04:27:04

搞定SQL面试(1)的相关文章

搞定SQL面试(2)

16.按平均成绩从低到高显示所有学生的"语文"."数学"."英语"三门的课程成绩, 按如下形式显示: 学生ID,语文,数学,英语,有效课程数,有效平均分: select t.sid as '学生ID', (select score from sc where sid=t.sid and cid='002') as '语文', (select score from sc where sid=t.sid and cid='003') as '数学',

搞定SQL面试(3)

38.查询各个课程及相应的选修人数: select sc.cid,c.cname,count(distinct sid) as 'stuCount' from sc sc,course c where sc.cid=c.cid group by sc.cid,c.cname; 39.查询不同课程但成绩相同的学生的学号.课程号.学生成绩: select distinct sc1.sid,sc1.cid,sc1.score from sc sc1,sc sc2 where sc1.cid!=sc2.

搞定SQL

一.基础 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql server--- 创建 备份数据的 deviceUSE masterEXEC sp_addumpdevice 'disk', 'testBack', 'c:\mssql7backup\MyNwind_1.dat'--- 开始 备份BACKUP DATABASE pubs TO testBack 4.说明:创建新表create

[算法总结] 13 道题搞定 BAT 面试——字符串

1. KMP 算法 谈到字符串问题,不得不提的就是 KMP 算法,它是用来解决字符串查找的问题,可以在一个字符串(S)中查找一个子串(W)出现的位置.KMP 算法把字符匹配的时间复杂度缩小到 O(m+n) ,而空间复杂度也只有O(m).因为"暴力搜索"的方法会反复回溯主串,导致效率低下,而KMP算法可以利用已经部分匹配这个有效信息,保持主串上的指针不回溯,通过修改子串的指针,让模式串尽量地移动到有效的位置. 具体算法细节请参考: 字符串匹配的KMP算法 从头到尾彻底理解KMP 如何更好

一篇文章搞定前端面试

本文旨在用最通俗的语言讲述最枯燥的基本知识 面试过前端的老铁都知道,对于前端,面试官喜欢一开始先问些HTML5新增元素啊特性啊,或者是js闭包啊原型啊,或者是css垂直水平居中怎么实现啊之类的基础问题,当你能倒背如流的回答这些之后,面试官脸上会划过一丝诡异的笑容,然后晴转多云,故作深沉的清一下嗓子问:从用户输入URL到浏览器呈现页面经过了哪些过程?如果你懂,巴拉巴拉回答了一堆,他又接着问:那网页具体是如何渲染出来的呢?如果你还懂,又巴拉巴拉的回答了一堆,他还会继续问:那你有哪些网页性能优化的经验

【搞定Jvm面试】 Java 内存区域揭秘附常见面试题解析

本文已经收录自笔者开源的 JavaGuide: https://github.com/Snailclimb ([Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识)如果觉得不错的还,不妨去点个Star,鼓励一下! Java 内存区域详解 如果没有特殊说明,都是针对的是 HotSpot 虚拟机. 写在前面 (常见面试题) 基本问题 介绍下 Java 内存区域(运行时数据区) Java 对象的创建过程(五步,建议能默写出来并且要知道每一步虚拟机做了什么) 对象的访问定位的两种

一篇搞定SQL语句

首先,你要知道SQL语句是常见数据库的查询语言,在关系型数据库里,表间关系有三种,通俗说就是爱情,亲情,友情,其中爱情在道德上说的是一对一,亲情就想到父母,你只有一个父亲或一个母亲,而一个当爹的就有可能有多个孩子,这就是一对多,而友情,你有多个朋友,你的某个朋友也有包括你在内的多个朋友,这就是多对多 其次,两张怎么建立上述的表间关系呢,比如一对多或多对多,有一种神奇的东西叫做外键,就一张表的列值在另外一张表的列有所对应,一对多就是一个外键,多对多就两个外键 最后,什么关系,什么操作,直接见实例就

一个类文件搞定SQL条件映射解析,实现轻量简单实用ORM功能

个人觉得轻简级的ORM既要支持强类型编码,又要有执行效率,还要通俗易懂给开发者友好提示,结合Expression可轻松定制自己所需要功能. 表达式解析代码: 1 using System; 2 using System.Collections; 3 using System.Collections.Generic; 4 using System.Data.Common; 5 using System.Linq; 6 using System.Linq.Expressions; 7 using S

Golang精编100题-搞定golang面试

Golang精编100题 能力模型 级别 模型 初级 primary 熟悉基本语法,能够看懂代码的意图:在他人指导下能够完成用户故事的开发,编写的代码符合CleanCode规范: 中级 intermediate 能够独立完成用户故事的开发和测试:能够嗅出代码的坏味道,并知道如何重构达成目标: 高级 senior 能够开发出高质量高性能的代码:能够熟练使用高级特性,开发编程框架或测试框架: 选择题 1.   [初级]下面属于关键字的是()A. funcB. defC. structD. class