4.1 ขีดจำกัด
หากคุณคาดว่าแบบสอบถาม SQL ของคุณจะส่งคืนข้อมูลมากเกินไป คุณสามารถจำกัดจำนวนสูงสุดไว้ล่วงหน้าได้ ท้ายที่สุดแล้ว ตารางสามารถมีแถวได้หลายพันหรือหลายล้านแถว
SQL ทำให้การจำกัดจำนวนแถวในผลลัพธ์ของแบบสอบถามเป็นเรื่องง่ายมากโดยใช้LIMIT
. คำหลักนี้ใช้ที่ส่วนท้ายสุดของแบบสอบถาม SQL และมีลักษณะดังนี้:
LIMIT quantity
ลองเขียนแบบสอบถามเทียบกับตารางสินค้า ซึ่งมีรายการสินค้าของร้านเรา แต่เนื่องจากเรามีร้านค้าที่ประสบความสำเร็จอย่างมากและเราขายสินค้าจำนวนมาก เราจึงอยากได้คำตอบเพียง 10 บรรทัดแรกเท่านั้น นี่คือลักษณะของคำขอนั้น:
SELECT * FROM product
LIMIT 10
และเราได้ผลลัพธ์ของแบบสอบถามดังต่อไปนี้:
รหัส | ชื่อ | ยี่ห้อ | ราคา | นับ |
---|---|---|---|---|
1 | โต๊ะ | อิเกีย | 20.00 น | 15 |
2 | เก้าอี้ | อิเกีย | 5.00 น | 45 |
3 | โซฟา | อิเกีย | 80.00 น | 10 |
4 | เตียง | อิเกีย | 75.00 น | 10 |
5 | ตู้เสื้อผ้า | บ๊อช | 125.00 น | 15 |
6 | ชั้นวาง | ชั้นวาง | 25.00 น | 114 |
7 | โทรทัศน์ | แอลจี | 350.00 | 4 |
8 | โคมไฟ | แอลจี | 15.00 น | 100 |
9 | โต๊ะเครื่องแป้ง | อิเกีย | 99.00 น | 10 |
10 | จาน | บ๊อช | 199.00 น | 10 |
ตอนนี้เราจะขอเฉพาะ 5 แถวแรก นี่คือลักษณะของคำขอนั้น:
SELECT * FROM product
LIMIT 5
เราได้รับผลการสืบค้นดังต่อไปนี้:
รหัส | ชื่อ | ยี่ห้อ | ราคา | นับ |
---|---|---|---|---|
1 | โต๊ะ | อิเกีย | 20.00 น | 15 |
2 | เก้าอี้ | อิเกีย | 5.00 น | 45 |
3 | โซฟา | อิเกีย | 80.00 น | 10 |
4 | เตียง | อิเกีย | 75.00 น | 10 |
5 | ตู้เสื้อผ้า | บ๊อช | 125.00 น | 15 |
4.2 ออฟเซ็ต
ครั้งที่แล้ว เราได้เรียนรู้วิธีจำกัดจำนวนบรรทัดในการตอบกลับของเซิร์ฟเวอร์ และตอนนี้ แทนที่จะเป็นหลายพันแถวจากตารางผลิตภัณฑ์ เราสามารถรับ 10 แถวแรกและแสดงให้ผู้ใช้เห็น มันสมบูรณ์แบบ แต่เราจะแสดง 10 แถวที่สองได้อย่างไร และที่สาม?
ถ้าเราเขียนLIMIT 20
หรือLIMIT 30
เซิร์ฟเวอร์จะไม่ส่งคืน 20 และ 30 แถวตามลำดับใช่หรือไม่
สำหรับกรณีนี้ SQL มีคีย์เวิร์ดพิเศษOFFSET
ซึ่งคุณสามารถขอให้เซิร์ฟเวอร์ข้าม N บรรทัดในการตอบสนองได้ คำหลักนี้ใช้ที่ส่วนท้ายสุดของแบบสอบถาม SQL (หลังLIMIT
) และมีลักษณะดังนี้:
OFFSET quantity
ลองเขียนแบบสอบถามในตารางผลิตภัณฑ์และพยายามรับระเบียน 11 ถึง 15 กล่าวอีกนัยหนึ่ง เรากำลังขอให้เซิร์ฟเวอร์ส่งคืน 5 แถวให้เรา แต่ข้าม 10 แถวแรกของการตอบกลับไปก่อน นี่คือลักษณะของคำขอนั้น:
SELECT * FROM product
LIMIT 5
OFFSET 10
เราได้รับผลการสืบค้นดังต่อไปนี้:
รหัส | ชื่อ | ยี่ห้อ | ราคา | นับ |
---|---|---|---|---|
สิบเอ็ด | เก้าอี้นวม | บ๊อช | 44.00 น | 8 |
12 | กระถางดอกไม้ | สมาร์ทฟลาวเวอร์ | 99.00 น | 9 |
13 | ยืน | อิเกีย | 100.00 น | 10 |
เซิร์ฟเวอร์ส่งคืนเพียง 3 แถว ซึ่งหมายความว่ามีทั้งหมด 13 แถวในตารางของเรา เซิร์ฟเวอร์ข้าม 10 รายการแรกและส่งคืน 5 รายการถัดไป
4.3 เลือกความแตกต่าง
คำหลักที่มีประโยชน์อีกคำหนึ่งDISTINCT
คือ ใช้เมื่อมีระเบียนที่ซ้ำกันในตารางและเราต้องการลบข้อมูลที่ซ้ำกัน
รายการที่ซ้ำกันมาจากไหนในตารางของเรา อาจไม่มีรายการที่ซ้ำกันในตาราง แต่เนื่องจากแบบสอบถามจึงเป็นเรื่องง่าย ลองเขียนแบบสอบถามที่จะส่งคืนแบรนด์ของผลิตภัณฑ์ทั้งหมดที่เราขาย นี่คือลักษณะของคำขอนั้น:
SELECT brand FROM product
เราได้รับผลการสืบค้นดังต่อไปนี้:
ยี่ห้อ |
---|
อิเกีย |
อิเกีย |
อิเกีย |
อิเกีย |
บ๊อช |
บ๊อช |
แอลจี |
แอลจี |
อิเกีย |
บ๊อช |
บ๊อช |
สมาร์ทฟลาวเวอร์ |
อิเกีย |
ง่ายต่อการดูว่ามีแถวที่ซ้ำกันในตารางนี้ เพื่อให้แน่ใจว่าไม่มีรายการที่ซ้ำกัน และคุณจำเป็นต้องใช้คำDISTINCT
สำคัญ คำขอแก้ไขจะมีลักษณะดังนี้:
SELECT DISTINCT brand
FROM product
เราได้รับผลการสืบค้นดังต่อไปนี้:
ยี่ห้อ |
---|
อิเกีย |
บ๊อช |
แอลจี |
สมาร์ทฟลาวเวอร์ |
ดีขึ้นมาก มันไม่ได้เป็น? ;)
4.4 สั่งซื้อโดย
และในที่สุดเราก็ต้องเรียงลำดับ ในการจัดเรียงผลลัพธ์ของข้อความค้นหา คุณต้องใช้คำORDER BY
สำคัญ ในทางเทคนิคแล้วคำเหล่านี้เป็นคำสองคำ แต่สาระสำคัญไม่สำคัญ สองคำ หนึ่งโอเปอเรเตอร์
จะต้องเขียนหลังคำสำคัญแต่WHERE
ก่อนLIMIT
และ OFFSET
หากคุณเขียนORDER BY
หลังจากLIMIT
เซิร์ฟเวอร์ SQL จะส่งคืนข้อผิดพลาดให้คุณ
โดยทั่วไป ตัวดำเนินการนี้จะมีลักษณะดังนี้:
ORDER BY column order
โดยที่คอลัมน์คือชื่อของคอลัมน์ในตาราง / ผลการเรียงลำดับ และลำดับคือลำดับการจัดเรียง
ลำดับการจัดเรียงสามารถมีได้สามประเภท:
ASC
(จากน้อยไปมาก) - จากน้อยไปมาก;DESC
(จากมากไปน้อย) - จากมากไปน้อย;- ไม่ระบุ - จะใช้
ASC
ลองเขียนแบบสอบถามที่จะส่งคืนรายการสินค้าที่เรียงตามราคาจากน้อยไปหามาก นี่คือลักษณะของคำขอนั้น:
SELECT * FROM product
ORDER BY price ASC
LIMIT 10
เราได้รับผลการสืบค้นดังต่อไปนี้:
รหัส | ชื่อ | ยี่ห้อ | ราคา | นับ |
---|---|---|---|---|
2 | เก้าอี้ | อิเกีย | 5.00 น | 45 |
8 | โคมไฟ | แอลจี | 15.00 น | 100 |
1 | โต๊ะ | อิเกีย | 20.00 น | 15 |
6 | ชั้นวาง | บ๊อช | 25.00 น | 114 |
สิบเอ็ด | เก้าอี้นวม | บ๊อช | 44.00 น | 8 |
4 | เตียง | อิเกีย | 75.00 น | 10 |
3 | โซฟา | อิเกีย | 80.00 น | 10 |
12 | กระถางดอกไม้ | สมาร์ทฟลาวเวอร์ | 99.00 น | 9 |
9 | โต๊ะเครื่องแป้ง | อิเกีย | 99.00 น | 10 |
13 | ยืน | อิเกีย | 100.00 น | 10 |
เราจะได้ผลลัพธ์เดียวกันหากไม่ระบุลำดับการจัดเรียง - เราจะข้ามคำASC
.
4.5 ORDER BY ในหลายคอลัมน์
ตัวดำเนินการORDER BY
ช่วยให้คุณจัดเรียงผลลัพธ์ตามหลายคอลัมน์ สิ่งนี้มีประโยชน์มากเมื่อคอลัมน์แรกมีองค์ประกอบที่ซ้ำกันจำนวนมาก รูปแบบทั่วไปของตัวดำเนินการนี้เป็นดังนี้:
ORDER BY column 1 order 1, column 2 order 2, column 3 order 3
กล่าวอีกนัยหนึ่ง หากหลังจากจัดเรียงตามคอลัมน์แรกแล้ว คุณมีค่าที่เหมือนกันหลายค่าในบริเวณใกล้เคียง ค่าเหล่านั้นจะถูกจัดเรียงตามคอลัมน์ที่สอง เป็นต้น
ลองเขียนแบบสอบถามที่จะจัดเรียงผลิตภัณฑ์ของเราตามแบรนด์และสำหรับผลิตภัณฑ์ที่มีแบรนด์เดียวกัน - ตามลำดับจากมากไปหาน้อย นี่คือลักษณะของคำขอนั้น:
SELECT * FROM product
ORDER BY brand ASC, count
DESC
เราได้รับผลการสืบค้นดังต่อไปนี้:
รหัส | ชื่อ | ยี่ห้อ | ราคา | นับ |
---|---|---|---|---|
6 | ชั้นวาง | บ๊อช | 25.00 น | 114 |
5 | ตู้เสื้อผ้า | บ๊อช | 125.00 น | 15 |
10 | จาน | บ๊อช | 199.00 น | 10 |
สิบเอ็ด | เก้าอี้นวม | บ๊อช | 44.00 น | 8 |
2 | เก้าอี้ | อิเกีย | 5.00 น | 45 |
1 | โต๊ะ | อิเกีย | 20.00 น | 15 |
9 | โต๊ะเครื่องแป้ง | อิเกีย | 99.00 น | 10 |
13 | ยืน | อิเกีย | 100.00 น | 10 |
4 | เตียง | อิเกีย | 75.00 น | 10 |
3 | โซฟา | อิเกีย | 80.00 น | 10 |
8 | โคมไฟ | แอลจี | 15.00 น | 100 |
7 | โทรทัศน์ | แอลจี | 350.00 | 4 |
12 | กระถางดอกไม้ | สมาร์ทฟลาวเวอร์ | 99.00 น | 9 |
ดูอย่างใกล้ชิดที่ตาราง - แถวจะเรียงตามชื่อยี่ห้อ (เรียงตามตัวอักษร) และแถวที่มีชื่อยี่ห้อเดียวกันจะเรียงตามหมายเลขผลิตภัณฑ์โดยเรียงลำดับจากมากไปน้อย (คอลัมน์สุดท้าย)
GO TO FULL VERSION