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

ดูอย่างใกล้ชิดที่ตาราง - แถวจะเรียงตามชื่อยี่ห้อ (เรียงตามตัวอักษร) และแถวที่มีชื่อยี่ห้อเดียวกันจะเรียงตามหมายเลขผลิตภัณฑ์โดยเรียงลำดับจากมากไปน้อย (คอลัมน์สุดท้าย)