1.从理论上来讲
数据库操作可能包含以下几大类:
数据操纵语言:单表/多表查询就不用多说了,select查询;数据更新如
UPDATE 表名称 SET 列名称 = 新值 WHERE 列名称 = 某值
数据定义语言:主要是表/索引/视图的创建,索引的创建是比较重要的概念,索引应用的如何直接决定了你的任务处理时间或处理效率,这一块可以好好看一下,例如:
以下两种情况下,title创建了索引,那种情况会失效?(文末回答)
A:SELECT * FROM test_a WHERE title LIKE '5000%';
B:SELECT * FROM test_a WHERE title LIKE '%5000';
视图也同样很重要,视图的灵活运用也可以给你提高效率。例如将一些常用的业务需求创建为视图。
实体完整性和参照完整性:好像听起来比较抽象,这个说的意思主要是让你掌握创建表的主外键;
数据控制语言:主要内容为授权与回收,真正的在公司里,你是不可能真的对某一个库或表拥有较大权利的,你的账号基本上就是授权了select的权限,或者你只能操作某些表或者库,这就是授权与回收的意思。一旦操作不当,全给你删了啥的,是不是很崩溃~
数据库编程:这个主要是存储过程和触发器。
触发器就是你设定好某个触发条件,一旦符合了该条件就会执行相应的操作。例如在学生表中每插入一个学生,就引发触发条件,将这个学生学号插入到学生成绩表,成绩默认为0.
CREATE
[DEFINER = { user | CURRENT_USER }]
TRIGGER trigger_name
trigger_time trigger_event
ON tbl_name FOR EACH ROW
[trigger_order]
trigger_body
存储过程更像是定义一个函数,你创建好了这个存储过程,然后调用就行。
以上算是对数据库操作的一个简单总结,可以从更宏观的角度大体有个认识;
2.实践上
如果真的工作,会发现平时做的更多的时候数据操纵语言,写各种SQL,简单的,复杂的,有的SQL长达好几页长,涉及到n多的中间表之类的,当然了,你如果没有一口气写出来的勇气,可以一步一步的来写,这都不是大问题。主要是,这里面有原子操作你会经常用到:
过滤和投影:也就是where条件选择和查找某几列的意思,这个一般数据库或者大数据引擎都做了查询下推的优化。
连接:自然连接大家都会,但是更多经常会用到一些左/右外连接等,这个可以看看区别,其实就是以谁为基准的区别,左外连接,以左表为基准,右表没有的填null;右连接也是这个道理;
分组聚合:分组和聚合本是分开的,但是一般分组都要做一些统计,这里很重要的点,也是面试经常会问到的,就是分组操作和条件过滤之间的先后顺序的问题。
select a,count(a) as ac from tbl1 where a > 3 group by a having ac>4;
文末回答
排序:这个没说什么好说的,就是排序。
哦对了,还有一个distinct,现实中的数据往往挺乱挺复杂,我们经常会用到distinct看看没有重复的到底有多少之类的。
好啦,基本上我感觉上面的这些,如果你有了一个大体的认识,再去有重点的看一些例如索引,having的执行次序这些东西就差不多了~希望有所帮助~
文末:
我就是文末,我来回答上面的两个小问题把,回答的不对大家可以指正:
1.如果LIKE是前缀匹配则会命中索引,否则不会命中。另外以上的查询结果为空,但是不影响说明索引的作用。
这要从索引的实现上来讲,索引一般用的是b+树来实现,如果你前缀匹配,可以从树的顶点往下匹配,至少可以匹配几回,但是如果前缀没有,查询引擎只想对着这棵树吊死~
2.tips:先where条件过滤,再分组,分完组统计完再通过having进行筛选
数据分析人员需要掌握sql到什么程度? - 小贱的回答 - 知乎
https://www.zhihu.com/question/379694223/answer/1167020779