7.6. LIMIT и OFFSET
Ð£ÐºÐ°Ð·Ð°Ð½Ð¸Ñ LIMIT и OFFSET позволÑÑÑ Ð¿Ð¾Ð»ÑÑиÑÑ ÑолÑко ÑаÑÑÑ ÑÑÑок из ÑеÑ
, ÑÑо вÑдал оÑÑалÑной запÑоÑ:
SELECTÑпиÑок_вÑбоÑкиFROMÑаблиÑное_вÑÑажение[ ORDER BY ... ] [ LIMIT {ÑиÑло| ALL } ] [ OFFSETÑиÑло]
ÐÑли ÑказÑваеÑÑÑ ÑиÑло LIMIT, в ÑезÑлÑÑаÑе возвÑаÑаеÑÑÑ Ð½Ðµ болÑÑе заданного ÑиÑла ÑÑÑок (менÑÑе Ð¼Ð¾Ð¶ÐµÑ Ð±ÑÑÑ, еÑли Ñам запÑÐ¾Ñ Ð²Ñдал менÑÑее колиÑеÑÑво ÑÑÑок). LIMIT ALL ÑавноÑилÑно оÑÑÑÑÑÑÐ²Ð¸Ñ ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ LIMIT.
OFFSET ÑказÑÐ²Ð°ÐµÑ Ð¿ÑопÑÑÑиÑÑ Ñказанное ÑиÑло ÑÑÑок, пÑежде Ñем наÑаÑÑ Ð²ÑдаваÑÑ ÑÑÑоки. OFFSET 0 ÑавноÑилÑно оÑÑÑÑÑÑÐ²Ð¸Ñ ÑÐºÐ°Ð·Ð°Ð½Ð¸Ñ OFFSET, а LIMIT NULL â оÑÑÑÑÑÑÐ²Ð¸Ñ LIMIT. ÐÑли Ñказано и OFFSET, и LIMIT, ÑнаÑала ÑиÑÑема пÑопÑÑÐºÐ°ÐµÑ OFFSET ÑÑÑок, а заÑем наÑÐ¸Ð½Ð°ÐµÑ Ð¿Ð¾Ð´ÑÑиÑÑваÑÑ ÑÑÑоки Ð´Ð»Ñ Ð¾Ð³ÑаниÑÐµÐ½Ð¸Ñ LIMIT.
ÐÑименÑÑ LIMIT, важно иÑполÑзоваÑÑ Ñакже пÑедложение ORDER BY, ÑÑÐ¾Ð±Ñ ÑÑÑоки ÑезÑлÑÑаÑа вÑдавалиÑÑ Ð² опÑеделÑнном поÑÑдке. ÐнаÑе бÑдÑÑ Ð²Ð¾Ð·Ð²ÑаÑаÑÑÑÑ Ð½ÐµÐ¿ÑедÑказÑемÑе подмножеÑÑва ÑÑÑок. ÐÑ Ð¼Ð¾Ð¶ÐµÑе запÑоÑиÑÑ ÑÑÑоки Ñ Ð´ÐµÑÑÑой по двадÑаÑÑÑ, но какой поÑÑдок Ð²Ñ Ð¸Ð¼ÐµÐµÑе в видÑ? ÐоÑÑдок бÑÐ´ÐµÑ Ð½ÐµÐ¸Ð·Ð²ÐµÑÑен, еÑли не добавиÑÑ ORDER BY.
ÐпÑимизаÑÐ¾Ñ Ð·Ð°Ð¿ÑоÑа ÑÑиÑÑÐ²Ð°ÐµÑ Ð¾Ð³ÑаниÑение LIMIT, ÑÑÑÐ¾Ñ Ð¿Ð»Ð°Ð½Ñ Ð²ÑÐ¿Ð¾Ð»Ð½ÐµÐ½Ð¸Ñ Ð·Ð°Ð¿ÑоÑов, поÑÑÐ¾Ð¼Ñ Ð²ÐµÑоÑÑнее вÑего Ð¿Ð»Ð°Ð½Ñ (а знаÑÐ¸Ñ Ð¸ поÑÑдок ÑÑÑок) бÑдÑÑ Ð¼ÐµÐ½ÑÑÑÑÑ Ð¿Ñи ÑазнÑÑ
LIMIT и OFFSET. Таким обÑазом, ÑазлиÑнÑе знаÑÐµÐ½Ð¸Ñ LIMIT/OFFSET, вÑбиÑаÑÑие ÑазнÑе подмножеÑÑва ÑезÑлÑÑаÑов запÑоÑа, пÑиведÑÑ Ðº неÑоглаÑованноÑÑи ÑезÑлÑÑаÑов, еÑли не ÑÑÑановиÑÑ Ð¿ÑедÑказÑемÑÑ ÑоÑÑиÑÐ¾Ð²ÐºÑ Ñ Ð¿Ð¾Ð¼Ð¾ÑÑÑ ORDER BY. ÐÑо не оÑибка, а неизбежное ÑледÑÑвие Ñого, ÑÑо SQL не гаÑанÑиÑÑÐµÑ Ð²Ñвод ÑезÑлÑÑаÑов запÑоÑа в некоÑоÑом поÑÑдке, еÑли поÑÑдок не опÑеделÑн Ñвно пÑедложением ORDER BY.
СÑÑоки, пÑопÑÑкаемÑе ÑоглаÑно пÑÐµÐ´Ð»Ð¾Ð¶ÐµÐ½Ð¸Ñ OFFSET, Ñем не менее Ð´Ð¾Ð»Ð¶Ð½Ñ Ð²ÑÑиÑлÑÑÑÑÑ Ð½Ð° ÑеÑвеÑе. Таким обÑазом, пÑи болÑÑиÑ
знаÑениÑÑ
OFFSET ÑабоÑÐ°ÐµÑ Ð½ÐµÑÑÑекÑивно.