บันทึก:
บทความทั้งหมดในหมวดหมู่บทช่วยสอน 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 บันทึกที่มีค่าฟิลด์แรกเหมือนกันจะถูกจัดเรียงตามฟิลด์ที่สองที่ระบุและอื่น ๆ