เมื่อคุณต้องการเรียกข้อมูลจากฐานข้อมูล คุณสามารถขอข้อมูลโดยใช้ Structured Query Language หรือ SQL SQL เป็นภาษาคอมพิวเตอร์ที่คล้ายกับภาษาอังกฤษมาก แต่โปรแกรมฐานข้อมูลเข้าใจได้ ทุกคิวรีที่คุณเรียกใช้จะใช้ SQL อยู่เบื้องหลัง
การทําความเข้าใจเกี่ยวกับวิธีการทํางานของ SQL ช่วยให้คุณสร้างคิวรีได้ดีขึ้น และทําให้คุณเข้าใจวิธีการแก้ไขคิวรีที่ไม่ส่งกลับผลลัพธ์ที่คุณต้องการได้ง่ายขึ้น
บทความนี้เป็นหนึ่งในชุดบทความเกี่ยวกับ Access SQL บทความนี้อธิบายการใช้งานพื้นฐานของ SQL เพื่อเลือกข้อมูล และใช้ตัวอย่างในการแสดงไวยากรณ์ของ SQL
ในบทความนี้
- SQL คืออะไร
- ส่วนคําสั่ง SQL พื้นฐาน: SELECT, FROM และ WHERE
- การเรียงลําดับผลลัพธ์: ORDER BY
- การทํางานกับข้อมูลสรุป: GROUP BY และ HAVING
- การรวมผลลัพธ์แบบสอบถาม: UNION
SQL คืออะไร
SQL เป็นภาษาคอมพิวเตอร์ที่ใช้ทํางานกับชุดข้อเท็จจริงและความสัมพันธ์ระหว่างกัน โปรแกรมฐานข้อมูลเชิงสัมพันธ์ เช่น Microsoft Office Access ใช้ SQL เพื่อทํางานกับข้อมูล SQL ไม่เหมือนกับภาษาคอมพิวเตอร์จํานวนมาก SQL นั้นอ่านและเข้าใจได้ไม่ยาก แม้แต่สําหรับมือใหม่ SQL คือมาตรฐานสากลที่ยอมรับโดยหน่วยงานมาตรฐาน เช่น ISO และ ANSI เช่นเดียวกับภาษาคอมพิวเตอร์มากมาย
คุณสามารถใช้ SQL ในการอธิบายชุดข้อมูลซึ่งช่วยให้คุณตอบคําถามต่างๆ ได้ เมื่อคุณใช้ SQL คุณต้องใช้ไวยากรณ์ให้ถูกต้อง ไวยากรณ์เป็นชุดของกฎที่รวมองค์ประกอบต่างๆ ของภาษาอย่างถูกต้อง ไวยากรณ์ SQL ใช้ไวยากรณ์ภาษาอังกฤษเป็นหลัก และใช้องค์ประกอบหลายอย่างเช่นเดียวกับไวยากรณ์ของ Visual Basic for Applications (VBA)
ตัวอย่างเช่น คําสั่ง SQL อย่างง่าย ซึ่งจะเรียกรายการนามสกุลของที่ติดต่อที่มีชื่อว่า Mary อาจมีลักษณะดังนี้
SELECT Last_Name
FROM Contacts
WHERE First_Name = 'Mary';
หมายเหตุ
SQL ไม่ได้ใช้ในการจัดการข้อมูลได้เพียงอย่างเดียวเท่านั้น แต่ยังใช้สร้างและเปลี่ยนแปลงการออกแบบของวัตถุฐานข้อมูล เช่น ตาราง ได้อีกด้วย ส่วนของ SQL ที่ใช้สําหรับการสร้างและเปลี่ยนแปลงวัตถุฐานข้อมูลมีชื่อเรียกว่า Data Definition Language (DDL) หัวข้อนี้ไม่ได้ครอบคลุมถึง DDL สําหรับข้อมูลเพิ่มเติม ให้ดูบทความ สร้างหรือปรับเปลี่ยนตารางหรือดัชนีโดยใช้คิวรีแบบสร้างข้อกําหนดข้อมูล
คําสั่ง SELECT
เมื่อต้องการอธิบายเกี่ยวกับชุดข้อมูลโดยใช้ SQL คุณจะใช้คําสั่ง SELECT คําสั่ง SELECT ประกอบด้วยคําอธิบายอย่างละเอียดเกี่ยวกับชุดข้อมูลที่คุณต้องการจากฐานข้อมูล ซึ่งรวมถึงสิ่งต่อไปนี้:
- ตารางที่มีข้อมูลดังกล่าว
- ข้อมูลจากแหล่งข้อมูลต่างๆ เกี่ยวข้องกันอย่างไร
- เขตข้อมูลหรือการคํานวณใดที่จะให้ข้อมูล
- เกณฑ์ที่ข้อมูลต้องตรงกันจึงจะรวมเข้าได้
- ว่าจะเรียงลําดับผลลัพธ์หรือไม่และอย่างไร
ส่วนคําสั่ง SQL
คําสั่ง SQL มีส่วนคําสั่งต่างๆ เหมือนกับประโยค แต่ละส่วนคําสั่งจะทําหนึ่งหน้าที่สําหรับคําสั่ง SQL ส่วนคําสั่งบางอย่างเป็นส่วนที่จําเป็นในคําสั่ง SELECT ตารางต่อไปนี้แสดงส่วนคําสั่ง SQL ที่ใช้บ่อย
| ส่วนคำสั่ง SQL | หน้าที่ | จําเป็น |
|---|---|---|
| SELECT | แสดงเขตข้อมูลที่มีข้อมูลที่สนใจ | ใช่ |
| FROM | แสดงตารางที่มีเขตข้อมูลที่ปรากฏอยู่ในส่วนคำสั่ง SELECT | ใช่ |
| WHERE | ระบุเกณฑ์เขตข้อมูลที่ใช้เลือกระเบียนที่จะรวมอยู่ในผลลัพธ์ | ไม่ใช่ |
| ORDER BY | ระบุวิธีเรียงลำดับผลลัพธ์ | ไม่ใช่ |
| GROUP BY | ในคำสั่ง SQL ที่มีฟังก์ชันการรวม จะแสดงเขตข้อมูลที่ไม่ถูกสรุปรวมอยู่ในส่วนคำสั่ง SELECT | เฉพาะเมื่อมีเขตข้อมูลเหล่านี้เท่านั้น |
| HAVING | ในคำสั่ง SQL ที่มีฟังก์ชันการรวม จะระบุเกณฑ์ซึ่งใช้กับเขตข้อมูลที่ถูกสรุปรวมอยู่ในคำสั่ง SELECT | ไม่ใช่ |
คําที่ใช้ใน SQL
ส่วนคําสั่ง SQL แต่ละส่วนจะประกอบด้วยคําต่างๆ ซึ่งเทียบได้กับส่วนต่างๆ ของประโยค ตารางต่อไปนี้แสดงชนิดของคําที่ใช้ใน SQL
| คำที่ใช้ใน SQL | ส่วนของคําที่เทียบเคียงได้ | ข้อกำหนด | ตัวอย่าง |
|---|---|---|---|
| ตัวระบุ | คํานาม | ชื่อที่คุณใช้ระบุวัตถุฐานข้อมูล เช่น ชื่อของเขตข้อมูล | ลูกค้า [หมายเลขโทรศัพท์] |
| ตัวดำเนินการ | กริยาหรือกริยาวิเศษณ์ | คำสำคัญที่แทนการกระทำหรือปรับเปลี่ยนการกระทำ | AS |
| ค่าคงที่ | คํานาม | ค่าที่ไม่เปลี่ยนแปลง เช่น ตัวเลข หรือค่า NULL | 42 |
| นิพจน์ | คุณศัพท์ | การผสมรวมตัวระบุ ตัวดำเนินการ ค่าคงที่ และฟังก์ชันเข้าด้วยกันเพื่อนำมาประเมินให้ได้ค่าค่าเดียว | >= ผลิตภัณฑ์ [ราคาต่อหน่วย] |
ส่วนคําสั่ง SQL พื้นฐาน: SELECT, FROM และ WHERE
คําสั่ง SQL มีรูปแบบทั่วไป ดังนี้
SELECT field_1
FROM table_1
WHERE criterion_1
;
หมายเหตุ
- Access จะไม่สนใจการแบ่งบรรทัดในคําสั่ง SQL อย่างไรก็ตาม คุณควรใช้ส่วนคําสั่งหนึ่งคําสั่งต่อหนึ่งบรรทัด เพื่อช่วยให้ตัวคุณเองและผู้ใช้คนอื่นๆ อ่านคําสั่ง SQL ได้ง่ายขึ้น
- คําสั่ง SELECT ทุกคําสั่งจะลงท้ายด้วยเครื่องหมายอัฒภาค (;)) เครื่องหมายอัฒภาคอาจปรากฏอยู่ที่ท้ายส่วนคําสั่งส่วนสุดท้าย หรือที่บรรทัดใหม่ท้ายคําสั่ง SQL ก็ได้
ตัวอย่างใน Access
ตัวอย่างต่อไปนี้แสดงให้เห็นลักษณะของคําสั่ง SQL สําหรับแบบสอบถามแบบใช้เลือกข้อมูลอย่างง่ายใน Access
1. ส่วนคําสั่ง SELECT
2. ส่วนคําสั่ง FROM
3. ส่วนคำสั่ง WHERE
คําสั่ง SQL ในตัวอย่างนี้แปลความได้ว่า "เลือกข้อมูลที่เก็บอยู่ในเขตข้อมูลที่ชื่อ E-mail Address และ Company จากตารางที่ชื่อ Contacts เฉพาะระเบียนที่มีค่าของเขตข้อมูล City เป็น Seattle"
ลองพิจารณาตัวอย่างด้านบนทีละส่วนคําสั่ง เพื่อดูวิธีการทํางานของไวยากรณ์ SQL
ส่วนคําสั่ง SELECT
SELECT [E-mail Address], Company
นี่คือส่วนคําสั่ง SELECT ซึ่งประกอบด้วยตัวดําเนินการ (SELECT) ตามด้วยตัวระบุสองค่า ([E-mail Address] และ Company)
ถ้าตัวระบุมีเว้นวรรคหรืออักขระพิเศษ (เช่น "E-mail Address") จะต้องอยู่ในเครื่องหมายวงเล็บเหลี่ยม
ส่วนคําสั่ง SELECT ไม่จําเป็นต้องระบุว่าตารางใดมีเขตข้อมูลนั้น และไม่สามารถระบุเกณฑ์ใดๆ ในการเลือกข้อมูลเข้ามารวมไว้ได้
ส่วนคําสั่ง SELECT จะปรากฏอยู่หน้าส่วนคําสั่ง FROM ในคําสั่ง SELECT เสมอ
ส่วนคําสั่ง FROM
FROM Contacts
นี่เป็นส่วนคําสั่ง FROM ซึ่งประกอบด้วยตัวดําเนินการ (FROM) ตามด้วยตัวระบุ (Contacts)
ส่วนคําสั่ง FROM ไม่ได้แสดงเขตข้อมูลที่ถูกเลือก
ส่วนคําสั่ง WHERE
WHERE City="Seattle"
นี่เป็นส่วนคําสั่ง WHERE ซึ่งประกอบด้วยตัวดําเนินการ (WHERE) ตามด้วยนิพจน์ (City="Seattle")
หมายเหตุ
ส่วนคําสั่ง WHERE ไม่ใช่องค์ประกอบที่จําเป็นต้องมีของคําสั่ง SELECT ซึ่งต่างจากส่วนคําสั่ง SELECT และ FROM
SQL ช่วยให้คุณทําหลายๆ สิ่งได้สําเร็จโดยใช้ส่วนคําสั่ง SELECT, FROM และ WHERE ข้อมูลเพิ่มเติมเกี่ยวกับวิธีที่คุณใช้ส่วนคําสั่งเหล่านี้แสดงอยู่ในบทความเพิ่มเติมเหล่านี้
การเรียงลําดับผลลัพธ์: ORDER BY
ใน Access คุณสามารถเรียงลําดับผลลัพธ์แบบสอบถามในแผ่นข้อมูลได้ เช่นเดียวกับ Microsoft Excel คุณยังสามารถระบุในคิวรีเกี่ยวกับวิธีที่คุณต้องการเรียงลําดับผลลัพธ์เมื่อเรียกใช้คิวรีได้ โดยใช้ส่วนคําสั่ง ORDER BY ถ้าคุณใช้ส่วนคําสั่ง ORDER BY ส่วนคําสั่งนี้จะอยู่เป็นลําดับสุดท้ายในคําสั่ง SQL
ส่วนคําสั่ง ORDER BY ประกอบด้วยรายการเขตข้อมูลที่คุณต้องการใช้ในการเรียงลําดับ โดยจะเรียงตามลําดับเดียวกับที่คุณต้องการนําการเรียงลําดับไปใช้
ตัวอย่างเช่น สมมติว่าคุณต้องการเรียงลําดับผลลัพธ์ตามค่าของเขตข้อมูล Company จากมากไปหาน้อยก่อน ในกรณีที่มีระเบียนที่มีค่า Company ซ้ํากัน แล้วจึงเรียงลําดับตามค่าในเขตข้อมูล E-mail Address จากน้อยไปหามาก ส่วนคําสั่ง ORDER BY ของคุณจะมีลักษณะดังนี้
ORDER BY Company DESC, [E-mail Address]
หมายเหตุ
ตามค่าเริ่มต้น Access จะเรียงลําดับค่าจากน้อยไปหามาก (A-Z หรือน้อยที่สุดไปหามากที่สุด) คุณสามารถใช้คําสําคัญ DESC เพื่อเรียงลําดับค่าจากมากไปหาน้อยแทนได้
สําหรับข้อมูลเพิ่มเติมเกี่ยวกับส่วนคําสั่ง ORDER BY โปรดดูที่หัวข้อส่วนคําสั่ง ORDER BY
การทํางานกับข้อมูลสรุป: GROUP BY และ HAVING
บางครั้งคุณต้องการทํางานกับข้อมูลสรุป เช่น ยอดขายรวมในหนึ่งเดือน หรือสินค้าที่แพงที่สุดในสินค้าคงคลัง เมื่อต้องการทําเช่นนี้ ให้คุณนําฟังก์ชันการรวมไปใช้กับเขตข้อมูลในส่วนคําสั่ง SELECT ของคุณ ตัวอย่างเช่น ถ้าคุณต้องการให้คิวรีของคุณแสดงจํานวนที่อยู่อีเมลที่แสดงสําหรับแต่ละบริษัท ส่วนคําสั่ง SELECT ของคุณอาจมีลักษณะดังต่อไปนี้
SELECT COUNT([E-mail Address]), Company
ฟังก์ชันการรวมที่คุณสามารถใช้ได้จะขึ้นอยู่กับชนิดของข้อมูลที่อยู่ในเขตข้อมูลหรือนิพจน์ที่คุณต้องการใช้ สําหรับข้อมูลเพิ่มเติมเกี่ยวกับฟังก์ชันการรวมที่พร้อมใช้งาน ให้ดูบทความฟังก์ชันการรวม SQL
การระบุเขตข้อมูลที่ไม่ได้ใช้ในฟังก์ชันการรวม: ส่วนคําสั่ง GROUP BY
โดยปกติแล้ว เมื่อคุณใช้ฟังก์ชันการรวม คุณจะต้องสร้างส่วนคําสั่ง GROUP BY ด้วย ส่วนคําสั่ง GROUP BY จะแสดงเขตข้อมูลทั้งหมดที่คุณไม่นําไปใช้กับฟังก์ชันการรวม ถ้าคุณใช้ฟังก์ชันการรวมกับเขตข้อมูลทั้งหมดในแบบสอบถาม คุณไม่จําเป็นต้องสร้างส่วนคําสั่ง GROUP BY
ส่วนคําสั่ง GROUP BY จะอยู่ต่อจากส่วนคําสั่ง WHERE หรือต่อจากส่วนคําสั่ง FROM ถ้าไม่มีส่วนคําสั่ง WHERE ส่วนคําสั่ง GROUP BY นี้จะแสดงเขตข้อมูลตามที่ปรากฏในส่วนคําสั่ง SELECT
ตัวอย่างเช่น ต่อจากตัวอย่างที่แล้ว ถ้าส่วนคําสั่ง SELECT ใช้ฟังก์ชันการรวมกับ [E-mail Address] แต่ไม่ได้ใช้กับ Company ส่วนคําสั่ง GROUP BY ของคุณจะมีลักษณะดังนี้
GROUP BY Company
สําหรับข้อมูลเพิ่มเติมเกี่ยวกับส่วนคําสั่ง GROUP BY โปรดดูที่หัวข้อส่วนคําสั่ง GROUP BY
การจํากัดค่าการรวมโดยใช้เกณฑ์กลุ่ม: ส่วนคําสั่ง HAVING
ถ้าคุณต้องการใช้เกณฑ์เพื่อจํากัดผลลัพธ์ของคุณ แต่เขตข้อมูลที่คุณต้องการใช้กับเกณฑ์นั้นถูกใช้ในฟังก์ชันการรวมแล้ว คุณจะไม่สามารถใช้ส่วนคําสั่ง WHERE ได้ แต่คุณสามารถใช้ส่วนคําสั่ง HAVING แทนได้ ส่วนคําสั่ง HAVING ทํางานคล้ายกับส่วนคําสั่ง WHERE แต่ใช้กับข้อมูลการรวม
ตัวอย่างเช่น สมมติว่าคุณใช้ฟังก์ชัน AVG (ซึ่งจะคํานวณหาค่าเฉลี่ย) กับเขตข้อมูลแรกในส่วนคําสั่ง SELECT ของคุณ
SELECT COUNT([E-mail Address]), Company
ถ้าคุณต้องการให้แบบสอบถามจํากัดผลลัพธ์ตามค่าของฟังก์ชัน COUNT คุณไม่สามารถใช้เกณฑ์กับเขตข้อมูลดังกล่าวในส่วนคําสั่ง WHERE ได้ แต่ให้คุณใส่เกณฑ์ในส่วนคําสั่ง HAVING แทน ตัวอย่างเช่น ถ้าคุณต้องการให้คิวรีส่งกลับแถวที่มีที่อยู่อีเมลที่เกี่ยวข้องกับบริษัทหนึ่งๆ มากกว่าหนึ่งรายการ ส่วนคําสั่ง HAVING อาจมีลักษณะดังนี้
HAVING COUNT([E-mail Address])>1
หมายเหตุ
แบบสอบถามสามารถมีทั้งส่วนคําสั่ง WHERE และส่วนคําสั่ง HAVING ได้ โดยเกณฑ์สําหรับเขตข้อมูลที่ไม่ได้ใช้ในฟังก์ชันการรวมจะอยู่ในส่วนคําสั่ง WHERE และเกณฑ์สําหรับเขตข้อมูลที่ใช้กับฟังก์ชันการรวมจะอยู่ในส่วนคําสั่ง HAVING
สําหรับข้อมูลเพิ่มเติมเกี่ยวกับส่วนคําสั่ง HAVING โปรดดูที่หัวข้อส่วนคําสั่ง HAVING
การรวมผลลัพธ์แบบสอบถาม: UNION
เมื่อคุณต้องการตรวจทานข้อมูลทั้งหมดที่ได้รับจากแบบสอบถามแบบใช้เลือกข้อมูล ซึ่งมีลักษณะคล้ายกันหลายรายการเป็นชุดรวมกัน คุณสามารถใช้ตัวดําเนินการ UNION ได้
ตัวดําเนินการ UNION ช่วยให้คุณรวมคําสั่ง SELECT สองคําสั่งให้เป็นคําสั่งเดียวได้ คําสั่ง SELECT ที่คุณรวมเข้าด้วยจะต้องมีจํานวนเขตข้อมูลผลลัพธ์เท่ากัน อยู่ในลําดับเดียวกัน และมีชนิดข้อมูลเหมือนกันหรือเข้ากันได้ เมื่อคุณเรียกใช้แบบสอบถาม ข้อมูลจากชุดเขตข้อมูลที่เกี่ยวข้องแต่ละชุดจะถูกรวมเข้าด้วยกันเป็นเขตข้อมูลผลลัพธ์เดียว เพื่อให้ผลลัพธ์แบบสอบถามมีจํานวนเขตข้อมูลเท่ากับคําสั่ง Select แต่ละคําสั่ง
หมายเหตุ
ในการสร้างแบบสอบถามแบบร่วมนี้ จะถือว่าตัวเลขและข้อความเป็นชนิดข้อมูลที่เข้ากันได้
เมื่อคุณใช้ตัวดําเนินการ UNION คุณยังสามารถระบุว่าผลลัพธ์แบบสอบถามควรรวมแถวที่ซ้ํากัน (ถ้ามี) ด้วยหรือไม่ โดยใช้คําสําคัญ ALL
ไวยากรณ์ SQL พื้นฐานสําหรับแบบสอบถามแบบร่วมที่รวมคําสั่ง SELECT สองคําสั่งเข้าด้วยกัน มีลักษณะดังนี้
SELECT field_1
FROM table_1
UNION [ALL]
SELECT field_a
FROM table_a
;
ตัวอย่างเช่น สมมติว่าคุณมีตารางชื่อ Products และอีกตารางหนึ่งชื่อ Services ทั้งสองตารางมีเขตข้อมูลซึ่งประกอบด้วยชื่อของผลิตภัณฑ์หรือบริการ ราคา การรับประกันหรือการรับรอง และข้อมูลแสดงว่าคุณนําเสนอผลิตภัณฑ์หรือบริการเป็นแบบเอกสิทธิ์หรือไม่ แม้ว่าตาราง Products จะเก็บข้อมูลการรับประกัน และตาราง Services เก็บข้อมูลการรับรอง แต่ข้อมูลพื้นฐานจะเหมือนกัน (ไม่ว่าผลิตภัณฑ์หรือบริการนั้นๆ จะมีคําสัญญาด้านคุณภาพหรือไม่) คุณสามารถใช้แบบสอบถามแบบร่วม เช่น แบบสอบถามต่อไปนี้ เพื่อรวมเขตข้อมูลสี่เขตข้อมูลจากสองตาราง
SELECT name, price, warranty_available, exclusive_offer
FROM Products
UNION ALL
SELECT name, price, guarantee_available, exclusive_offer
FROM Services
;
สําหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีรวมคําสั่ง SELECT โดยใช้ตัวดําเนินการ UNION ให้ดูที่ การรวมผลลัพธ์ของหลายๆ แบบสอบถามการเลือกข้อมูลโดยใช้แบบสอบถามแบบร่วม