พี่ทอย ในเพจ Data Rockie มีสอน SQL แบบไวๆ มั้ัย ?
เดี๋ยวพี่จะเล่าให้ฟังๆ
ทุกวันนี้โลกเราเต็มไปด้วยข้อมูลขนาดใหญ่ ไม่ว่าจะบริษัทใดๆก็ล้วนมีการจัดเก็บข้อมูลทั้งแบบที่มีโครงสร้าง Structure data และแบบที่ไม่มีโครงสร้าง Unstructure Data ภาษา SQL จึงเป็นหนึ่งในภาษาสำหรับเขียนเพื่อติดต่อและจัดการกับฐานข้อมูล เป็นภาษาที่จำเป็นสำหรับคนที่สนใจหรือต้องการทำงานสาย Web Developer หรือแม้แต่ด้าน Data จำเป็นต้องรู้ภาษานี้ไว้ครับ บทความนี้เราจะมาเรียน SQL จาก 0 กันเลย
SQL หรือ Structure Query Language ถูกพัฒนาตั้งแต่ปี 1970 เป็นภาษาที่นักพัฒนาจะใช้สำหรับการสื่อสารและจัดการข้อมูลเชิงสัมพันธ์ (Relational Database) สำหรับ Database Management system ที่มีใช้อยู่ในองค์กรตั้งแต่ขนาดเล็กไปจนถึงองค์กรที่มีขนาดใหญ่มากๆ โดยจะมีผู้ให้บริการที่แตกต่างกันออกไป ทั้งแบบที่เป็น On Cloud และ On Promise ซึ่งอาจจะมีฟีเจอร์การใช้งานบางส่วนแตกต่างกัน แต่โดยทั่วไปแล้วคำสั่งพื้นฐานจะไม่หนีกันมากนัก สามารถนำความรู้ไปต่อยอดได้ผ่านการอ่าน Document ของผู้ให้บริการนั้นๆ
ภาษา SQL นั้นมีความเรียบง่ายในการใช้งาน จึงทำให้ถูกใช้ในการพัฒนางานเกี่ยวกับข้อมูล และด้านการพัฒนาเว็บแอพพลิเคชั่น เป็นส่วนใหญ่ ดังนั้นภาษานี้จึงเหมาะกับผู้พัฒนาเว็บไซต์(Software Developer) และ นักวิเคราะห์ข้อมูล (Data Analyst) ภาษา SQL เป็นภาษาที่ใช้เฉพาะการจัดการข้อมูลเชิงสัมพันธ์เท่านั้น ไม่สามารถใช้แสดงผลตรงๆ ได้ แต่จะอาศัยภาษาอื่นในการนำข้อมูลออกไปใช้ เช่น Python , Go , Java ,Nodejs etc.
ถ้าหาก HTML เป็นชุดคำสั่งที่เขียนง่ายได้มากเท่าไร ให้ทุกคนจำไว้ว่า SQL นั้นเขียนง่ายกว่ามาก (เฉพาะในเชิงการเขียน ไม่รวมโลจิกของชุดข้อมูลนะ) เรียกว่าถ้าเราแม่นภาษาอังกฤษนิดหน่อย ก็สามารถจะเป็นเทพ SQL ได้เลย แต่แนะนำให้ใช้งานบ่อยๆ นะครับ พอยิ่งเราใช้บ่อยมากขึ้น เราจะยิ่งเขียนได้ดี และสามารถปรับปรุงประสิทธิภาพของโค้ดได้ดียิ่งขึ้น
เนื่องจาก SQL นั้นมีหลายวิธีในการเล่นกับข้อมูล และสามารถจัดหมวดหมู่คำสั่ง SQL ได้ตามนี้
Process | Description |
---|---|
DDL | คำสั่ง SQL ที่ออกแบบโครงสร้างฐานข้อมูล วิศวกรฐานข้อมูลใช้ DDL เพื่อสร้างและแก้ไขวัตถุฐานข้อมูลตามความต้องการของธุรกิจ ตัวอย่างเช่น วิศวกรฐานข้อมูลใช้คำสั่ง CREATE เพื่อสร้างวัตถุฐานข้อมูลเช่นตาราง มุมมอง และดัชนี |
DQL | ประกอบด้วยคำสั่งสำหรับการดึงข้อมูลที่เก็บไว้ในฐานข้อมูลแบบเชิงสัมพันธ์ การใช้งานซอฟต์แวร์ใช้คำสั่ง SELECT เพื่อกรองและส่งกลับผลลัพธ์เฉพาะจากตาราง SQL |
DML | เขียนข้อมูลใหม่หรือปรับเปลี่ยนระเบียนที่มีอยู่ในฐานข้อมูลแบบเชิงสัมพันธ์ ตัวอย่างเช่น แอปพลิเคชันใช้คำสั่ง INSERT เพื่อเก็บบันทึกใหม่ในฐานข้อมูล |
DCL | เพื่อจัดการหรืออนุญาตการเข้าถึงฐานข้อมูลสำหรับผู้ใช้รายอื่น ตัวอย่างเช่นพวกเขาสามารถใช้คำสั่ง GRANT เพื่ออนุญาตให้บางแอปพลิเคชันจัดการกับหนึ่งตารางหรือมากกว่าได้ |
TCL | Engine เชิงสัมพันธ์ใช้ภาษาควบคุมการทำธุรกรรม (TCL) เพื่อใเปลี่ยนแปลงฐานข้อมูลโดยอัตโนมัติ ตัวอย่างเช่น ฐานข้อมูลใช้คำสั่ง ROLLBACK เพื่อยกเลิกการทำธุรกรรมที่ผิดพลาด |
เนื่องจาก SQL นั้นมีหลายวิธีในการเล่นกับข้อมูล และสามารถจัดหมวดหมู่คำสั่ง SQL ได้ตามนี้ ซึ่งเราจะเรียกการเขียน syntax เพื่อทำงานบางสิ่งบางอย่างว่า การเขียน Statement
SELECT
*
FROM mtcars
การทำงานของคำสั่งด้านบนคือ ให้ดึงข้อมูลทุกอย่างที่อยู่ในตาราง mtcars มาแสดงผล โดยเครื่องหมายถึง * ใน SQL จะหมายถึงการเลือกทุกอย่างใน Statement นั้น
คำสั่งเกี่ยวกับการใช้ Window Function บางตัวจะต้องมีการใส่ Statement เพื่อเติม เช่น GROUP BY อีกด้วย วิธีการใช้ GROUP BY คือการจัดกลุ่มคอลัมน์ที่เราไม่ได้ใช้ Aggregate Function เช่น Sum() , Max() , Min() ซึ่งเราสามารถใช้ชื่อคอลัมน์นั้นใน GROUP By ก็ได้ หรือจะใช้ตัวเลขที่อ้างอิงจากคอลัมน์ที่เราดึงออกมาตามลำดับก็ได้ นอกจากนี้ยังมี Window Function ตัวอื่นๆ ที่จะมีบทความแยกต่างหากอีกหลายตัวตามมา
SELECT
id ,
sum(score) as score
FROM mtcars
GROUP BY id /*ใช้ 1 */
Insert คือ คำสั่งที่ใช้สำหรับ 'เพิ่ม' ข้อมูลในแถวใหม่ของตาราง นี่คือตัวอย่างไวยากรณ์ของคำสั่ง โดยจะใช้คีย์เวิร์ด INSERT
INSERT INTO
table_name (column1, column2)
VALUES (value1, value2)
Update คือ คำสั่งที่ใช้สำหรับ 'แก้ไข' ข้อมูลในแถว (record) ของตาราง นี่คือตัวอย่างไวยากรณ์ของคำสั่ง โดยจะใช้คีย์เวิร์ด UPDATE
UPDATE table_name
SET column1 = value1,
column2 = value2
WHERE condition;
Delete คือ คำสั่งที่ใช้สำหรับ 'ลบ' ข้อมูลในแถว (record) ของตาราง นี่คือตัวอย่างไวยากรณ์ของคำสั่ง โดยจะใช้คีย์เวิร์ด DELETE
DELETE FROM table_name
WHERE condition;
วันนี้เราจะมาแนะนำวิธีการใช้งาน พร้อมภาพตัวอย่างของการเชื่อมข้อมูลด้วย SQL JOIN กัน โดยจะมีทั้ง 4 รูปแบบตามที่ได้กล่าวไว้
INNER JOIN จะเป็นคำสั่งการรีเทิร์นเฉพาะค่าที่ตรงกันระหว่าง 2 ตาราง และจะแสดงผลข้อมูลของทุกแถวของทั้งสองตาราง
SELECT *
FROM table1
INNER JOIN table2
ON table1.name = table2.name;
โค้ดตัวอย่างแสดงให้เห็นว่ามีการเชื่อมกันด้วย INNER JOIN ด้วยการนำคอลัมน์ name ของทั้ง 2 ตาราง (table1 , table2) มาจับคู่กัน ซึ่งจะส่งผลลัพธ์กลับมาเฉพาะแถวที่ name ของทั้ง 2 ตารางนั้นมีชื่อเดียวกัน
Left Join จะเป็นคำสั่งการรีเทิร์นข้อมูลทุกแถวของตารางด้านซ้าย (Left Table) และรีเทิร์นค่าที่ตรงกันเท่านั้นของตารางด้านขวา (Right Table) ถ้าไม่มีค่าที่ตรงกันจากทางตารางด้านขวา จะรีเทิร์นค่า NULL (ค่าว่างเปล่า)
SELECT *
FROM table1
LEFT JOIN table2
ON table1.name = table2.name;
โค้ดตัวอย่างแสดงให้เห็นว่ามีการเชื่อมกันด้วย LEFT JOIN ด้วยการนำคอลัมน์ name ของทั้ง 2 ตาราง (table1 , table2) มาจับคู่กัน ซึ่งจะส่งผลลัพธ์ของ ตารางด้านซ้ายมาทั้งหมด ส่วนตารางด้านขวา หากไม่มี name ที่ตรงกันก็จะส่งมาเป็นค่า Null
Right Join จะเป็นคำสั่งการรีเทิร์นข้อมูลทุกแถวของตารางด้านขวา (Right Table) และรีเทิร์นค่าที่ตรงกันเท่านั้นของตารางด้านซ้าย (Left Table) ถ้าไม่มีค่าที่ตรงกันจากทางตารางด้านขวา จะรีเทิร์นค่า NULL (ค่าว่างเปล่า) พูดง่าย ๆ คือคล้ายกันกับ Left Join เพียงแต่ตรงข้ามกัน
SELECT *
FROM table1
RIGHT JOIN table2
ON table1.name = table2.name;
โค้ดตัวอย่างแสดงให้เห็นว่ามีการเชื่อมกันด้วย RIGHT JOIN ด้วยการนำคอลัมน์ name ของทั้ง 2 ตาราง (table1 , table2) มาจับคู่กัน ซึ่งจะส่งผลลัพธ์ของ ตารางด้านขวามาทั้งหมด ส่วนตารางด้านซ้าย หากไม่มี name ที่ตรงกันก็จะส่งมาเป็นค่า Null
Full Outer Join จะเป็นคำสั่งการรีเทิร์นข้อมูลทุกแถวของทั้ง 2 ตาราง ถ้าไม่มีค่าที่ตรงกันจากทั้งสองตาราง จะรีเทิร์นค่า NULL (ค่าว่างเปล่า)
SELECT *
FROM table1
FULL OUTER JOIN table2
ON table1.name = table2.name;
โค้ดตัวอย่างแสดงให้เห็นว่ามีการเชื่อมกันด้วย FULL OUTER JOIN ด้วยการนำคอลัมน์ name ของทั้ง 2 ตาราง (table1 , table2) มาจับคู่กัน ซึ่งจะส่งผลลัพธ์ของแถวของข้อมูลทั้งหมด
ภาษา SQL เป็นเครื่องที่ช่วยให้เราสามารถจัดการข้อมูลขนาดใหญ่ได้อย่างมีประสิทธิภาพ และเป็นหนึ่งในภาษาที่นักพัฒนาใช้งานค่อยข้างมาก เนื่องจากความง่ายในการอ่าน Syntax ปัจจุบันมีการใช้ SQL เป็นตัวเชื่อมต่อระหว่าง Server กับผู้ใช้งานผ่าน Service ต่างๆ มากมายให้เลือกใช้ ทำให้คนทั่วไปเองก็สามารถใช้งานได้อย่างเต็มประสิทธิภาพเช่นกัน
อย่างไรก็ตาม SQL นั้นก็ยังสามารถถูกโจมตีจากผู้ไม่ประสงค์ดีได้ด้วยการทำ SQL Injection ในหลายๆรูปแบบ เพื่อความปลอดภัยเราควรให้คนที่มีความรู้ในการจัดการฐานข้อมูลมาช่วยดูแลเรื่องความปลอดภัย รวมถึงการไม่เก็บรหัส หรือ Credential ที่เชื่อมต่อ Database ไว้ในที่สาธารณะ เช่น Github public Project , Google Drive หรือแม้กระทั่งใน Chat ต่างๆก็ตาม
Share your experience with this Blog