🗄️ MySQL/MariaDB

สอนเขียน SQL พื้นฐาน: ดึงข้อมูลด้วย SELECT และคัดกรองด้วย WHERE ใน MySQL และ MariaDB

8 นาที 19 views บันทึกเป็น PDF
สอนเขียน SQL พื้นฐาน: ดึงข้อมูลด้วย SELECT และคัดกรองด้วย WHERE ใน MySQL และ MariaDB

อยากเริ่มเขียน SQL ต้องรู้อะไรบ้าง? มาเรียนรู้วิธีดึงข้อมูลจากฐานข้อมูล (Database) ด้วยคำสั่ง SELECT และการกรองข้อมูลด้วย WHERE ให้แม่นยำสำหรับมือใหม่

ทำความรู้จักกับ Database และคำสั่งดึงข้อมูล

เวลาเราสร้างแอปพลิเคชันหรือเว็บไซต์ ข้อมูลต่างๆ จะถูกเก็บไว้ในที่ที่เรียกว่า Database (ฐานข้อมูล) ซึ่งเปรียบเสมือนตู้เก็บเอกสารขนาดใหญ่ที่จัดระเบียบข้อมูลไว้อย่างดี การที่เราจะดึงข้อมูลบางส่วนออกมาใช้งาน เราต้องใช้ภาษาที่ชื่อว่า SQL (Structured Query Language - ภาษาสำหรับคุยกับฐานข้อมูล) เพื่อบอกให้มันรู้ว่าเราต้องการอะไร

คนที่เป็นโปรแกรมเมอร์ต้องคุยกับฐานข้อมูลให้เป็น เพราะเกือบทุกโปรเจกต์ต้องมีการเก็บข้อมูลผู้ใช้งานหรือรายการสินค้า MySQL และ MariaDB คือระบบจัดการฐานข้อมูลยอดนิยมที่ใช้หลักการทำงานเหมือนกันเป๊ะ คุณเรียนรู้ครั้งเดียวก็เอาไปใช้ได้กับทั้งสองระบบเลย มันเหมือนกับการขับรถยี่ห้อไหนก็ได้ ถ้าคุณรู้วิธีขับรถยนต์พื้นฐานแล้ว

ก่อนจะเริ่มเขียนคำสั่ง เรามาลองนึกภาพตู้เก็บเอกสารที่มีแฟ้มรายชื่อพนักงาน ข้อมูลแต่ละแถวคือพนักงานหนึ่งคน และในแต่ละแถวก็มีช่องเก็บชื่อ อายุ และแผนก การดึงข้อมูลคือการเดินไปที่ตู้แล้วบอกว่า "ขอรายชื่อพนักงานทุกคน" หรือ "ขอแค่ชื่อของพนักงานในแผนกไอที" นั่นเอง

การดึงข้อมูลพื้นฐานด้วยคำสั่ง SELECT

คำสั่ง SELECT คือหัวใจสำคัญของการดึงข้อมูล คุณใช้มันเพื่อบอกฐานข้อมูลว่าต้องการดูอะไรบ้าง ถ้าเปรียบเทียบกับการสั่งอาหาร SELECT ก็เหมือนกับการบอกพนักงานเสิร์ฟว่าคุณต้องการสั่งอะไรจากเมนู โดยคุณต้องระบุชื่อคอลัมน์ (หัวข้อของข้อมูลในตาราง) ที่คุณสนใจจะหยิบออกมา

ถ้าคุณต้องการดึงข้อมูลทั้งหมดที่มีในตาราง เราจะใช้เครื่องหมายดอกจัน * ซึ่งเป็น Wildcard (สัญลักษณ์ตัวแทนที่หมายถึงทั้งหมด) การใช้ * ช่วยให้เราดูโครงสร้างข้อมูลได้เร็วขึ้น แต่ในงานจริงเรามักจะเลือกเฉพาะคอลัมน์ที่จำเป็นเท่านั้น เพื่อช่วยประหยัดทรัพยากรของเครื่องเซิร์ฟเวอร์ (คอมพิวเตอร์ที่ให้บริการข้อมูล)

ลองดูตัวอย่างการดึงข้อมูลจากตารางชื่อ employees (พนักงาน) กันครับ

-- ดึงข้อมูลทุกคอลัมน์จากตารางพนักงาน
SELECT * FROM employees;

-- ดึงเฉพาะชื่อและอีเมล
SELECT name, email FROM employees;

บรรทัดแรก SELECT * FROM employees; คือการสั่งให้ดึงทุกคอลัมน์จากตาราง employees ออกมาทั้งหมด ส่วนบรรทัดที่สองระบุชื่อคอลัมน์ name และ email คั่นด้วยเครื่องหมายคอมมา เพื่อเจาะจงเอาแค่สองอย่างนี้เท่านั้น

ผลลัพธ์ที่ได้จากการรันคำสั่งแรก จะเป็นตารางที่มีข้อมูลพนักงานทุกคนพร้อมรายละเอียดครบทุกช่อง ส่วนคำสั่งที่สองจะได้ผลลัพธ์เป็นตารางที่มีแค่สองคอลัมน์คือรายชื่อและอีเมลของพนักงานทุกคนครับ

การคัดกรองข้อมูลด้วยเงื่อนไข WHERE

บ่อยครั้งที่เราไม่ต้องการข้อมูลทั้งหมด แต่ต้องการเฉพาะข้อมูลที่ตรงตามเงื่อนไขเท่านั้น เช่น "ขอรายชื่อพนักงานที่อายุมากกว่า 30 ปี" เราจึงต้องใช้คำสั่ง WHERE (ที่ที่...) เพื่อกำหนดเงื่อนไขในการคัดกรองข้อมูล ถ้าไม่มี WHERE ฐานข้อมูลจะส่งข้อมูลทั้งหมดกลับมาให้คุณ ซึ่งอาจจะเยอะเกินความจำเป็นจนทำให้แอปช้าได้

การใช้ WHERE จะวางไว้หลังชื่อตารางเสมอ เปรียบเหมือนการบอกว่า "เอาข้อมูลจากตารางนี้ แต่ต้องมีเงื่อนไขแบบนี้นะ" ถ้าเงื่อนไขเป็นจริง ข้อมูลแถวนั้นก็จะถูกดึงออกมา ถ้าเงื่อนไขเป็นเท็จ ข้อมูลนั้นก็จะถูกข้ามไป นี่คือทักษะสำคัญที่ช่วยให้คุณจัดการข้อมูลได้แม่นยำขึ้น

ลองดูตัวอย่างการคัดกรองพนักงานที่มีแผนกเป็น 'IT' กันครับ

-- ดึงข้อมูลพนักงานที่ทำงานในแผนกไอที
SELECT * FROM employees WHERE department = 'IT';

คำสั่งนี้เริ่มจาก SELECT * เพื่อเอาทุกคอลัมน์ ตามด้วย FROM employees เพื่อบอกแหล่งข้อมูล และตบท้ายด้วย WHERE department = 'IT' เพื่อกรองเอาเฉพาะคนที่อยู่ในแผนกไอทีเท่านั้น

ผลลัพธ์ที่ได้จะเป็นรายชื่อพนักงานทุกคนที่สังกัดแผนก IT เท่านั้น หากในตารางไม่มีคนแผนกนี้เลย ผลลัพธ์ที่ได้จะเป็นตารางว่างเปล่า ซึ่งถือเป็นเรื่องปกติในการเขียนโค้ดครับ

ใช้ตัวดำเนินการเปรียบเทียบเพื่อความแม่นยำ

นอกจากเครื่องหมายเท่ากับ = แล้ว เรายังมีตัวดำเนินการเปรียบเทียบอื่นๆ อีกมากมายที่ใช้ร่วมกับ WHERE เพื่อสร้างเงื่อนไขที่ซับซ้อนขึ้น เช่น เครื่องหมาย > (มากกว่า), < (น้อยกว่า), >= (มากกว่าหรือเท่ากับ), และ != หรือ <> (ไม่เท่ากับ)

ตัวดำเนินการเหล่านี้ช่วยให้เราตั้งเงื่อนไขได้ละเอียดมากขึ้น เช่น การหาพนักงานที่เงินเดือนสูงกว่า 50,000 บาท หรือการค้นหาข้อมูลที่ไม่ใช่แผนกการตลาด การเลือกใช้ตัวดำเนินการที่ถูกต้องจะช่วยลดจำนวนโค้ดที่คุณต้องเขียนลงไปได้อย่างมาก

ลองดูตัวอย่างการใช้ตัวดำเนินการเปรียบเทียบเพื่อหาพนักงานเงินเดือนสูงกันครับ

-- ดึงข้อมูลพนักงานที่เงินเดือนมากกว่า 50,000
SELECT * FROM employees WHERE salary > 50000;

-- ดึงข้อมูลพนักงานที่ไม่ใช่แผนก HR
SELECT * FROM employees WHERE department != 'HR';

บรรทัดแรกใช้ salary > 50000 เพื่อคัดกรองตัวเลขเงินเดือน บรรทัดที่สองใช้ department != 'HR' เพื่อดึงข้อมูลทุกคนที่ไม่ได้อยู่ในฝ่ายบุคคล การใช้ != เป็นวิธีมาตรฐานในการระบุสิ่งที่เราไม่ต้องการ

ผลลัพธ์ที่ได้จากคำสั่งแรกคือรายชื่อพนักงานที่มีเงินเดือนเกิน 50,000 บาท ส่วนคำสั่งที่สองคือรายชื่อพนักงานทุกคนยกเว้นคนที่อยู่ฝ่าย HR ครับ

ตรรกศาสตร์ขั้นสูงด้วย AND, OR, NOT, IN, BETWEEN

เมื่อเงื่อนไขเริ่มเยอะขึ้น เราต้องใช้ตัวเชื่อมทางตรรกศาสตร์ (Logic) เข้ามาช่วย AND ใช้เมื่อต้องการให้ทุกเงื่อนไขเป็นจริงพร้อมกัน OR ใช้เมื่อต้องการเพียงเงื่อนไขใดเงื่อนไขหนึ่งเป็นจริง และ NOT ใช้เพื่อกลับค่าเงื่อนไขให้เป็นตรงกันข้าม

นอกจากนี้ยังมี IN ที่ช่วยเช็คว่าข้อมูลอยู่ในกลุ่มที่เรากำหนดไหม และ BETWEEN ที่ใช้หาข้อมูลในช่วงตัวเลขหรือวันที่ที่ต้องการ สิ่งเหล่านี้ช่วยให้คุณเขียนคำสั่งได้สั้นและอ่านง่ายขึ้นมาก แทนที่จะเขียนเงื่อนไขยาวเหยียดซ้ำไปซ้ำมา

ตัวอย่างการใช้งานเพื่อหาข้อมูลที่เฉพาะเจาะจงมากขึ้น

-- หาพนักงานแผนก IT ที่เงินเดือนมากกว่า 50,000
SELECT * FROM employees WHERE department = 'IT' AND salary > 50000;

-- หาพนักงานที่อายุระหว่าง 25 ถึง 30 ปี
SELECT * FROM employees WHERE age BETWEEN 25 AND 30;

คำสั่งแรกใช้ AND เชื่อมสองเงื่อนไขเข้าด้วยกัน ทำให้ต้องผ่านทั้งสองเกณฑ์ถึงจะถูกดึงออกมา คำสั่งที่สองใช้ BETWEEN เพื่อระบุช่วงของอายุ 25 ถึง 30 ปี ซึ่งสะอาดกว่าการเขียนว่า age >= 25 AND age <= 30

ผลลัพธ์ของคำสั่งแรกคือพนักงาน IT ที่รวยกว่า 50,000 บาทเท่านั้น ส่วนผลลัพธ์ของคำสั่งที่สองคือรายชื่อพนักงานที่อายุอยู่ในช่วง 25 ถึง 30 ปีพอดีครับ

สรุป: การนำไปใช้ในงานจริง

การเข้าใจ SELECT และ WHERE คือก้าวแรกที่สำคัญที่สุดของโปรแกรมเมอร์ทุกคน ฐานข้อมูลเป็นหัวใจของแอปพลิเคชันแทบทุกตัวที่คุณจะได้ทำในอนาคต ไม่ว่าจะเป็นระบบสมาชิก เว็บขายของ หรือแอปจองตั๋วหนัง คุณต้องดึงข้อมูลมาแสดงผลให้ผู้ใช้งานเห็นอย่างถูกต้องเสมอ

สมมติว่าคุณกำลังทำระบบจัดการคลังสินค้า คุณจะต้องใช้คำสั่งเหล่านี้ในการดึงข้อมูลสินค้าที่เหลืออยู่ต่ำกว่า 10 ชิ้น เพื่อแจ้งเตือนให้แอดมินทราบ หรือดึงรายการสินค้าในหมวดหมู่ที่ลูกค้ากำลังสนใจ เพื่อแสดงผลบนหน้าแรกของเว็บไซต์ การฝึกฝนจนคล่องจะทำให้คุณทำงานได้เร็วและลดบั๊ก (ข้อผิดพลาดของโปรแกรม) ได้ดีขึ้น

อย่าลืมว่าการเขียนโค้ดคือทักษะที่ต้องใช้การฝึกฝน ลองเปิดโปรแกรมจัดการฐานข้อมูลแล้วพิมพ์คำสั่งเหล่านี้ด้วยตัวเอง ดูผลลัพธ์ที่เปลี่ยนไปเมื่อคุณเปลี่ยนเงื่อนไข นี่คือวิธีเดียวที่จะทำให้คุณจำได้แม่นและก้าวไปเป็นโปรแกรมเมอร์ที่เก่งขึ้นในทุกๆ วันครับ

แชร์บทความ

Facebook X LINE

บทความที่เกี่ยวข้อง

MySQL/MariaDB

สอนวิธี Backup และ Restore ฐานข้อมูล MySQL/MariaDB ด้วย mysqldump บน Windows

มือใหม่หัดเขียนโปรแกรมต้องรู้! วิธีสำรองข้อมูล (Backup) และกู้คืน (Restore) ฐานข้อมูลด้วย mysqldump ผ่าน Command Line ป้องกันงานหาย ทำตามได้จริง

1 month ago 9 นาที
23 views
จัดการ User และสิทธิ์ใน MySQL/MariaDB ให้ปลอดภัยด้วยคำสั่ง GRANT และ REVOKE
MySQL/MariaDB

จัดการ User และสิทธิ์ใน MySQL/MariaDB ให้ปลอดภัยด้วยคำสั่ง GRANT และ REVOKE

มือใหม่หัดใช้ฐานข้อมูลต้องรู้! วิธีสร้าง User, กำหนดสิทธิ์ (Permission) และตั้งค่าความปลอดภัยให้ MySQL/MariaDB เพื่อป้องกันข้อมูลรั่วไหลแบบมือโปร

1 month ago 8 นาที
24 views
เข้าใจ MySQL และ MariaDB Trigger: เขียนคำสั่งอัตโนมัติให้ฐานข้อมูลทำงานแทนเรา
MySQL/MariaDB

เข้าใจ MySQL และ MariaDB Trigger: เขียนคำสั่งอัตโนมัติให้ฐานข้อมูลทำงานแทนเรา

อยากให้ฐานข้อมูลทำงานอัตโนมัติเมื่อมีการเพิ่มหรือลบข้อมูลไหม? มาเรียนรู้การใช้ Trigger (ตัวกระตุ้นการทำงาน) ใน MySQL และ MariaDB เพื่อลดภาระงานโค้ดกัน

1 month ago 8 นาที
23 views