เมื่อคุณต้องการเรียกใช้ข้อมูลจากฐานข้อมูล ให้คุณขอข้อมูลโดยใช้ Structured Query Language หรือ SQL SQL เป็นภาษาของคอมพิวเตอร์ที่คล้ายกับภาษาอังกฤษมาก แต่โปรแกรมฐานข้อมูลเข้าใจ ทุกคิวรีที่คุณเรียกใช้จะใช้ SQL เบื้องหลัง
การทําความเข้าใจวิธีที่ SQL ทํางานสามารถช่วยให้คุณสร้างคิวรีที่ดีขึ้น และช่วยให้คุณเข้าใจวิธีแก้ไขคิวรีที่ไม่ส่งกลับผลลัพธ์ที่คุณต้องการได้ง่ายขึ้น
นี่คือหนึ่งในชุดบทความเกี่ยวกับ Access SQL บทความนี้จะอธิบายการใช้ SQL พื้นฐานเพื่อเลือกข้อมูล และใช้ตัวอย่างเพื่อแสดงไวยากรณ์ SQL
ในบทความนี้
SQL คืออะไร
SQL เป็นภาษาคอมพิวเตอร์สําหรับการทํางานกับชุดข้อเท็จจริงและความสัมพันธ์ระหว่างทั้งสอง โปรแกรมฐานข้อมูลเชิงสัมพันธ์ เช่น Microsoft Office Access ให้ใช้ 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 ที่ใช้สําหรับการสร้างและเปลี่ยนแปลงวัตถุฐานข้อมูลเรียกว่า ภาษากําหนดโครงสร้างข้อมูล (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 |
นิพจน์ |
คุณศัพท์ |
การผสมรวมตัวระบุ ตัวดำเนินการ ค่าคงที่ และฟังก์ชันเข้าด้วยกันเพื่อนำมาประเมินให้ได้ค่าค่าเดียว |
>= Products.[Unit Price] |
ส่วนคําสั่ง 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) ตามด้วยตัวระบุสองตัว ([ที่อยู่อีเมล] และบริษัท)
ถ้าตัวระบุมีช่องว่างหรืออักขระพิเศษ (เช่น "ที่อยู่อีเมล") ตัวระบุนั้นจะต้องอยู่ในวงเล็บเหลี่ยม
ส่วนคําสั่ง SELECT ไม่จําเป็นต้องระบุว่าตารางใดมีเขตข้อมูล และไม่สามารถระบุเงื่อนไขใดๆ ที่ข้อมูลต้องตรงตามที่จะรวมไว้ได้
ส่วนคําสั่ง SELECT จะปรากฏที่ด้านหน้าส่วนคําสั่ง FROM ในคําสั่ง SELECT เสมอ
ส่วนคําสั่ง FROM
FROM Contacts
นี่คือส่วนคําสั่ง FROM ซึ่งประกอบด้วยตัวดําเนินการ (FROM) ตามด้วยตัวระบุ (ที่ติดต่อ)
ส่วนคําสั่ง FROM จะไม่แสดงรายการเขตข้อมูลที่จะเลือก
ส่วนคําสั่ง WHERE
WHERE City="Seattle"
นี่คือส่วนคําสั่ง WHERE ซึ่งประกอบด้วยตัวดําเนินการ (WHERE) ตามด้วยนิพจน์ (City="Seattle")
หมายเหตุ: ส่วนคําสั่ง WHERE ไม่ใช่องค์ประกอบที่จําเป็นของคําสั่ง SELECT ซึ่งต่างจากส่วนคําสั่ง SELECT และ FROM
คุณสามารถทําการกระทําต่างๆ ที่ SQL ทําให้คุณทําได้โดยใช้ส่วนคําสั่ง SELECT, FROM และ WHERE ข้อมูลเพิ่มเติมเกี่ยวกับวิธีการใช้ส่วนคําสั่งเหล่านี้จะแสดงในบทความเพิ่มเติมเหล่านี้:
การเรียงลําดับผลลัพธ์: ORDER BY
เช่นเดียวกับ Microsoft Excel Access ช่วยให้คุณสามารถเรียงลําดับผลลัพธ์คิวรีในแผ่นข้อมูลได้ คุณยังสามารถระบุในคิวรีวิธีที่คุณต้องการเรียงลําดับผลลัพธ์เมื่อคิวรีทํางาน โดยใช้ส่วนคําสั่ง ORDER BY ถ้าคุณใช้ส่วนคําสั่ง ORDER BY จะเป็นส่วนคําสั่งสุดท้ายในคําสั่ง SQL
ส่วนคําสั่ง ORDER BY มีรายการของเขตข้อมูลที่คุณต้องการใช้สําหรับการเรียงลําดับ ในลําดับเดียวกับที่คุณต้องการใช้การเรียงลําดับ
ตัวอย่างเช่น สมมติว่าคุณต้องการให้ผลลัพธ์ของคุณเรียงลําดับก่อนตามค่าของเขตข้อมูล "บริษัท" จากมากไปหาน้อย และถ้ามีระเบียนที่มีค่าเดียวกันสําหรับ บริษัท เรียงลําดับตามค่าในเขตข้อมูล ที่อยู่อีเมล จากน้อยไปหามาก ส่วนคําสั่ง 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 ของคุณนําฟังก์ชันการรวมไปใช้กับ [ที่อยู่อีเมล] แต่ไม่ใช่กับบริษัท ส่วนคําสั่ง 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 ที่คุณรวมต้องมีจํานวนเขตข้อมูลผลลัพธ์เท่ากัน ในลําดับเดียวกัน และมีชนิดข้อมูลเดียวกันหรือเข้ากันได้ เมื่อคุณเรียกใช้คิวรี ข้อมูลจากแต่ละชุดเขตข้อมูลที่สอดคล้องกันจะถูกรวมเป็นเขตข้อมูลผลลัพธ์เดียว เพื่อให้ผลลัพธ์คิวรีมีจํานวนเขตข้อมูลเท่ากับแต่ละคําสั่งที่เลือก
หมายเหตุ: สําหรับวัตถุประสงค์ของคิวรีแบบร่วม ชนิดข้อมูลตัวเลขและข้อความจะเข้ากันได้
เมื่อคุณใช้ตัวดําเนินการ UNION คุณยังสามารถระบุว่าผลลัพธ์คิวรีควรมีแถวที่ซ้ํากันหรือไม่ ถ้ามี อยู่ โดยใช้คําสําคัญ ALL
ไวยากรณ์ SQL พื้นฐานสําหรับคิวรีแบบร่วมที่รวมคําสั่ง SELECT สองคําสั่งมีดังนี้:
SELECT field_1
FROM table_1 UNION [ALL] SELECT field_a FROM table_a ;
ตัวอย่างเช่น สมมติว่าคุณมีตารางที่ชื่อว่า ผลิตภัณฑ์ และตารางอื่นที่ชื่อว่า บริการ ทั้งสองตารางมีเขตข้อมูลที่มีชื่อของผลิตภัณฑ์หรือบริการ ราคา การรับประกัน หรือการรับประกัน ที่พร้อมให้บริการ และไม่ว่าคุณจะเสนอผลิตภัณฑ์หรือบริการโดยเฉพาะ แม้ว่าตารางผลิตภัณฑ์จะจัดเก็บข้อมูลการรับประกัน และตารางบริการจะจัดเก็บข้อมูลการรับประกัน แต่ข้อมูลพื้นฐานจะเหมือนกัน (ไม่ว่าผลิตภัณฑ์หรือบริการนั้นๆ จะมีสัญญาว่าจะให้คุณภาพหรือไม่) คุณสามารถใช้คิวรีแบบร่วมเช่นต่อไปนี้เพื่อรวมสี่เขตข้อมูลจากสองตาราง:
SELECT name, price, warranty_available, exclusive_offer
FROM Products UNION ALL SELECT name, price, guarantee_available, exclusive_offer FROM Services ;
สําหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีรวมคําสั่ง SELECT โดยใช้ตัวดําเนินการ UNION ให้ดู รวมผลลัพธ์ของคิวรีแบบใช้เลือกข้อมูลหลายรายการโดยใช้คิวรีแบบร่วม