วิธีการเลือก แถวที่ n ในตารางฐานข้อมูล SQL

เมื่อทำงานกับข้อมูลในฐานข้อมูล คุณอาจพบว่าจำเป็นต้องเลือกไอเท็มที่เฉพาะเจาะจง เช่น แถวที่ n ในตารางต่าง ๆ อย่างไรก็ตาม ฐานข้อมูลแต่ละแห่งมีกระบวนการที่แตกต่างกันเล็กน้อยในการทำเช่นนี้ และการเรียนรู้วิธีการทำข้ามหลายระบบ SQL จึงเป็นเครื่องมือที่มีประโยชน์มาก ในโพสต์บล็อกนี้ เราจะสำรวจวิธีการที่เป็นกลางต่อฐานข้อมูลรวมถึงวิธีการเฉพาะสำหรับฐานข้อมูล SQL ที่ได้รับความนิยม เช่น SQL Server, MySQL, PostgreSQL, SQLite และ Oracle

วิธีการที่เป็นกลางต่อฐานข้อมูล

ก่อนที่จะลงลึกไปยังรายละเอียดของแต่ละฐานข้อมูล มาลองเริ่มด้วยวิธีการที่สามารถพิจารณาว่าเป็นสากลมากขึ้น แม้ว่าสิ่งบางอย่างอาจไม่ได้รับการสนับสนุนในทุกแพลตฟอร์ม SQL แต่มีกลยุทธ์โดยรวมที่ทำให้การเลือก แถวที่ n ทำได้ง่ายกว่า

การใช้ LIMIT และ OFFSET (PostgreSQL & MySQL)

สำหรับฐานข้อมูลเช่น PostgreSQL และ MySQL คุณสามารถใช้ SQL syntax ต่อไปนี้:

SELECT ... LIMIT y OFFSET x
  • LIMIT ระบุจำนวนแถวที่คุณต้องการดึงข้อมูล
  • OFFSET ระบุจากจุดใดที่คุณต้องการเริ่มดึงข้อมูลแถว

ดังนั้น ตัวอย่างเช่น การเลือกแถวที่ 10 คุณจะทำ:

SELECT * FROM tablename LIMIT 1 OFFSET 9;

SQL syntax นี้มีประโยชน์สำหรับการแบ่งหน้า (pagination) ข้อมูลหรือตามกรณีของเรา ดึงข้อมูลแถวเฉพาะ

วิธีการเฉพาะสำหรับฐานข้อมูล

SQL Server

สำหรับ SQL Server โดยเฉพาะเวอร์ชันก่อนหน้า SQL Server 2012 คุณสามารถใช้ฟังก์ชัน window เพื่อให้ได้ผลลัพธ์ที่คล้ายกัน นี่คือตัวอย่างการใช้:

WITH Ordered AS (
    SELECT ROW_NUMBER() OVER (ORDER BY OrderID) AS RowNumber, OrderID, OrderDate
    FROM Orders
)
SELECT *
FROM Ordered
WHERE RowNumber = 1000000;
  • ROW_NUMBER() ผลิตหมายเลขเรียงลำดับสำหรับแถวในผลลัพธ์ตามลำดับที่กำหนด
  • ปรับ WHERE RowNumber = 1000000 เพื่อลงรายละเอียดว่าแถวไหนจะถูกดึงออกมา

PostgreSQL และ SQLite (เวอร์ชัน 3.25.0 ขึ้นไป)

ตั้งแต่ PostgreSQL 8.4 ฟังก์ชัน window มาตรฐานได้รับการสนับสนุน ซึ่งอนุญาตให้คุณใช้แนวทางที่คล้ายกันกับ SQL Server:

SELECT * FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY key ASC) AS rownumber, columns
    FROM tablename
) AS foo
WHERE rownumber <= n;
  • แทนที่ n ด้วยหมายเลขแถวที่ต้องการ โครงสร้างนี้ยังทำงานได้อย่างมีประสิทธิภาพใน SQLite ตั้งแต่เวอร์ชัน 3.25.0 ขึ้นไป

Oracle และ DB2

สำหรับ Oracle และ DB2 ก็สนับสนุนฟังก์ชันการจัดเรียงเช่นเดียวกัน ซyntax จะคล้ายกับ PostgreSQL:

SELECT * FROM (
    SELECT ROW_NUMBER() OVER (ORDER BY key ASC) AS rownumber, columns
    FROM tablename
) AS foo
WHERE rownumber <= n;

การใช้ ROW_NUMBER() จะช่วยให้คุณสามารถเข้าถึงแถวเฉพาะตามลำดับที่คุณกำหนดได้

สรุป

การเลือก แถวที่ n จากฐานข้อมูล SQL เป็นงานที่พบเห็นได้บ่อย ซึ่งอาจมีวิธีการที่แตกต่างกันไปขึ้นอยู่กับฐานข้อมูลที่ใช้ การเข้าใจถึง syntax และวิธีการที่แตกต่างกันจะช่วยให้คุณทำงานได้อย่างมีประสิทธิภาพมากขึ้นในระบบที่แตกต่างกัน ไม่ว่าคุณจะเรียกข้อมูลใน SQL Server, MySQL, PostgreSQL, SQLite หรือ Oracle ตอนนี้คุณมีเครื่องมือที่จำเป็นในการดึงข้อมูลแถวที่ต้องการ

สำหรับการอ่านเพิ่มเติม คุณสามารถตรวจสอบรายละเอียดเพิ่มเติมเกี่ยวกับเทคนิคการสอบถาม SQL ได้ที่ เว็บไซต์ของ Troels Arvin ขอให้สอบถามอย่างสนุกสนาน!