ลำดับจากมากไปน้อยของ SQL การทำงานกับฐานข้อมูล การเรียงลำดับข้อมูลอันเป็นผลจากการสืบค้น SQL มีการเรียงลำดับอะไรในฐานข้อมูล

บันทึก:
บทความทั้งหมดในหมวดหมู่บทช่วยสอน SQL ปัจจุบันใช้ตัวอย่างและปัญหาตามฐานข้อมูลการฝึกอบรม

ตามรูปแบบปกติแรกของฐานข้อมูลเชิงสัมพันธ์ ลำดับของแถวในตารางไม่ควรมีความสำคัญ แต่ในทางปฏิบัติมักจำเป็นต้องจัดเรียงข้อมูลก่อนที่จะแสดงบนหน้าจอ

ส่วนคำสั่ง ORDER BY มีหน้าที่รับผิดชอบในการเรียงลำดับแถวที่โหลดในการสืบค้น SQL อยู่ที่ส่วนท้ายสุดของคำขอ:

เลือก<Перечень столбцов>จาก<Перечень таблиц>สั่งซื้อโดย<Условие сортировки>

เงื่อนไขการเรียงลำดับจะระบุคอลัมน์ที่จะเรียงลำดับแถวของตารางที่เป็นผลลัพธ์:

เรียงตาม col1, col2

เรียงลำดับใน SQL

มี 2 ​​ตัวเลือกการเรียงลำดับ: จากน้อยไปหามากและจากมากไปน้อย หากต้องการระบุประเภทการเรียงลำดับในแบบสอบถาม หลังชื่อคอลัมน์ ให้ระบุคีย์เวิร์ด ASC (จากน้อยไปหามาก) หรือ DESC (จากมากไปหาน้อย) ซึ่งกำหนดลำดับจากน้อยไปหามากหรือจากมากไปหาน้อยตามลำดับ ประเภทเริ่มต้นคือ ASC:

ORDER BY col1 -- ส่วนคำสั่งถัดไปจะเทียบเท่ากับ ORDER BY col1 ACS

นอกจากนี้ยังสามารถระบุลำดับที่แตกต่างกันสำหรับคอลัมน์ต่างๆ ได้:

เรียงลำดับตาม col1 DESC, col2 ASC

หากต้องการรวมเนื้อหาให้แก้ไขปัญหาในฐานข้อมูลทางการศึกษา:

คุณต้องได้รับรายการรหัสพนักงาน เรียงตามกลุ่มจากน้อยไปหามากและวันที่จ้าง "จากใหม่ที่สุดไปเก่าที่สุด"

เลือก id, กลุ่ม, Hire_date จากพนักงาน ORDER BY Group, Hire_date DESC

เรามาเสริมไวยากรณ์ของคำสั่ง SELECT ด้วยคำสั่งย่อย ORDER BY (แถบแนวตั้งหมายความว่าต้องเลือกหนึ่งในตัวเลือก):

เลือก [TableName.]ColumnName[, [TableName.]ColumnName2 ...] จาก [[DatabaseName.]SchemaName.]TableName ColumnName [, [TableName.]ColumnName2 ...]]

  • ไปข้างหน้า >

หากสื่อจาก office-menu.ru ช่วยคุณได้ โปรดสนับสนุนโครงการนี้เพื่อที่ฉันจะได้พัฒนาต่อไป

เมื่อดึงข้อมูล สิ่งสำคัญคือต้องทำให้ข้อมูลอยู่ในรูปแบบที่เป็นระเบียบเรียบร้อย การเรียงลำดับสามารถทำได้ตามฟิลด์ที่มีประเภทข้อมูลใดก็ได้ นี่อาจเป็นการเรียงลำดับจากน้อยไปหามากหรือจากมากไปน้อยสำหรับฟิลด์ตัวเลข สำหรับช่องอักขระ (ข้อความ) สามารถจัดเรียงตามลำดับตัวอักษรได้ แม้ว่าโดยพื้นฐานแล้วยังเรียงลำดับจากน้อยไปหามากหรือจากมากไปหาน้อยด้วย นอกจากนี้ยังสามารถทำได้ในทิศทางใดก็ได้ - จาก A ถึง Z และในทางกลับกันจาก Z ถึง A

สาระสำคัญของกระบวนการเรียงลำดับคือการลดลำดับลงในลำดับที่แน่นอน คุณสามารถเรียนรู้เพิ่มเติมเกี่ยวกับการเรียงลำดับได้ในบทความ “การเรียงลำดับอัลกอริทึม” ตัวอย่างเช่น การเรียงลำดับตัวเลขตามใจชอบจากน้อยไปหามาก:

2, 4, 1, 5, 9

ควรให้ผลลัพธ์เป็นลำดับ:

1, 2, 4, 5, 6

ในทำนองเดียวกัน เมื่อเรียงลำดับค่าสตริงจากน้อยไปหามาก:

อิวานอฟ อีวาน, เปตรอฟ เปตร์, อิวานอฟ อันเดรย์

ผลลัพธ์ควรเป็น:

อิวานอฟ อันเดรย์, อิวานอฟ อีวาน, เปตรอฟ เปตรอฟ

ที่นี่บรรทัด "Andrey Ivanov" ได้ย้ายไปที่จุดเริ่มต้นเนื่องจากการเปรียบเทียบสตริงจะดำเนินการทีละอักขระ ทั้งสองบรรทัดขึ้นต้นด้วยอักขระเดียวกัน "Ivanov" เนื่องจากสัญลักษณ์ “A” ในคำว่า “Andrey” มาก่อนตัวอักษรมากกว่าสัญลักษณ์ “I” ในคำว่า “Ivan” บรรทัดนี้จึงจะถูกวางไว้ก่อนหน้า

การเรียงลำดับในแบบสอบถาม SQL

ในการเรียงลำดับ คุณต้องเพิ่มคำสั่ง ORDER BY ลงในสตริงการสืบค้น หลังจากคำสั่งนี้ ฟิลด์ที่ใช้ในการเรียงลำดับจะถูกระบุ

ตัวอย่างเช่น เราใช้สินค้าตารางสินค้า:

จำนวน
(หมายเลขผลิตภัณฑ์)
ชื่อ
(ชื่อ)
ราคา
(ราคา)
1 จีนกลาง50
2 แตงโม120
3 สัปปะรด80
4 กล้วย40

ข้อมูลที่นี่เรียงลำดับตามคอลัมน์ "num" แล้ว ตอนนี้ เรามาสร้างแบบสอบถามที่จะแสดงตารางพร้อมกับผลิตภัณฑ์ที่เรียงลำดับตามตัวอักษร:

เลือก * จากสินค้า ORDER BY ชื่อ

SELECT * FROM สินค้า – ระบุเพื่อเลือกฟิลด์ทั้งหมดจากตารางสินค้า

ORDER BY – คำสั่งการเรียงลำดับ;

title – คอลัมน์ที่จะดำเนินการเรียงลำดับ

ผลการดำเนินการตามคำขอดังกล่าวมีดังนี้:

จำนวน ชื่อ ราคา
3 สัปปะรด80
2 แตงโม120
4 กล้วย40
1 จีนกลาง50

คุณยังสามารถเรียงลำดับเขตข้อมูลตารางใดก็ได้

ทิศทางการเรียงลำดับ

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

เลือก * จากสินค้า ORDER BY ราคา DESC

เรียงตามราคาจากน้อยไปหามากจะเป็น:

เลือก * จากสินค้า เรียงตามราคา ASC

จัดเรียงตามหลายช่อง

SQL อนุญาตให้เรียงลำดับตามหลายฟิลด์พร้อมกัน เมื่อต้องการทำเช่นนี้ หลังจากคำสั่ง ORDER BY ฟิลด์ที่จำเป็นจะถูกระบุโดยคั่นด้วยเครื่องหมายจุลภาค ลำดับของผลลัพธ์แบบสอบถามจะถูกกำหนดค่าตามลำดับเดียวกันกับที่ระบุฟิลด์การเรียงลำดับ

คอลัมน์1 คอลัมน์2 คอลัมน์3
3 1
1 3
2 2
2 1
1 2
1 3
3 4

มาจัดเรียงตารางตามกฎต่อไปนี้:

เลือก * จากตารางของฉัน เรียงตาม คอลัมน์ 1 ASC, คอลัมน์ 2 DESC, คอลัมน์ 3 ASC

เหล่านั้น. คอลัมน์แรกกำลังขึ้น คอลัมน์ที่สองกำลังลดลง คอลัมน์ที่สามกำลังขึ้นอีกครั้ง แบบสอบถามจะเรียงลำดับแถวตามคอลัมน์แรก จากนั้นเรียงลำดับตามคอลัมน์ที่สองโดยไม่ละเมิดกฎข้อแรก จากนั้นโดยไม่ละเมิดกฎที่มีอยู่ตามข้อที่สาม ผลลัพธ์จะเป็นชุดข้อมูลดังนี้:

คอลัมน์1 คอลัมน์2 คอลัมน์3
1 3
1 3
1 2
2 2
2 1
3 1
3 1

ลำดับของคำสั่ง ORDER BY ในการสืบค้น

การเรียงลำดับแถวมักดำเนินการร่วมกับเงื่อนไขในการเลือกข้อมูล คำสั่ง ORDER BY จะอยู่หลังเงื่อนไขการเลือก WHERE ตัวอย่างเช่น เราเลือกผลิตภัณฑ์ที่มีราคาน้อยกว่า 100 รูเบิล เรียงตามชื่อตามลำดับตัวอักษร:

เลือก * จากสินค้าที่ราคา 100เรียงตามราคา ASC

บ่อยครั้งมีความจำเป็นต้องแสดงผลลัพธ์ของคิวรีตามลำดับที่กำหนด เช่น ตามลำดับตัวอักษร เพื่อจุดประสงค์นี้ DBMS มีฟังก์ชันพิเศษในภาษา SQL - การเรียงลำดับ ในกรณีนี้ โปรแกรมเมอร์สามารถเลือกได้ว่าฟิลด์ใดและลำดับใดที่จะเกิดขึ้นเพื่อให้ได้ผลลัพธ์ที่ต้องการ โดยไม่ต้องใช้ทักษะการเขียนโปรแกรมอย่างจริงจัง

การเรียงลำดับในฐานข้อมูลคืออะไร?

การทำงานกับฐานข้อมูลนั้นสัมพันธ์กับข้อมูลจำนวนมากที่ต้องมีการจัดระเบียบอย่างต่อเนื่อง ปัจจุบันมี DBMS จำนวนหนึ่งที่มีฟังก์ชันหลากหลาย โดยที่ได้รับความนิยมมากที่สุดคือ Oracle และ MS SQL การเรียงลำดับข้อมูลซึ่งเป็นหนึ่งในขั้นตอนหลักในการทำงานกับฐานข้อมูลนั้นจัดทำโดยฟังก์ชันพิเศษในตัวในแต่ละส่วน

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

คำสั่งเรียงลำดับ

การเรียงลำดับ SQL ในฐานข้อมูลมีให้โดยใช้ฟังก์ชัน ORDER BY ดังนั้น เมื่อส่งออกข้อมูลจากฐานข้อมูล หลังจากระบุคอลัมน์และตารางที่จะใช้อ่านแล้ว คุณต้องระบุคำสั่งการเรียงลำดับในแบบสอบถาม จากนั้นกำหนดเขตข้อมูลที่จะใช้ในการเรียงลำดับ

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

จะกำหนดลำดับการจัดเรียงได้อย่างไร?

สภาพสมัยใหม่ทำให้เกิดงานต่าง ๆ สำหรับโปรแกรมเมอร์และบางครั้งก็จำเป็นต้องกำหนดล่วงหน้าว่าจะแสดงผลลัพธ์ในลำดับใด - จากมากไปน้อยหรือจากน้อยไปมากตามลำดับตัวอักษรหรือในลำดับย้อนกลับ? และในการดำเนินการนี้ใน SQL ลำดับการจัดเรียงจะถูกกำหนดโดยการเพิ่มคำสำคัญลงในแบบสอบถาม หลังจากเลือกฟิลด์และตารางที่จะรับข้อมูลที่ต้องการแล้ว คุณต้องเพิ่ม ORDER BY จากนั้นระบุชื่อของคอลัมน์ที่คุณต้องการเรียงลำดับ

หากต้องการรับลำดับย้อนกลับ คุณต้องระบุพารามิเตอร์ DESC หลังชื่อ หากจำเป็นต้องเรียงลำดับองค์ประกอบตามเกณฑ์ตั้งแต่สองเกณฑ์ขึ้นไป คอลัมน์ต่างๆ จะถูกระบุโดยคั่นด้วยเครื่องหมายจุลภาค และฟิลด์ที่มาก่อนในรายการจะให้ความสำคัญในการจัดอันดับ เป็นที่น่าสังเกตว่าพารามิเตอร์ DESC มีเพียงฟิลด์เดียวสำหรับการจัดเรียงองค์ประกอบในลำดับย้อนกลับ หลังจากระบุชื่อคีย์เวิร์ดนี้ ดังนั้นหากจำเป็น จะต้องระบุในคอลัมน์ที่เลือกทั้งหมด

วิธีการเรียงลำดับแบบอื่น

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

การเขียนอัลกอริทึมด้วยตัวคุณเองจะไม่เพิ่มความเร็วในการเรียงลำดับอย่างมีนัยสำคัญ แต่จะมีส่วนช่วยในการพัฒนาทักษะการเขียนโปรแกรมและยังช่วยให้คุณสามารถปรับเปลี่ยนกระบวนการโดยการปรับรูปแบบการจัดอันดับเป็นฐานข้อมูลเฉพาะเพื่อปรับปรุงประสิทธิภาพของโปรแกรม


รอบถัดไป:

ขั้นตอนที่ 8: การเรียงลำดับอย่างง่าย

หากผลลัพธ์ของการสืบค้น SQL ของคุณกลายเป็นแหล่งข้อมูลสำหรับรายงาน ปัญหาของการจัดเรียงข้อมูลในนั้นจึงมีความสำคัญอย่างยิ่ง เนื่องจากเป็นเรื่องยากมากสำหรับผู้ที่อ่านรายงานที่ไม่ได้รับการจัดเรียงอย่างเหมาะสมเพื่อค้นหาได้อย่างรวดเร็ว ข้อมูลที่พวกเขาต้องการ ในการจัดเรียงข้อมูลตามคอลัมน์ผลลัพธ์แบบสอบถาม (ในกรณีของเรา ตามเขตข้อมูลตาราง) SQL จะใช้คำสำคัญ ORDER BY ตัวอย่างของการเรียงลำดับที่ง่ายที่สุดมีดังต่อไปนี้ พื้นฐานนำมาจากคำขอจากขั้นตอนที่ 2: “คำขอที่มีเกณฑ์การคัดเลือกอย่างง่าย” เราจัดเรียงพนักงานตามฟิลด์ S_NAME (ชื่อเต็ม)

เลือก S_NAME, S_EXPERIENCE จาก D_STAFF โดยที่ S_EXPERIENCE

การเรียงลำดับผลลัพธ์ของการสืบค้น SQL ตามฟิลด์เดียว

ขั้นตอนที่ 9 การเรียงลำดับที่ซับซ้อน

บ่อยครั้งและเกือบตลอดเวลาจำเป็นต้องจัดเรียงข้อมูลตามคอลัมน์มากกว่าหนึ่งคอลัมน์ และไม่เรียงลำดับจากน้อยไปหามากเสมอไป ไวยากรณ์ SQL ต้องการรายการคอลัมน์ที่คั่นด้วยเครื่องหมายจุลภาคหลังคีย์เวิร์ด ORDER BY รวมถึงวิธีการเรียงลำดับสำหรับแต่ละคอลัมน์: ตามลำดับค่าจากน้อยไปมาก - ASC หรือจากมากไปน้อย - DESC ในตัวอย่างด้านล่าง เราแสดงบันทึกสำหรับพนักงานทุกคนตามลำดับระยะเวลาการทำงานจากมากไปหาน้อย เราจัดเรียงพนักงานที่มีอายุงานเท่ากันตามลำดับตัวอักษร

เลือก S_EXPERIENCE, S_NAME จาก D_STAFF เรียงลำดับตาม S_EXPERIENCE DESC, S_NAME ASC


การเรียงลำดับผลลัพธ์ของการสืบค้น SQL ตามสองฟิลด์

บ่อยครั้งที่มีการใช้ลำดับการจัดเรียงแบบย้อนกลับกับคอลัมน์ เช่น [date] ตัวอย่างเช่น หากวันที่จัดเก็บวันที่ที่ป้อนข้อมูล ดังนั้นเมื่อเรียงลำดับแบบย้อนกลับ ที่จุดเริ่มต้นของรายการคือบันทึกเหล่านั้นที่ถูกเพิ่มเมื่อเร็วๆ นี้โดยสัมพันธ์กับส่วนที่เหลือ หากข้อความค้นหาดึงประกาศข่าวจากฐานข้อมูล เราจะได้รับรายการประกาศที่เรียงลำดับตามความเกี่ยวข้องจากมากไปน้อย ซึ่งอาจมีประโยชน์อย่างยิ่ง เนื่องจากโดยปกติแล้วการประกาศจะอ่านจากบนลงล่าง และแม้แต่ในเว็บไซต์ข่าว ไม่ใช่ทั้งหมด มีการแสดงไว้ แต่มีเพียงไม่กี่รายการที่ "สด" ที่สุด

ส่วนคำสั่ง ORDER BY ใน Access จะเรียงลำดับระเบียนที่ส่งคืนโดยแบบสอบถามโดยเรียงลำดับจากน้อยไปหามากหรือจากมากไปน้อยของค่าของฟิลด์ที่ระบุ

ไวยากรณ์

เลือก field_list
จาก โต๊ะ
ที่ไหน การเลือก_เงื่อนไข
[, ฟิลด์2 ][, ...]]]

คำสั่ง SELECT ที่มีคำสั่งย่อย ORDER BY มีองค์ประกอบดังต่อไปนี้:

หมายเหตุ

ส่วนคำสั่ง ORDER BY เป็นทางเลือก ควรใช้เมื่อคุณต้องการแสดงข้อมูลในรูปแบบที่เรียงลำดับ

ลำดับการจัดเรียงเริ่มต้นคือจากน้อยไปหามาก (A ถึง Z, 0 ถึง 9) สองตัวอย่างด้านล่างแสดงการเรียงลำดับชื่อพนักงานตามนามสกุล

เลือกนามสกุล, ชื่อ
จากพนักงาน
เรียงตามนามสกุล;
เลือกนามสกุล, ชื่อ
จากพนักงาน
เรียงตามนามสกุล ASC;

หากต้องการเรียงลำดับจากมากไปน้อย (Z ถึง A, 9 ถึง 0) ให้เพิ่มคำสงวน DESC ที่ส่วนท้ายของแต่ละฟิลด์ที่คุณต้องการเรียงลำดับระเบียน ตัวอย่างด้านล่างจะเรียงลำดับชื่อพนักงานโดยเรียงตามเงินเดือนจากมากไปหาน้อย

เลือกนามสกุล, เงินเดือน
จากพนักงาน
เรียงตามเงินเดือน DESC, นามสกุล;

ถ้าคุณระบุเขตข้อมูลที่มีข้อมูล Memo หรือวัตถุ OLE ในส่วนคำสั่ง ORDER BY ข้อผิดพลาดจะเกิดขึ้น กลไกจัดการฐานข้อมูล Microsoft Access ไม่รองรับการเรียงลำดับตามฟิลด์ประเภทนี้

โดยปกติส่วนคำสั่ง ORDER BY จะเป็นองค์ประกอบสุดท้ายในคำสั่ง SQL

คุณสามารถรวมฟิลด์เพิ่มเติมในส่วนคำสั่ง ORDER BY ได้ อันดับแรกเรคคอร์ดจะถูกจัดเรียงตามฟิลด์ที่ระบุเป็นอันดับแรกในส่วนคำสั่ง ORDER BY บันทึกที่มีค่าฟิลด์แรกเหมือนกันจะถูกจัดเรียงตามฟิลด์ที่สองที่ระบุและอื่น ๆ