对于SQL入门我分享一个个人观点:如果重视SQL练习的话,难度不大,如果光看书,难度很大。
我自己学习SQL花了1周左右,把SQL的经历总结为8个关卡,通过8张图来表示,期间也遇到了很多的坑,这里一并总结出来。领会了这8张图,基本上面试方面可以过关了。
我基于的学习材料如下:
1,SQL自学网,包含教程,视频,练习,算是一个全套资源了
自学SQL网(教程 视频 练习全套) xuesql.cn
对小白入门还算友好吧。
¥第1关,用20%语法解决80%的数据
学习SQL同样适用 20/80原则,学会20%的语法就能解决80%的问题,第一步学会基础的查询语句,足够运用在实际工作中了。
学习时间:2天。
image.png- 坑点分析:第一步不要去安装什么数据库,或者去学创建表,写入数据那些语法,你会被坑。为什么呢,相比于查询哪些语法更复杂,可以先照猫画虎把查询语句练起来
简单入手,可以提振自信心。一练就有效果sai~。
推荐一个初学者用到 《SQL手册》,用查字典的方法写SQL,在线的可查,避免死记语法。
image.png我这里截图不全,可以在线打开
手册网址:点击打开手册网址
- 关键点,打死记住****SQL****法则:
SELECT col,col,col 找什么? FROM table 从哪找? WHERE col 条件 条件是啥?
这个法则教你怎么一步步写一个查询SQL,可以当做一种写SQL的思维吧,我觉得非常好用。
简言之,写任何一个查询语句,都分解成3步:
第一步:思考FROM后面的(也即是表)
第二步:思考WHERE条件(查手册就可以)
第三步:完善SELECT后面的(也就是老板要显示的数据)。
可能跟大部分普通的思路不太一样,不过适用于初学,训练。
- 再说一个坑点,关于时间。
简单SELECT查询的入门学习时间,安排50%都不过分,这部分突破之后,后面很顺。这块我是反反复复折腾几次,大家吸取我的教训sai~。
¥第2关,搞定统计和排序
统计都是写在SELECT后面,也就是对结果统计,可以用WHERE筛选数据后统计。
排序都是最后执行,也就是所有计算做完,才做排序. 也就是最终结果排序。
学习时间:1天
image.png添加图片注释,不超过 140 字(可选)
坑1: 第一次对GROUP BY分组不好理解,这时候你可以用COUNT计数做实验,比如按某一个列分组,你可以自己看一下表里的数据,自己分分组,再和SQL计算出来的比对一下。
坑2:SELECT count() = 100 不要出现类似的这种语法错误,SELECT后面不能做条件*
坑3:多列排序问题,DESC是默认排序,所以
ORDER BY列1, 列2 表示两个降序, ORDER BY列1 ASC, 列2 表示第一列升序,第二列降序。 特别是这个 ORDER BY列1, 列2 ASC;不要以为是两个升序,其实第一个只是默认为DESC。
坑4:LIMIT 语法问题,LIMIT a,b 第一个a表示起始位置,第二个b表示个数
假设数据是 a1,a2,a3,a4,...an limit 1,2 结果 a2,a3 limit 0,2 结果 a1,a2 limit 1 结果 a1 limit 3,1 结果 a4
¥第3关,我会联表了
单表查询掌握之后,有些问题一张表数据不够,需要同时从多张表查数据,就用到联表语句了。
join联表,其实就是丰富FROM后面的内容,原始是FROM table一张表
现在是FROM table1 join table2 两张表合成一张表看待!(这个思维很重要,其实联表完了看成新表就可以)
学习时间:0.5天
image.png添加图片注释,不超过 140 字(可选)
坑1:内联,左连,右连 傻傻搞不清,这几乎是每一个人都会出现的问题。我到底用哪个联表方法。关键就是记住一点,你要留下哪些数据
table1 联 table2
留下两个表都有的ID, table1 inner join table2 留下table1的所有数据 table1 left join table2 留下table2的所有数据 table1 right join table2
¥第4关,复杂查询I follow U
简单查询会了之后,有一种情况是查询条件用到的数据正好是第二张表里的数据,这时候就需要用到子查询了,也就是查询嵌套着查询。
学习时间:0.5天
image.png添加图片注释,不超过 140 字(可选)
坑1: 子查询一开始不好理解,其实可以这么理解,比如:
select * from table where a = (select col from table2 where col1 = xx)
可以把这个sql拆成2步,先理解 (select col from table2 where col1 = xx),我们手动的去执行这个查询,假设得到的结果是100
那么:
select * from table where a = 100 是不是就是我们要的条件?
思考一下:为什么不直接用两步,第一步查出100,第二步直接用a=100来查,而要用子查询呢?
其实思考清楚这个问题,你对子查询就完全理解了。
select * from table where a = 100 select * from table where a = (select 100) select * from table where a = (select col from table2 where col1 = xx)
上面三句,在现在这个时刻效果是一样的,都能查出要的数据。
但是第三句的子查询有一个好处,就是当table2的col数据变更的时候(数据总是不断更新的),这种情况下第3句任然可以查出正确的结果,但是1,2句就不行了。
¥第5关,新增,更新和删除数据
有时候需要自己去新增数据库的数据,所有要学习一下 增,删,改的语法。也就是INSERT,
UPDATE 和 DELETE
学习时间:0.5天
image.png坑1:UPDATE 和 DELETE有一定的危险性,一定要注意先SELECT出来看一下是不是你要更新的数据。特别是对公司的数据库做操作的时候
坑2:INSERT新增一定要注意ID重复问题,大多数表的ID都是不可以重复的,你重复写入相同的ID不会成功
¥第6关,新建表和表的关系
有时候会用到新建数据库和表的操作。库-表的关系是库大于表,不同名字的库下面可以建立相同的表。
db1 包含 table1,table2 db2 包含 table1,table3
这是允许的,可以用 db1.table1, db2.table1 这样来表示
学习时间:0.5天
image.png添加图片注释,不超过 140 字(可选)
坑1:DROP 操作极其危险,也就是平时我们听到的删库跑路操作,一般情况不要用。
¥第7关,函数使用帮我解决难题
在SQL运用的高级阶段,往往用到各种函数,查询条件里可以用函数,数据结果的计算也可以用函数。
你可以把函数理解为数据库提供给我们的一些算法,这样我们就可以在SQL里直接计算了。这些算法组合到一起就能发挥给常大的能力。
学习时间:1天
image.png添加图片注释,不超过 140 字(可选)
坑1:substr字符串截图函数,substr(a,b) 老是有人纠结这个a和b的含义,其实真的记不住,实际用的时候去调一下a,b大小就可以了
坑2:like模糊匹配,简单点理解就是用一个字符串 表示一个系列的字符串。把%符号理解成一张万能牌。
坑3:case 语法无法理解。这个是真的不好理解。你可以把case 心里想成if,如果的意思。
作用就是把1堆数据按规则分类。
¥第8关,汇总各种奇奇怪怪的SQL符号
这一关复习一下,其实我发现SQL就是跟各种符号打交道,出错也大部分因为这些符号,所以做了一个整理汇总,尽量把这些符号搞清楚吧。
学习时间:0.5天
image.png
添加图片注释,不超过 140 字(可选)
- 总结
SQL的语法,说多也不多,说少也不少,想要灵活运用,千万不能死记硬背。我还是忍不住把这个公式贴出来:
SELECT col,col,col 找什么? FROM table 从哪找? WHERE col 条件 条件是啥?
这个SQL法则告诉我们SELECT才是最重要的语法,INSERT ,UPDATE等变更数据平时不怎么用,你记它干啥,需要的时候翻书就可以找到。
第二点,写查询语句其实就是三板斧,先思考FROM这一段,再思考 WHERE这一段,最后再优化SELECT后面的。
要是你每一个SQL都能这么思考,我保证你可以学的贼快
- 说说一个改变我思维
你的SQL出过错吗?其实一开始我看到SQL出错是很烦的,谁不烦,谁不想一次性写对。 无数次教训加上大牛的指导,我才明白SQL不是一次性写出来,真的是一步步调出来的(很多次看着大牛调试我的SQL)。遇到出错了,可以简化一下,换一换条件,甚至一个字一个字比对,一点点的调试+分析,要真有这个耐心。
不知道你学习过程是不是也觉得SQL要一次性写出来,是的话真的可以换一个思维了。
- 最后,练习真的很重要
看100遍,不如练习1遍(谁练谁知道)。
重点:除了SQL练习,我还重点整理了100多个大厂的面试真题
[图片上传失败...(image-5eb057-1715131893187)]
网友评论