seegongsik
数据

什么是 SQL

假设你站在一个装满了表的数据库前面。要从里面只取出想要的东西,该怎么办?就像问人一样,清清楚楚地问数据库就行:选好要看哪些列,再说出只留下哪些行的条件。用来这样发问的语言,就是 SQL。

01

向数据库发问

前面看到,数据库是装满表的仓库,表里的行和列排得整整齐齐。可是在那么多行里,怎样只取出想要的那些呢?
就像问人那样问就行,只不过说法要事先定好。把“告诉我二十岁以上的人的姓名”这样的人话,改成定好的说法发过去,数据库就能听懂并作出回答。

"告诉我二十岁以上的人的姓名"
SELECT _____ FROM people WHERE _____
点人话的碎片,把它变成发问的话

依次点人话的碎片,把它变成查询语句。选好要看的列和条件,定好的说法就拼出来了。

人话变成了查询语句。仔细看,它分成两部分:一部分说要看哪些列,另一部分说只留下哪些行。
再用 FROM 加上从哪张表里取,查询语句就完整了。看起来复杂,里面其实很简单。先从挑列开始,一步步看。

02

挑出要看的列:SELECT

表里有好几列,比如姓名、年龄、城市。可并不是每次都需要所有的列,有时只想看姓名。
这时就只挑想看的列。挑中的列留下,其余的被藏起来。像这样挑列,叫作 SELECT,它决定结果里显示什么。

Ana
24
Lima
Ben
17
Busan
Mei
31
Xian
点你想看的列的表头

点一下想看的列的表头。只留下挑中的列,其余的列被藏起来。再点一次就恢复。

只剩下需要的列,干干净净,表也好看多了。可只挑列,有时还不够,因为所有的行都还在。
不管多大年纪,所有人都显示着。我们通常会带着条件来问,比如“只要二十岁以上的人”。这次来筛一筛行。

03

用条件筛行:WHERE

这次轮到行了。表里的行并不是都需要。想要的那些行有个共同点,比如年龄在二十岁以上。
把这个共同点写成条件。符合条件的行留下,不符合的行被拿掉。像这样筛行,叫作 WHERE,它决定只留下什么。

name
age
city
Ana
24
Lima
Ben
17
Busan
Mei
31
Xian
Leo
19
Oslo
点一个条件来筛行

点一个条件加上去。年龄符合条件的行留下,不符合的行变淡、被拿掉。

只剩下符合条件的行,其余的悄悄退出了。挑列和筛行,这两样本事你都学会了。
不过真正的威力,在两者合起来的时候。一边挑出想看的列,一边只留下想要的行,就能得到一张正好只剩需要内容的表。来把两样一起用。

04

合起来就是结果表

现在把两样本事一起用。用条件筛行,只剩下符合条件的行。再从这些行里只挑想看的列,就只显示这些列。
挑出的列和筛出的行交汇的地方,就出现一张小小的结果表,问题的答案以表的形式出来了。真正的数据库是先筛行再挑列,不过先想哪一步,结果都一样。

name
age
city
Ana
24
Lima
Ben
17
Busan
Mei
31
Xian
Leo
19
Oslo
点两个步骤把它们合起来

依次点“挑列”和“按条件筛”。两样合起来,就会出来一张只剩符合条件的行和挑中的列的结果表。

想要的答案以表的形式出来了。在那么多行和列里,一句查询就正好挑出了需要的部分。不用人一项项用眼睛扫,数据库自己就会挑好。
表就算有一百万行,也是同样的做法。如果有前面看过的索引,数据库会用它更快地找到符合条件的行。只要把查询写好,答案很快就来。

05

小结

用一句话概括:SQL 是向数据库发问的语言。挑要看哪些列的是 SELECT,筛只留哪些行的是 WHERE。
两样合起来,就会出来一张正好符合条件的结果表。一句查询就以表的形式拿到想要的答案,这就是 SQL 的基础。

依次点要点回顾一下

依次点要点回顾一下。(发问的语言 SQL → 挑列 SELECT → 筛行 WHERE → 合起来就是结果表)

现在你知道怎样清清楚楚地向数据库发问了:挑出想要的列,筛好行,只拿回需要的答案。
不过到目前为止,我们只处理了一张表。实际上,信息常常分散在好几张表里,比如人的表和订单的表各是一张。下一课讲把几张表连起来发问的方法:连接(JOIN)。

一句话总结SQL 是为了从数据库里得到想要的东西而发问的语言。只要说两件事。先选要看哪些列:表里有好几列,只留下想看的那些,这叫 SELECT。再定只留哪些行的条件:不是所有行,而是只留下符合条件的行,这叫 WHERE。挑出的列和筛出的行一交汇,就出来一张正好符合条件的小结果表。用一句查询把答案以表的形式拿回来,这就是 SQL 的基础。
← 数据
如果有帮助,请支持我们