诸如“LIMIT 3”和“LIMIT 4”这样的操作都只是LIMIT的基础用法。我们想要单独查看的行并不总是在结果的最上面,它们还有可能排在中间。例如,如果李乔丹想指定返回例句(1)结果中的第4、5、6、7、8行信息,那么该怎么办呢?
为了帮助同学们更进一步地对LIMIT的语法及SQL语句的调性进行理解,我们先假设存在这样一个关键词——FROG,它的用法如下:
这可不是我能接受的SQL语句,不过我还是勉为其难地读一下好了。看样子这是一种“直译”需求的表达方式,因为它直接引出了你们所指定的行。看来如果“FROG”真实存在,那么这个问题也就迎刃而解了。不错,优秀的一年级新生,你们已经开始创造自己的语法了!这是一件值得鼓励的事,因为这证明你们在仔细思考!
不过话说回来,这也许并不是一种有效率的表达方式,因为这只“青蛙”显然不懂得跳跃。请想象一下,如果你要查看的是第4~80行的信息,那么逐一写下所有行号岂不是很费时费力吗?而且人们阅读起来也会觉得冗长。要知道,大家都喜欢阅读言简意赅的SQL语句。
MagicSQL说得非常在理。事实上,理解语法可不能靠死记硬背,而是要用心体会语法背后的表达思路。下面就让我们来调整一下表达思路:
其实这两句话表达的含义相同,但是后者更加言简意赅,所以它将对应更加简单的语句表达:
大家可以看到,虽然我们使用了两条不同的SQL语句,但它们却能实现相同的查询效果。原因是“LIMIT x,y”和“LIMIT y OFFSET x”表达的含义相同:请返回第x行之后的y行信息。因此,当我们执行LIMIT语句之后,结果中的第1行信息原本对应的应该是第“x+1”行。
事实上,我们在例句(2)中使用的“LIMIT 3”,它其实是“LIMIT 0,3”和“LIMIT 3 OFFSET 0”的简写,表示返回第0行之后的3行信息,言下之意就是返回前3行信息。
读到这里,我们不妨再梳理一下LIMIT的用法:LIMIT接收一个或两个数值作为参数,且指定的参数必须为整数。如果我们需要指定两个参数,那么就有两种书写方式可供选择:“LIMIT x,y”和“LIMIT y OFFSET x”。参数x用来指定输出行的偏移量,参数y则用来指定输出的行数。
除此以外,还有一点值得同学们注意:由于参数x用来指定输出行的偏移量,所以如果表中的数据量很大,且我们指定的偏移量也很大,那么MySQL的执行速度就会变慢。