《SQL 入门:用一次查询认识你的第一张表》
写程序久了,总会遇到一个问题:数据不在代码里,而在一张表里。用户信息、订单记录、日志条目,都躺在数据库中,不会自己跑到你面前。SQL 就是和数据库打交道的语言:它不负责写界面,也不负责跑业务逻辑,只做一件事,就是把你要的数据找出来、放进去、改掉或者删掉。
先从一张表说起。表由行和列组成,列是字段,比如姓名、年龄、城市;行是一条记录,比如某一个人的全部信息。查数据最基本的动作,就是从一张表里选出你想要的列,再决定要哪些行。先把“选哪些列、要哪些行”这两个问题分开,查询就不会乱。列选多了,看到的是一堆用不上的字段;行筛不准,拿到的就是全表数据。
筛选是新手最先要练熟的本事。条件就是“满足什么才算数”,比如城市等于某个值、年龄大于某个数、状态是已完成。多个条件可以组合:同时满足用“并且”,满足其一即可用“或者”,取反则是“不是这样”。写条件时先想清楚边界:大于和大于等于差一个值,漏掉边界就可能少算一条记录。条件写完,先在小数据上跑一遍,看看结果是不是自己想要的,再用到大表上。
排序和限制数量是另一组常用操作。数据默认没有固定顺序,想要按时间从新到旧、按金额从大到小,就要明确告诉数据库按哪一列排、升序还是降序。只看前几条时,就限制返回的行数,比如只看最新的十条。排序加限制一起用,才能稳定地拿到“最新十条”“销量前十”这类结果;只限制数量而不排序,拿到的前十条可能是随机的,没有实际意义。
聚合是把很多行变成一个数字的办法。计数是数一数有多少条, 求和是把某一列加起来, 平均值是算一算平均水平。分组则是先按某一列把记录分堆,再对每一堆分别聚合,比如按城市统计人数、按状态统计订单数。分组后筛选和筛选行是两回事:前者是先挑行再分组,后者是分组算完后再挑堆,顺序弄反,结果就完全不同。
连接是把两张表拼在一起的办法。一张表存用户,一张表存订单,用户编号是两张表之间的纽带。按编号对上,就能把“谁买了什么”拼成一行。连接时最常见的坑是条件写错:条件漏了,行数会爆炸式增长;条件写错,拼出来的就是张冠李戴的数据。动手前先确认两张表的关联字段是不是同一个含义,再看结果的行数是否合理。
最后给新手三条建议。第一,先在练习表上动手,不要一开始就对真实数据做修改和删除,改错的数据不一定找得回来。第二,查询先写小,再写大:先选一列、加一个条件、跑通了再逐步加列、加条件、加分组。第三,养成看结果行数的习惯,行数突然变大或变小,往往是条件写错的信号。数据的价值不在于它存在哪里,而在于你能不能准确地把它问出来,从一次查询开始,你就有了和数据库对话的办法。
- 点赞
- 收藏
- 关注作者
评论(0)