sql面试题

create table `course` (
    `id` int (11),
    `name` varchar (192),
    `teacher` int (11)
); 
insert into `course` (`id`, `name`, `teacher`) values('1','语文','1');
insert into `course` (`id`, `name`, `teacher`) values('2','数学','2');
insert into `course` (`id`, `name`, `teacher`) values('3','英语','3');
insert into `course` (`id`, `name`, `teacher`) values('4','物理','4');
create table `score` (
    `id` bigint (20),
    `stu_id` int (11),
    `course` int (64),
    `achievement` int (11)
); 
insert into `score` (`id`, `stu_id`, `course`, `achievement`) values('1','1','1','12');
insert into `score` (`id`, `stu_id`, `course`, `achievement`) values('2','1','2','76');
insert into `score` (`id`, `stu_id`, `course`, `achievement`) values('3','1','3','86');
insert into `score` (`id`, `stu_id`, `course`, `achievement`) values('4','1','4','96');
insert into `score` (`id`, `stu_id`, `course`, `achievement`) values('5','2','1','34');
insert into `score` (`id`, `stu_id`, `course`, `achievement`) values('6','2','2','86');
insert into `score` (`id`, `stu_id`, `course`, `achievement`) values('7','2','3','46');
insert into `score` (`id`, `stu_id`, `course`, `achievement`) values('8','2','4','84');
insert into `score` (`id`, `stu_id`, `course`, `achievement`) values('10','3','1','45');
insert into `score` (`id`, `stu_id`, `course`, `achievement`) values('11','3','2','57');
insert into `score` (`id`, `stu_id`, `course`, `achievement`) values('12','3','3','45');
insert into `score` (`id`, `stu_id`, `course`, `achievement`) values('13','3','4','45');
insert into `score` (`id`, `stu_id`, `course`, `achievement`) values('14','4','1','46');
insert into `score` (`id`, `stu_id`, `course`, `achievement`) values('15','4','2','38');
insert into `score` (`id`, `stu_id`, `course`, `achievement`) values('16','4','3','67');
insert into `score` (`id`, `stu_id`, `course`, `achievement`) values('17','4','4','96');
insert into `score` (`id`, `stu_id`, `course`, `achievement`) values('18','5','1','34');
insert into `score` (`id`, `stu_id`, `course`, `achievement`) values('19','5','2','96');
insert into `score` (`id`, `stu_id`, `course`, `achievement`) values('20','5','3','46');
insert into `score` (`id`, `stu_id`, `course`, `achievement`) values('21','5','4','95');
insert into `score` (`id`, `stu_id`, `course`, `achievement`) values('23','6','4','46');
insert into `score` (`id`, `stu_id`, `course`, `achievement`) values('24','7','2','35');
insert into `score` (`id`, `stu_id`, `course`, `achievement`) values('25','7','3','89');
insert into `score` (`id`, `stu_id`, `course`, `achievement`) values('26','8','1','56');
insert into `score` (`id`, `stu_id`, `course`, `achievement`) values('27','8','2','79');
insert into `score` (`id`, `stu_id`, `course`, `achievement`) values('28','8','3','45');
create table `student` (
    `id` bigint (20),
    `name` varchar (192),
    `birth` varchar (96),
    `sex` varchar (6)
); 
insert into `student` (`id`, `name`, `birth`, `sex`) values('1','小红','1991-11','男');
insert into `student` (`id`, `name`, `birth`, `sex`) values('2','小明','1992-3','男');
insert into `student` (`id`, `name`, `birth`, `sex`) values('3','小张','1991-4','女');
insert into `student` (`id`, `name`, `birth`, `sex`) values('4','小吴','1991-5','女');
insert into `student` (`id`, `name`, `birth`, `sex`) values('5','小张','1991-2','男');
insert into `student` (`id`, `name`, `birth`, `sex`) values('6','aa','1998-2',NULL);
insert into `student` (`id`, `name`, `birth`, `sex`) values('7','bb','1991-2',NULL);
insert into `student` (`id`, `name`, `birth`, `sex`) values('8','cc',NULL,NULL);
insert into `student` (`id`, `name`, `birth`, `sex`) values('9','dd',NULL,NULL);
insert into `student` (`id`, `name`, `birth`, `sex`) values('10','ee',NULL,NULL);

create table `teacher` (
    `id` int (11),
    `name` varchar (192)
); 
insert into `teacher` (`id`, `name`) values('1','1老师');
insert into `teacher` (`id`, `name`) values('2','2老师');
insert into `teacher` (`id`, `name`) values('3','3老师');
insert into `teacher` (`id`, `name`) values('4','4老师 ');

查询出每门课程的及格人数 where必须写在GROUP BY 前面

SELECT course,COUNT(stu_id) FROM score WHERE achievement >=60 GROUP BY course

查询两门以上不及格课程的同学的学号及其平均成绩 group by 后面只能跟having 替代having

having是在前面执行完成后从查询结果级中在查询的,可以使用运算符

SELECT stu_id,AVG(achievement) FROM score WHERE achievement<60 GROUP BY stu_id HAVING COUNT(stu_id) >=2

!!!错误示范!!!查询每门课程分数最高的前2名 错误示范,

当右边的值为空时,内连接不会展示数据 ,

此条sql查询不到第一名的数据

SELECT a.course,a.stu_id,a.achievement FROM score AS a JOIN score AS b ON a.course = b.course AND a.achievement <b.achievement
GROUP BY a.course,a.stu_id HAVING COUNT(b.course) <2

正确示范查询每门课程分数最高的前2名

SELECT a.course,a.stu_id,a.achievement FROM score AS a LEFT JOIN score AS b ON a.course = b.course AND a.achievement<b.achievement
GROUP BY a.course, a.stu_id
HAVING COUNT(b.course)<2
ORDER BY a.course;

查询出每门课程的及格人数和不及格人数

SELECT course,SUM(CASE WHEN achievement>=60 THEN 1 ELSE 0 END ) AS 及格人数, SUM(CASE WHEN achievement<60 THEN 1 ELSE 0 END ) AS 不及格人数 FROM score GROUP BY course

使用分段[100-80] 优,[80-60] 良,[<60]差 来统计各科成绩,分别统计:各分数段人数,课程号和课程名称

SELECT course.id,course.name, SUM(CASE WHEN score.achievement >=80 THEN 1 ELSE 0 END) AS 优,SUM(CASE WHEN score.achievement <80 AND score.achievement>=60 THEN 1 ELSE 0 END) AS 良,
SUM(CASE WHEN score.achievement <60 THEN 1 ELSE 0 END) AS 差 FROM score JOIN course ON score.course = course.id GROUP BY course.id,course.name


左连接 table1 left join tab2 tab2 on 右边数据为空时也会展示,左边数据为为空就不展示
右连接 table1 right join tab2 on
完全连接:select a.,b. from a full join b on a.id=b.parent_id
左连接、右连接 、完全连接 都是外连接

内连接 table1 join tab2 on table1.xxx = tab2.sss
交叉连接?
SELECT O.ID, O.xxxx, C.ID, C.xx FROM tab1 a cross table2 WHERE a.xxx=1;

count(字段),空字段不会+1
count(id),根据id主键取值,累加返回值,也是server层 “ +1 ”
count(1),同样会遍历,但不取值,引擎告诉不为空那我就 “+1”
count(*),也不取值,而且人家还是经过优化的

https://www.cnblogs.com/yyjie/p/7788413.html
https://zhuanlan.zhihu.com/p/38354000

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,907评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,987评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,298评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,586评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,633评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,488评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,275评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,176评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,619评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,819评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,932评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,655评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,265评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,871评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,994评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,095评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,884评论 2 354

推荐阅读更多精彩内容