标签:计算 印象 group by style 命令 key signed 如何 大致
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、对数据库范式的理解?
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 语句来加深印象,逐渐远离可视化工具。
希望我的总结也对你有帮助。:)
标签:计算 印象 group by style 命令 key signed 如何 大致
原文地址:http://www.cnblogs.com/cjl21/p/7270741.html