几道 SQL 笔试题、面试题总结

2017-08-01

最近一个星期面试了四五家公司,面试的岗位是 Java 实习生。发现每家公司的 SQL 知识考察的内容都不尽相同,而且自己的 SQL 知识更是弱项。为此在菜鸟教程上复习了 SQL 知识,也总结了这几天来的面试题目。



笔试整理

1、给类似如下的表,要求用 SQL 求各班不同性别成绩超过80分的平均数:

表:test_avg

NAME SCORE SEX CLASS
A 66 1
B 86 2
C 90 1
D 82 2

考察知识点:

1)AVG() 函数。AVG 函数返回数值列的平均值。NULL 值不包括在计算中。

2)GROUP BY。GROUP BY 语句用于结合聚合函数,根据一个或多个列对结果集进行分组(注意分组与排序的区别)

SELECT CLASS,SEX,AVG(SCORE) FROM test_avg WHERE SCORE > 80 GROUP BY SEX,CLASS;

2、给类似如下两张表,查出 employee 中所有名字及其 boss 名字,没有的赋值为“未知”:

表:employee

id name leader_id
1 aaa null
2 bbb 1
3 ccc 2
4 ddd 1

表:boss

id name
1 A
2 B

考察知识点:

1)IFNULL() 函数。IFNULL(表达式,填充数据) 函数:若查出数据为 Null,用填充数据填充。

2)左连接。例如:table1 LEFT JOIN table2 ON 限制条件时,table1 的数据全查出来。

SELECT employee.`name`,IFNULL(boss.‘name‘,‘未知‘) as leader FROM employee LEFT JOIN boss ON employee.leader = boss.id;

3、用 SQL 语句建一份表:

如下为我建的一份表,注意表的引擎、字符集编码

CREATE TABLE IF NOT EXISTS ‘table1‘ (
    ‘id‘ INT UNSIGNED AUTO_INCREMENT,
    ‘title‘ VARCHAR(100) NOT NULL,
    ‘author‘ VARCHAR(40) NOT NULL,
    ‘submission_date‘ DATE,
    PRIMARY KEY (‘id‘)
)ENGINE=InnoDB DEFAULT CHARSET=utf-8;

4、如何查询一份表里最后 10 条记录的前 7 条记录?

思路:在子查询里用倒序按 id 查出(因为主键 id 肯定是按顺序的)最后的 10 条记录,然后用 LIMIT 方法查询里面的前 7 条

考察知识点:

1)思维能否灵活变通,运用倒序查询最后 10 条记录。

2)LIMIT 分页。语法:SELECT * FROM table LIMIT [offset,] rows。其中,offset 为偏移量,可选,基 0;rows 是查询的行数。

SELECT name FROM (SELECT name FROM test_avg ORDER BY `name` DESC LIMIT 10) as id ORDER BY name LIMIT 7 

 面试整理

1、对数据库范式的理解?

  • 范式(NF):“符合某一种级别的关系模式的集合,表示一个关系内部各属性之间的联系的合理化程度”。很晦涩吧?实际上你可以把它粗略地理解为一张数据表的表结构所符合的某种设计标准的级别。(我的简单总结:表里属性间的合理化程度
  • 数据库范式也分为 1NF,2NF,3NF,BCNF,4NF,5NF。符合高一级范式的设计,必定符合低一级范式。
  • 1NF 的定义为:符合 1NF 的关系中的每个属性都不可再分。(1NF 是所有关系型数据库的最基本要求)
  • 1NF 缺点:数据冗余过大,插入异常,删除异常,修改异常的问题
  • 2NF 在 1NF 的基础之上,消除了非主属性对于码的部分函数依赖
  • 3NF 在 2NF 的基础之上,消除了非主属性对于码的传递函数依赖

2、MySQL 如何进行分页?有什么缺点?

MySQL 使用 LIMIT 关键字进行分页操作。说明在上面第 4 点有说明。

缺点:一言以蔽之,就是越往后分页,LIMIT 语句的偏移量就会越大,速度也会明显变慢。此时,我们可以通过子查询的方式来提高分页效率,大致如下:

SELECT * FROM articles WHERE id >= (SELECT id FROM articles  WHERE category_id = 123 ORDER BY id LIMIT 10000, 1) LIMIT 10 

3、MySQL 索引如何实现?有什么不足?

简单理解,索引就是为了加快查询速度的。而索引是独立存储的内容,因此当数据量很大是,更新表要同时更新索引,造成了更新的速度下降

这里我参考了两篇文章,地址如下:

http://fangjian0423.github.io/2017/07/05/mysql-index-summary/#more

https://segmentfault.com/a/1190000003072424



经过几次面试,知道了自己的 SQL 知识的缺乏,现在总结并恶补了一番,感觉思路清晰了很多。SQL 知识大致是常用函数、增删查改、约束、数据类型的使用,要想真正记在脑海还是要多实际编写代码。可以尽量在命令行窗口编写 SQL 语句来加深印象,逐渐远离可视化工具。

希望我的总结也对你有帮助。:)

时间: 2024-10-07 14:38:03

几道 SQL 笔试题、面试题总结的相关文章

这道SQL笔试题你会怎么写

最近面试了一些Senior BI的候选人,行业经验三年到七年不等,起初觉得这个Level的无需准备笔试题,碍于领导执念,就在真实项目中提取5道SQL题目,这里仅单说其中一道难度中等偏下的题目,抛开面试不谈,单看笔试的话几轮下来答题情况并不理想,至今没有发现有人能写出逻辑滴水不漏又性能最大化的脚本,难点的题目甚至还有交白卷的情况,如果看官觉得这仅仅是茴香豆的茴几种写法的问题就飘过吧,我想通过题目考察的并非只是SQL的熟练程度,相对而言更看重候选人对数据的敏感程度,以及脚本性能的优化能力,往深了说就

阿里2道前端笔试题+堆糖2道前端笔试题

阿里前端笔试题 1.一个表格HTML代码如下 <table id="table1"> <tbody> <tr><td>1</td><td><button>Delete</button></td></tr> <tr><td>2</td><td><button>Delete</button></

几道C笔试题

Q:printf和scanf的返回值是什么? int main() { int i = 43; int n = printf("%d\n",i); printf("%d\n",n); return 0; } A:printf函数返回3,因为其输出了'4', '3', '\n' 三个字符. printf返回的是成功输出到STDOUT的字符数.如果发生错误,返回一个负数. scanf返回的是成功赋值的变量个数,如果发生错误,返回EOF Q:既然fgetc是接收输入的字符

算法--两道百度笔试题

算法--两道百度笔试题 今天看到一位园友写了一篇关于百度的面试题的博客,成了评论头条,再下看了一下,非常感兴趣,那位博主的算法能力跟我一样需要提高,估计他的功力还在我之下,所以再下不才,在这里把自己的源码贴出来. 百度面试题(一):假设一整型数组存在若干正数和负数,现在通过某种算法使得该数组的所有负数在正数的左边,且保证负数和正数间元素相对位置不变.时空复杂度要求分别为:o(n)和o(1).          其实开始的时候我也是一头雾水,在纸上画画之后发现,其实就是一道变形的插入排序.幸运的是

100多道经典的JAVA面试题及答案解析

面向对象编程(OOP) Java是一个支持并发.基于类和面向对象的计算机编程语言.下面列出了面向对象软件开发的优点: 代码开发模块化,更易维护和修改. 代码复用. 增强代码的可靠性和灵活性. 增加代码的可理解性. 面向对象编程有很多重要的特性,比如:封装,继承,多态和抽象.下面的章节我们会逐个分析这些特性. 封装 封装给对象提供了隐藏内部特性和行为的能力.对象提供一些能被其他对象访问的方法来改变它内部的数据.在Java当中,有3种修饰符:public,private和protected.每一种修

【转载】20道常见初级Java面试题

这篇文章的内容很不错.学到了很多东西.值得仔细琢磨. http://mt.sohu.com/20160831/n466900239.shtml 20道常见初级Java面试题,入职者必备! 广州华信智原2016-08-31 09:30:37阅读(564)评论(0) 声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场.举报 大家都应该知道Java是目前最火的计算机语言之一,连续几年蝉联最受程序员欢迎的计算机语言榜首,因此每年新入职Java程序员也数不胜数.究

几道坑人的PHP面试题 试试看看你会不会也中招

这篇文章主要介绍了几道坑人的PHP面试题,试试看看你会不会也中招,这些题目都用了一些障眼法,需要你有一双火眼金睛哦,需要的朋友可以参考下 这几道题是在德问上看到的,感觉挺有意思,拿来给大家分享其中的陷阱,看看你会不会掉入其中. 第一题 $arr = array(0=>1,"aa"=>2, 3, 4); foreach($arr as $key=>$val){    print($key == "aa" ? 5 : $val);} 输出结果是多少?如

松哥整理了 15 道 Spring Boot 高频面试题,看完当面霸

什么是面霸?就是在面试中,神挡杀神佛挡杀佛,见招拆招,面到面试官自惭形秽自叹不如!松哥希望本文能成为你面霸路上的垫脚石! 做 Java 开发,没有人敢小觑 Spring Boot 的重要性,现在出去面试,无论多小的公司 or 项目,都要跟你扯一扯 Spring Boot,扯一扯微服务,不会?没用过? Sorry ,我们不合适! 今天松哥就给大家整理了 15 道高频 Spring Boot 面试题,希望能够帮助到刚刚走出校门的小伙伴以及准备寻找新的工作机会的小伙伴. 1.什么是 Spring Bo

整理的70道阿里高级Java面试题,都来挑战一下,看看自己有多厉害

整理的70道阿里高级Java面试题,都来挑战一下,看看自己有多厉害.1.java事件机制包括哪三个部分?分别介绍.2.为什么要使用线程池?3.线程池有什么作用?4.说说几种常见的线程池及使用场景.5.线程池都有哪几种工作队列?6.怎么理解无界队列和有界队列?7.线程池中的几种重要的参数及流程说明.8.什么是反射机制?9.说说反射机制的作用.10.反射机制会不会有性能问题?11.你怎么理解http协议?12.说说http协议的工作流程.13.http有哪些请求提交方式?14.http中的200,3