Database

คำสั่ง SQL ใน MySQL ที่คุณอาจยังไม่รู้

MySQL ยังมีคำสั่งอันทรงพลังที่หลายคนอาจจะไม่ทราบ ซึ่งสามารถปรับปรุงประสิทธิภาพและอาจช่วยให้คุณทำงานได้ง่ายขึ้น

เมื่อต้องทำงานกับ MySQL นักพัฒนาส่วนใหญ่คุ้นเคยกับคำสั่ง SQL พื้นฐาน เช่น SELECT, INSERT, UPDATE และ DELETE อย่างไรก็ตาม MySQL ยังมีคำสั่งอันทรงพลังที่หลายคนอาจจะไม่ทราบ ซึ่งสามารถปรับปรุงประสิทธิภาพและอาจช่วยให้คุณทำงานได้ง่ายขึ้น ไม่ว่าจะเป็นการเพิ่มประสิทธิภาพการค้นหา หรือจัดการโครงสร้างข้อมูล ก็มีคำสั่ง SQL ที่คุณอาจจะยังรู้จักซึ่งสามารถทำให้ประสบการณ์ MySQL ของคุณมีประสิทธิผลและไดนามิกมากขึ้น

1. Pattern matching

Operator ที่ใช้จะเป็น LIKE และในการ matching จะใช้ร่วมกับ underscore (_) และ % โดยแต่ละตัวมีวัตถุประสงค์คือ

  • underscore (_) ใช้ในการระบุ character เช่น 1 underscore คือ 1 character
  • % ใช้ในการ matching กับทั้งตัวอักษรและตัวเลข
1.1 หาสินค้าที่ขึ้นต้นด้วย abc และลงท้ายด้วย z

กรณีนี้เราจะใช้ % ไปวางไว้ตรงกลาง เช่น ต้องการหาชื่อสินค้าที่ขึ้นต้นด้วย abc และลงท้ายด้วย z

SELECLT product_name FROM products WHERE product_name LIKE 'abc%z'
1.2 หาสินค้าที่หลัง 1 ตัวอักษร ตามด้วย abc และต่อท้ายด้วยอะไรก็ได้

เราจะใช้ทั้ง underscore (_) และ % ร่วมกันทำงาน

SELECLT product_name FROM products WHERE product_name LIKE '_abc%'

ถ้าหากคุณต้องการ 3 ตัวอักษร/ตัวเลข ข้างหน้า ก็ใช่ underscore ติดกัน 3 ตัว

2. การใช้ COUNT, AVERAGE, HAVING

2.1 การนับจำนวนชื่อคนที่ซ้ำกันมากที่สุด

หากคุณต้องการหาชื่อที่คนใช้มากที่สุด 10 อันดับ ก็สามารถทำได้ ด้วยการใช้ COUNT ร่วมกับ ORDER BY ด้วยการระบุ field ที่คุณต้องการนับลงไป โดยตัวอย่างต้องการนับชื่อพนักงานที่ซ้ำกันมากที่สุด 10 อันดับแรก

SELECLT firstname,COUNT(firstname) as 'count'
FROM staff GROUP BY firstname
ORDER BY count DESC
LIMIT 10
2.2 หาพนักงานที่มีเงินเดือนเฉลี่ยสูงสุด 10 คนแรก

จะใช้ทั้งคำสั่ง AVG (Average) และ GROUP BY

SELECLT staff_id,AVG(saraly) as 'avg_salary'
FROM staff GROUP BY staff_id
ORDER BY avg_salary DESC
LIMIT 10
2.3 กรองอีกทีด้วย Having

คุณสามารถกรอง ผลจากการ GROUP BY ด้วยการใช้ HAVING เช่น

SELECLT staff_id,AVG(saraly) as 'avg_salary'
FROM staff GROUP BY staff_id
HAVING avg_salary > 10000
ORDER BY avg_salary DESC

3. การ JOIN ตาราง

3.1 การ join สามารถใส่เงื่อนไขเพิ่มตามหลังได้

กรณีที่เรามีเงื่อนไขอาจจะไม่ต้องไประบุที่ WHERE เช่น

SELECT s.staff_name, p.FROM staff s
JOIN position p ON s.position_id = p.position_d AND p.position_name = 'tester'

คำสั่งนี้จะได้ผลลัพธ์เดียวกับที่ใช้ where แต่จะ Performance จะดีกว่า แต่ทางด้่าน Readability อาจจะแย่กว่าหน่อย

จบจ่ะ 😀

Tags