什么是 SQL
假设你站在一个装满了表的数据库前面。要从里面只取出想要的东西,该怎么办?就像问人一样,清清楚楚地问数据库就行:选好要看哪些列,再说出只留下哪些行的条件。用来这样发问的语言,就是 SQL。
向数据库发问
前面看到,数据库是装满表的仓库,表里的行和列排得整整齐齐。可是在那么多行里,怎样只取出想要的那些呢?
就像问人那样问就行,只不过说法要事先定好。把“告诉我二十岁以上的人的姓名”这样的人话,改成定好的说法发过去,数据库就能听懂并作出回答。
依次点人话的碎片,把它变成查询语句。选好要看的列和条件,定好的说法就拼出来了。
人话变成了查询语句。仔细看,它分成两部分:一部分说要看哪些列,另一部分说只留下哪些行。
再用 FROM 加上从哪张表里取,查询语句就完整了。看起来复杂,里面其实很简单。先从挑列开始,一步步看。
挑出要看的列:SELECT
表里有好几列,比如姓名、年龄、城市。可并不是每次都需要所有的列,有时只想看姓名。
这时就只挑想看的列。挑中的列留下,其余的被藏起来。像这样挑列,叫作 SELECT,它决定结果里显示什么。
点一下想看的列的表头。只留下挑中的列,其余的列被藏起来。再点一次就恢复。
只剩下需要的列,干干净净,表也好看多了。可只挑列,有时还不够,因为所有的行都还在。
不管多大年纪,所有人都显示着。我们通常会带着条件来问,比如“只要二十岁以上的人”。这次来筛一筛行。
用条件筛行:WHERE
这次轮到行了。表里的行并不是都需要。想要的那些行有个共同点,比如年龄在二十岁以上。
把这个共同点写成条件。符合条件的行留下,不符合的行被拿掉。像这样筛行,叫作 WHERE,它决定只留下什么。
点一个条件加上去。年龄符合条件的行留下,不符合的行变淡、被拿掉。
只剩下符合条件的行,其余的悄悄退出了。挑列和筛行,这两样本事你都学会了。
不过真正的威力,在两者合起来的时候。一边挑出想看的列,一边只留下想要的行,就能得到一张正好只剩需要内容的表。来把两样一起用。
合起来就是结果表
现在把两样本事一起用。用条件筛行,只剩下符合条件的行。再从这些行里只挑想看的列,就只显示这些列。
挑出的列和筛出的行交汇的地方,就出现一张小小的结果表,问题的答案以表的形式出来了。真正的数据库是先筛行再挑列,不过先想哪一步,结果都一样。
依次点“挑列”和“按条件筛”。两样合起来,就会出来一张只剩符合条件的行和挑中的列的结果表。
想要的答案以表的形式出来了。在那么多行和列里,一句查询就正好挑出了需要的部分。不用人一项项用眼睛扫,数据库自己就会挑好。
表就算有一百万行,也是同样的做法。如果有前面看过的索引,数据库会用它更快地找到符合条件的行。只要把查询写好,答案很快就来。
小结
用一句话概括:SQL 是向数据库发问的语言。挑要看哪些列的是 SELECT,筛只留哪些行的是 WHERE。
两样合起来,就会出来一张正好符合条件的结果表。一句查询就以表的形式拿到想要的答案,这就是 SQL 的基础。
依次点要点回顾一下。(发问的语言 SQL → 挑列 SELECT → 筛行 WHERE → 合起来就是结果表)
现在你知道怎样清清楚楚地向数据库发问了:挑出想要的列,筛好行,只拿回需要的答案。
不过到目前为止,我们只处理了一张表。实际上,信息常常分散在好几张表里,比如人的表和订单的表各是一张。下一课讲把几张表连起来发问的方法:连接(JOIN)。