前面我们先是假设了一个关键词——FROG,然后通过它与LIMIT的对比,我们感受到了LIMIT语法背后的表达思路。借此机会,我们不妨先放慢学习的脚步,一起聊聊如何理解SQL语言中的语法。
“语法”这个词相信同学们并不陌生。在英语课堂上,老师会通过例句来为我们解释各类英语语法。毫无疑问,这些语法是基于英语使用习惯而总结出来的一套表达规律。然而,在英语考试中,这些语法又会化身为“非黑即白”的选项,如果选择错误,我们将不会得分。所以我们大多数人都会将英语语法视为一种使用规范。
不错,这其实对于我们理解SQL语法也很有启发。不难发现,SQL语法同样是一种使用规范。因为如果我们写下的SQL语句过于天马行空,超出了RDBMS的理解能力,系统就会报错。例如,SELECT all_money FROM Bank to my bank_account;。
然而仅把SQL语法视为一种“刚性”的使用规范还不够,因为这忽略了计算机语言的技巧性。事实上,书写一些SQL语句是需要技巧的。准确来讲,这是一种与RDBMS沟通的规范性技巧。那么这里的“规范”和“技巧”要怎样结合起来理解呢?这两个词看起来似乎存在矛盾。
我认为这要从语言的交流对象谈起。在日常生活中,我们人类之间的沟通方式不仅有书面表达,还有咿咿呀呀的口语交流和心有灵犀的眼神交流。然而SQL的交流对象是一个我们看不见的小家伙,它躲在电脑里,只允许我们通过它认可的书面表达与它取得联系,而所谓的“它认可的书面表达”就是SQL的语法“规范”。
正是如此,这就好比是给远方一位有些呆板的友人写信,我们只能按照他的阅读习惯来表达思想。如果还想从他那里获得帮助,那么这封信就要写得尽可能具体且没有疏漏。简单来讲,就是要在信件中将我们的想法表达得非常清楚。
不过话虽这样说,表达清楚可不是一两句话就能办到的。想想偶像剧里的情节吧,男女主人公经常要在泪水和下雨天的鼓励下,发表真爱彼此的长篇大论以后才能“把话说清楚”。但无论怎样,我们总希望可以用简单的语句来表达复杂的需求。因此SQL语法必须解决这样一个问题:如何在把话说得尽可能具体和没有疏漏的同时,还能使表达尽可能简单?
事实上,这就涉及“技巧”了。通过学习LIMIT语法,大家会感受到,虽然每个人都有自己的表达方式,但其实有些表达方式对应的是同一需求,例如“返回第4、5、6、7、8行信息”和“返回第3行之后的5行信息”。在这种情况下,我们就要统一表达思路,并指定关键词的用法为“LIMIT 3,5”和“LIMIT 5 OFFSET 3”,而不是“LIMIT 4,5,6,7,8”。
因此,SQL语法中所谓的“技巧”,指的就是深刻理解语法背后的表达思路。而所谓的“规范”,指的就是“强迫”我们按照统一的表达思路来书写SQL语句。
以上讨论只是《快速念咒》的一家之言,我们只是希望可以为各位读者提供一些思考问题的方式,并希望大家能收获属于自己的见解和感悟。事实上,学习操作固然重要,但这不应该成为我们学习的唯一目的。相比之下,感悟某个学科领域的思维方式更加重要,因为它对我们的启发往往不受学科之间的限制。