当前位置:首页 > 综合 > sql菜鸟教程 正文

sql菜鸟教程

时间:2026-10-17 05:10:10 来源:力不从心网

学SQL最有效的菜程方式不是看书,是鸟教直接打开一个数据库,把数据搞乱,菜程再想办法查出来。鸟教我见过太多人抱着《SQL必知必会》啃了三周,菜程连SELECT都没敲过几次。鸟教这跟学游泳只看教学视频有什么区别?菜程

先装个MySQL或者SQLite。SQLite更省事,鸟教一个文件搞定,菜程不用配服务器。鸟教然后建一张表:

CREATE TABLE users ( id INTEGER PRIMARY KEY,菜程 name TEXT, age INTEGER, city TEXT );

塞几条数据进去。别嫌土,鸟教就塞张三李四王五,菜程年龄城市随便填。鸟教数据不重要,菜程重要的是你手上有东西可以折腾。

SELECT是使用频率最高的语句,没有之一。日常工作中你80%的时间都在写查询,剩下20%在骂为什么查得这么慢。

SELECT * FROM users;

星号代表所有列。实际工作中别这么写,DBA看到会想打人。列名写清楚,哪怕只有三列。原因很简单:表结构会变,今天加一列明天删一列,用星号迟早翻车。

WHERE是过滤条件。查年龄大于25的:

SELECT name, age FROM users WHERE age > 25;

注意字符串要用单引号,数字不用。这个坑新手必踩。我当初写WHERE city = "北京",MySQL直接给我返回空结果,排查了半小时才发现是引号问题。双引号在某些数据库里是标识符,不是字符串。

ORDER BY排序,DESC倒序。查年龄最大的三个人:

SELECT name, age FROM users ORDER BY age DESC LIMIT 3;

LIMIT在MySQL和PostgreSQL里都能用,SQL Server用TOP。这种方言差异很烦,但没办法,各家有各家的脾气。

GROUP BY是分水岭。能理解分组的人,SQL算是入门了。比如统计每个城市有多少人:

SELECT city, COUNT(*) as cnt FROM users GROUP BY city;

这里COUNT(*)算的是每组的行数。WHERE在GROUP BY之前执行,HAVING在之后。这个执行顺序搞不清楚,写出来的SQL大概率是错的。

JOIN是另一个坎。两张表关联查询,LEFT JOIN、INNER JOIN、RIGHT JOIN,面试必问,实际工作也天天用。建个orders表,user_id关联users的id:

SELECT u.name, o.amount FROM users u INNER JOIN orders o ON u.id = o.user_id;

INNER JOIN只返回两边都匹配的行。LEFT JOIN返回左表全部,右表没匹配的填NULL。我个人的经验是,实际业务里LEFT JOIN用得最多,因为经常要查“有用户但没订单”这类数据。

索引这个东西,数据量小的时候完全感觉不到。几千行数据,加不加索引查询都是毫秒级。但一旦上了百万行,没有索引的查询能跑到你怀疑人生。在WHERE和JOIN用到的列上加索引,是最基本的优化手段。别到处加,索引占空间,写入时也要维护,加多了反而慢。

说个真实案例。之前有个同事写了个查询,跑了40多秒,老板在群里@了他三次催进度。我帮他看了一眼,子查询套了三层,每层都在全表扫描。改成JOIN加索引,0.2秒出结果。SQL写得好不好,差距就是这么大。

学SQL不需要背语法。把SELECT、WHERE、GROUP BY、JOIN这四个搞熟,能解决大部分问题。剩下的子查询、窗口函数、存储过程,用到再查。网上文档多的是,官方文档永远是最准的。

最后给个建议:找个真实的数据集练手。比如下载一份城市人口数据,或者自己编一个电商订单表,几百行就行。对着真实数据写查询,比做教程里的练习题有意思得多,也记得牢。

上一篇:央视网渗透
下一篇:常见中间件漏洞
推荐内容