November 5, 2012

SQL: ดึงข้อมูลจากฐานข้อมูลด้วย SELECT

SQL (Structured Query Language - ภาษาสอบถามเชิงโครงสร้าง) เป็นภาษาสำหรับจัดการฐานข้อมูลที่นิยมใช้กันมากในปัจจุบัน

SQL พัฒนาที่ IBM โดย Donald D. Chamberlin และ Raymond F. Boyce ในปี ค.ศ. 1970 โดยมีแนวคิดบางส่วนมาจาก Edgar F. Codd เพื่อใช้กับระบบฐานข้อมูล System R

เดิม SQL จะใช้ชื่อว่า SEQUEL (Structured English Query Language) แต่ดันมีปัญหาเรื่องเครื่องหมายการค้า เลยเปลี่ยนชื่อเป็น SQL ซึ่งอ่านได้ทั้ง เอส-คิว-แอล, ซี-เควล และ ซี-ควล ตามชอบใจ

ระบบฐานข้อมูลส่วนใหญ่ ไม่ว่าจะเป็น MySQL, PostgreSQL, SQL Server, Access, Oracle, DB2 หรือ SQLite ก็ใช้ SQL ในการจัดการข้อมูลทั้งสิ้น

แต่... แม้ว่าระบบฐานข้อมูลเหล่านี้จะใช้ SQL ในการจัดการเหมือนกัน แต่รายละเอียดบางคำสั่งย่อย ๆ บางคำสั่งอาจจะแตกต่างกัน หากผลที่ได้ไม่ได้ออกมาตามต้องการ ให้คิดถึงจุดนี้ด้วย

สำหรับข้อมูลที่ใช้จะใช้ข้อมูลตามนี้ ขอตั้งชื่อตารางว่า application
idnamecategorydeveloperyear
1WindowsOSMicrosoft1985
2OS XOSApple Inc.2001
3Microsoft OfficeOffice SuiteMicrosoft1990
4Libre OfficeOffice SuiteThe Document Foundation2011
5Adobe PhotoshopGraphic EditorAdobe1990
6GIMPGraphic EditorThe GIMP Development Team1996
การนำข้อมูลมาแสดงจะใช้ SELECT ... FROM ... เป็นหลัก โดยอาจจะกำหนดเงื่อนไขผ่านทาง WHERE (ที่จริงแล้วคำสั่ง SQL จะใช้ตัวพิมพ์เล็ก หรือตัวพิมพ์ใหญ่ก็ให้ผลเหมือนกัน เพียงแต่ใช้ตัวพิมพ์ใหญ่จะอ่านได้เข้าใจง่ายกว่า) ผลที่ได้จะเหมือนกับตารางด้านบน คือ เอาข้อมูลทุกอย่างมาแสดง อันนี้เลือกเอาจะเฉพาะคอลัมภ์ name กับ year มาแสดง
nameyear
Windows1985
OS X2001
Microsoft Office1990
Libre Office2011
Adobe Photoshop1990
GIMP1996
อันนี้จะแสดงข้อมูลที่ไม่ซ้ำกันเท่านั้น ที่ซ้ำตัดทิ้งไป อาจะใช้หาว่า ลูกค้าของบริษัทเป็นคนจังหวัดใดบ้าง เป็นต้น
category
OS
Office Suite
Graphic Editor
แต่ถ้าหากจะกำหนดเงื่อนไขว่าเอาข้อมูลที่มีอย่างนั้นอย่างนี้จะต้องใช้ WHERE เข้าช่วย โดยใช้การเปรียบเทียบทั่ว ๆ ไป รวมทั้ง BETWEEN (ระหว่างค่า 2 ค่า) LIKE (ค้นหาโดยใช้ pattern) และ IN (ข้อมูลในคอลัมภ์เป็นค่าใดค่าหนึ่งในนี้)

หมายเหตุ: สำหรับการเปรียบเทียบ ไม่เท่ากับ ระบบฐานข้อมูลบางตัวใช้ <> แต่บางตัวใช้ != ผลที่ได้คือ จะแสดงเฉพาะแอพที่เปิดตัวตั้งแต่ปี 2000 ขึ้นไป
idnamecategorydeveloperyear
2OS XOSApple Inc.2001
4Libre OfficeOffice SuiteThe Document Foundation2011
หากจะให้ค้นหาข้อมูลจาก 2 คอลัมภ์ จะต้องใช้ AND (และ) หรือ OR (หรือ) เพิ่มต่อจาก WHERE หมายเหตุ: ถ้าสังเกต จะเห็นว่า การเปรียบเทียบ เท่ากับ ใน SQL จะใช้เครื่องหมายเท่ากับเพียงอันเดียว แทนที่จะเป็นสองอันแบบหลาย ๆ ภาษา ผลที่ได้คือ แสดงข้อมูลจะเฉพาะที่ปีต่ำกว่า 2000 และอยู่ในหมวด OS เท่านั้น
idnamecategorydeveloperyear
1WindowsOSMicrosoft1985
หากพบว่า ข้อมูลที่อยู่ในฐานข้อมูลเรียงไม่ถูกใจ สามารถสั่งเรียงข้อมูลใหม่ได้โดยผ่าน ORDER BY ผลที่ได้คือ ข้อมูลที่ได้จะเรียงตามปีจากน้อยไปหามาก (ASC) แต่ถ้าจะให้เรียงจากมากไปหาน้อยจะใช้ DESC
namecategorydeveloperyear
WindowsOSMicrosoft1985
Microsoft OfficeOffice SuiteMicrosoft1990
Adobe PhotoshopGraphic EditorAdobe1990
GIMPGraphic EditorThe GIMP Development Team1996
OS XOSApple Inc.2001
Libre OfficeOffice SuiteThe Document Foundation2011
สำหรับข้อมูลในฐานข้อมูลนั้นจะยังคงเรียงอยู่เหมือนเดิม คำสั่งนี้ใช้เฉพาะการดึงข้อมูลมาแสดงเท่านั้น ถ้าลองสั่ง SELECT * FROM application ดู ผลจะได้เหมือนกับตาราางแรกสุด

ถ้าสังเกตดูภาษา SQL จะอ่านเข้าใจง่าย และคล้ายภาษาอังกฤษมาก

2 comments:

  1. ตอนแรกจะเขียนถึงการ login logout ใน PHP แบบ hard code จะได้ไม่ต้องดึงจากฐานข้อมูล แต่คิดไปคิดมาดึงจากฐานข้อมูลน่าจะเข้าใจตอนนำไปใช้งานได้มากกว่า (และไม่ต้องเขียนถึงซ้ำ) แต่ถ้าไม่เคยพูดถึง SQL ก่อนก็คงไม่เหมาะ (รึเปล่า?)

    ป.ล. เห็นความพยายามการย่อเป็น SEQUEL แล้วฝรั่งนี่เขาช่างคิดตัวย่อกันจริง ๆ

    ReplyDelete
    Replies
    1. อย่า hard code เลยครับ เขียนทั้งทีเอาตาม best practice เลยดีกว่า ^^

      Delete