Kodokon kodokon.com

การเรียงลำดับและการกำจัดค่าซ้ำ: ORDER BY, LIMIT, DISTINCT

ฝึกฝนการเรียงลำดับผลลัพธ์ด้วย ORDER BY การจำกัดจำนวนแถวด้วย LIMIT และการกำจัดค่าซ้ำด้วย DISTINCT

6 นาที · 3 คำถาม

เปิดบทเรียนนี้ใน Kodokon

โดยค่าเริ่มต้น ลำดับของแถวที่ SELECT คืนกลับมานั้น ไม่มีการรับประกัน ฐานข้อมูลจะคืนแถวเหล่านั้นตามที่มันเห็นว่าสะดวก หากต้องการกำหนดลำดับ ให้เพิ่ม ORDER BY ตามด้วยคอลัมน์ การเรียงลำดับจะเป็นจากน้อยไปมากโดยค่าเริ่มต้น (คุณสามารถระบุให้ชัดเจนด้วย ASC) และเพิ่ม DESC เพื่อเรียงจากมากไปน้อย

SQL
SELECT title, price FROM books ORDER BY price;

SELECT title, price FROM books ORDER BY price DESC;
จากถูกที่สุดไปแพงที่สุด จากนั้นกลับด้าน

คุณสามารถเรียงลำดับตามหลายคอลัมน์ได้ ORDER BY genre, price DESC จะเรียงตาม genre ก่อน จากนั้นภายใน genre เดียวกันก็เรียงจากแพงที่สุดไปถูกที่สุด ประโยค LIMIT เก็บเฉพาะ N แถวแรกของผลลัพธ์ เมื่อใช้ร่วมกับ ORDER BY มันจะให้ "อันดับ N อันดับแรก" แก่คุณ ส่วน LIMIT 3 OFFSET 2 จะข้าม 2 แถวแรกไปเพิ่มเติมด้วย

SQL
SELECT title, price FROM books
ORDER BY price DESC
LIMIT 3;
หนังสือที่แพงที่สุด 3 อันดับแรก

เครื่องมือสุดท้าย DISTINCT ที่วางไว้ต่อจาก SELECT ทันที จะกำจัด ค่าซ้ำ (duplicates) ออกจากผลลัพธ์ ตารางของเรามีหนังสือ 7 เล่ม แต่มี genre ต่างกันเพียง 3 ชนิด หากไม่มี DISTINCT คิวรีข้างล่างนี้จะแสดง 7 แถวโดยมีค่าซ้ำกัน

SQL
SELECT DISTINCT genre FROM books;

SELECT DISTINCT author FROM books;
genre ที่ไม่ซ้ำกัน 3 ค่า จากนั้นผู้แต่งที่ไม่ซ้ำกัน 6 ค่า

ทดสอบความรู้

ตรวจสอบว่าคุณจำประเด็นสำคัญของบทเรียนนี้ได้ครบถ้วน

  1. คุณจะเรียงลำดับหนังสือจากแพงที่สุดไปถูกที่สุดได้อย่างไร?
    • ORDER BY price
    • ORDER BY price DESC
    • SORT BY price DESC
  2. SELECT DISTINCT genre FROM books; คืนอะไรจากตารางของเรา?
    • genre ทั้ง 7 ค่า หนึ่งค่าต่อหนังสือหนึ่งเล่ม
    • แต่ละ genre เพียงครั้งเดียว จึงได้ 3 แถว
    • genre ที่พบบ่อยที่สุด
  3. LIMIT 5 คืนอะไรเมื่อใช้โดยไม่มี ORDER BY?
    • 5 แถวล่าสุด
    • 5 แถวในลำดับที่ไม่มีการรับประกัน
    • ข้อผิดพลาดทางไวยากรณ์