'LIMIT 0, 1' และ 'LIMIT 1' มีความแตกต่างหรือไม่?


15

ฉันเพิ่งสะดุดเมื่อรหัสตัวอย่างซึ่งแตกต่างจากสัญลักษณ์เหล่านี้

SELECT * FROM table LIMIT 0, 1
SELECT * FROM table LIMIT 1

อาร์กิวเมนต์แรกควรถูกพิจารณาว่าเป็นออฟเซ็ตหากฉันไม่ผิดวัตถุประสงค์ของแบบสอบถามทั้งสองนั้นคือ จำกัด การเลือกให้อยู่ในแถวแรกของ table

มีผลกระทบเชิงลบเมื่อออกจากออฟเซ็ต / เป็นไปได้อย่างไรที่จะปล่อยมันออกมาตั้งแต่แรก? หรือฉันเข้าใจผิดแบบสอบถาม?


3
ไม่คุณเข้าใจถูกต้องพวกเขาเทียบเท่ากัน นี่คือ: LIMIT 1 OFFSET 0. แต่คุณควรรวมORDER BYไว้ในแบบสอบถามใด ๆ ที่มีLIMITเว้นแต่จะมีเหตุผลเฉพาะไม่ให้
ypercubeᵀᴹ

คำตอบ:


13

ตามเอกสารระบุว่า:

LIMIT ประโยคสามารถใช้ในการ จำกัด จำนวนแถวกลับโดยที่  SELECT คำสั่ง LIMIT รับอาร์กิวเมนต์หนึ่งหรือสองอาร์กิวเมนต์ซึ่งทั้งคู่ต้องเป็นค่าคงที่จำนวนเต็มแบบไม่ลบ (ยกเว้นเมื่อใช้คำสั่งที่เตรียมไว้)

ด้วยสองข้อโต้แย้งอาร์กิวเมนต์แรกจะระบุการชดเชยของแถวแรกที่จะกลับมาและที่สองระบุจำนวนแถวสูงสุดที่จะกลับมา The offset of the initial row is 0 (not 1).

ส่วนLIMITคำสั่งถูกใช้ในSELECTคำสั่งเพื่อ จำกัด จำนวนแถวในชุดผลลัพธ์ LIMITข้อยอมรับหนึ่งหรือสองข้อโต้แย้ง ค่าของการขัดแย้งทั้งสองจะต้องเป็นศูนย์หรือค่าคงที่จำนวนเต็มบวก

ต่อไปนี้แสดงให้เห็นถึงLIMITไวยากรณ์ประโยคที่มี 2 ข้อโต้แย้ง:

SELECT * FROM tbl
LIMIT offset, count;

มาดูกันว่า offset และ count มีความหมายอย่างไรในข้อ จำกัด LIMIT:

  • offsetระบุ offset ของแถวแรกที่จะกลับมา ออฟเซ็ตของแถวแรกคือ 0 ไม่ใช่ 1
  • countจำนวนระบุสูงสุดของแถวที่จะกลับมา

เมื่อคุณใช้LIMITกับหนึ่งอาร์กิวเมนต์อาร์กิวเมนต์นี้จะถูกใช้เพื่อระบุจำนวนแถวสูงสุดที่จะส่งคืนจากจุดเริ่มต้นของชุดผลลัพธ์

SELECT * FROM tbl LIMIT count;

แบบสอบถามด้านบนเทียบเท่ากับแบบสอบถามต่อไปนี้พร้อมกับLIMITข้อที่ยอมรับสองข้อโต้แย้ง:

SELECT * FROM tbl LIMIT 0, count;

LIMITข้อมักจะใช้กับORDER BYประโยค ก่อนอื่นคุณใช้ส่วนORDER BYคำสั่งเพื่อเรียงลำดับชุดผลลัพธ์ตามเกณฑ์ที่กำหนดจากนั้นคุณใช้LIMITส่วนคำสั่งเพื่อค้นหาค่าต่ำสุดหรือสูงสุด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.