探索

sql入门新手教程

时间:2010-12-5 17:23:32  作者:热点   来源:时尚  查看:  评论:0
内容摘要:学SQL,第一件事是忘掉“编程”两个字。它更像是在一个巨大的仓库里找东西,只是你用的不是脚,是句子。 我见过太多新手抱着《SQL必知必会》啃了三天,然后对着一个SELECT语句发呆。其实核心就一句话:

学SQL,门新第一件事是手教忘掉“编程”两个字。它更像是门新在一个巨大的仓库里找东西,只是手教你用的不是脚,是门新句子。

我见过太多新手抱着《SQL必知必会》啃了三天,手教然后对着一个SELECT语句发呆。门新其实核心就一句话:你要什么,手教从哪里拿,门新条件是手教什么。翻译成SQL就是门新:

SELECT 你要的列 FROM 哪张表 WHERE 什么条件;

就这么简单。真的手教。

上周我帮一个朋友调试他写的门新第一个查询,他写了足足三十行,手教用了三个子查询嵌套。门新我问他:“你想干嘛?”他说:“找出所有买了两次以上东西的客户。”我说:

SELECT customer_id, COUNT(*) FROM orders GROUP BY customer_id HAVING COUNT(*) > 1;

他愣了两秒:“还能这样?”
对,还能这样。GROUP BY是SQL里最被低估的语法,它把相同的东西归堆,然后你就能数数了。HAVING是给归堆后的结果加条件,跟WHERE不一样——WHERE是给原始行加条件,这个区别你早晚会踩坑,不如现在记住。

再说说JOIN。很多人一看到多张表就发怵,其实你只需要问自己:这两张表之间靠什么字段连起来?就像你通讯录里有联系人,订单表里有购买记录,靠“手机号”就能把两边对上。SQL里写:

SELECT * FROM customers c JOIN orders o ON c.phone = o.customer_phone;

这里的c和o是别名,纯粹为了少打字。别怕,没人在乎你起什么名字,只要自己看得懂。

有个小细节特别容易坑新手——NULL。它不代表0,也不代表空字符串,它代表“不知道”。你用等号去匹配NULL永远匹配不上,必须写IS NULL。我见过有人排查了一下午bug,最后发现是WHERE age = NULL,改成IS NULL瞬间就好了。这种经历,每个SQL新手都会有一次,提前告诉你,省得你浪费那个下午。

还有ORDER BY,排序。默认升序,加DESC就是降序。比如看最贵的商品:

SELECT name, price FROM products ORDER BY price DESC LIMIT 10;

LIMIT是MySQL和PostgreSQL的写法,SQL Server用TOP,Oracle用ROWNUM。语法不统一确实烦人,但你就记住自己用的数据库是哪种就行。

当你开始写UPDATE和DELETE时,请一定、一定先写WHERE。我有个同事,刚入职第二天,跑了一条没有WHERE的UPDATE,整个用户表的名字全变成了“张三”。还好是测试环境。他说那是他人生中最漫长的五分钟。后来他养成了习惯:先写SELECT确认影响范围,再改成UPDATE或DELETE。这个习惯救了他无数次。

SQL这玩意,上手极快,精通极难。但你要知道,90%的工作量就那几个语法:SELECT、FROM、WHERE、GROUP BY、ORDER BY、JOIN。剩下的,都是遇到问题再查就行。别指望一次性学完,没人能做到。

给你一个练习的思路:找一份公开的数据库,比如某个城市一年的自行车租赁记录,或者电影票房数据。自己给自己出题:“哪个月下雨天租车的人最多?”“哪部电影票房最高但评分最低?”这些问题逼着你去想怎么组合语法,比看十遍教程都有用。

最后说一句可能有点反直觉的话:SQL写得越长,往往越说明你不会写。高手追求的是用最短的语句拿到同样的结果。别以写长SQL为荣,那是新手常有的误区。

去下载个SQLite,找个数据文件,开始写第一行吧。SELECT 1;——这算是你的Hello World,它返回一个数字1。然后你就正式上路了。

最近更新
热门排行
copyright © 2026 powered by 力不从心网   sitemap