Basic SQL Part 1 - เริ่มต้นกับ SQL ด้วยวิธีธรรมดา ไม่ยาก ไม่ง่าย

เริ่มต้นกับ SQL ด้วยวิธีธรรมดา ไม่ยากแล้วก็ไม่ง่าย

ผมเขียนเกี่ยวกับ SQL ไว้ 6 ตอน คุณสามารถกด Link ด้านล่างเพื่ออ่านที่เกี่ยวกับ SQL ตอนต่างๆได้เลย

ในยุคสมัยที่งานเกี่ยวกับ Data กำลังดังแบบหยุดไม่อยู่ ใครๆก็อยากมาทำงานสาย Data ถ้าจะก้าวย่างเข้ามาสายนี้ก็คงจะเคยได้ยินคำว่า SQL (อ่านได้หลายอย่าง เอส-คิว-แอล , ซี-ควล , ซี-เควล ใครจะอ่านแบบไหนก็ตามใจเลยครับ การเรียกมันแล้วแต่ถิ่นที่นั้นจะเรียกแบบไหน ไม่มีถูกไม่มีผิด) แล้ว SQL คืออะไร จริงๆมันย่อมาจาก Structured Query Language ซึ่งมีอธิบายไว้มากมายซึ่งน่าจะอธิบายดีกว่าผมสามารถไปอ่านได้ WIKI MEDIUM ของคุณ Todspol Wonhchomphu

แต่ถ้าให้ผมอธิบายมันก็คือคำสั่งที่ให้ไปเอาข้อมูลออกมาจากที่เก็บ ซึ่งที่เก็บนั้นเขาเรียกกันว่า Database (บางคนเรียก Database บางคนเรียกถัง (เพราะมาจากรูปที่ใช้วาด Diagram มันเหมือนถัง) บางคนเรียก ฐานข้อมูล (ภาษาไทย) ) ครับ

แต่ก่อนจะอธิบาย SQL จนยืดยาวเรามาอธิบายเรื่อง Database กันก่อน

Database คือที่เก็บข้อมูล

Database คือที่เก็บข้อมูลครับ พอเราจะเก็บข้อมูลเราจะมาเก็บที่ Database คราวนี้ก็จะมีคำถามว่าเก็บยังไงใช่ไหมครับ ซึ่ง Database ก็มีวิธีเก็บข้อมูลหลากหลายรูปแบบตามแต่ละชนิดของ Database เลย โดย Database ที่เราจะใช้กับภาษา SQL นั้นจะถูกเก็บและแสดงข้อมูลในลักษณะตาราง (จริงๆผมควรใช้คำว่า Interface ที่ Database แสดงให้เราเห็นเวลาดึง หรือ เก็บข้อมูล เป็นแบบตาราง แต่การ Implement การเก็บข้อมูลจริงๆนั้น อาจจะไม่เป็นตาราง แต่เดี๋ยวจะงง และผมก็เชื่อว่าคนที่อ่านในวงเล็บนี่น่าจะงงแล้ว ) ตัวอย่างเช่น ข้อมูลประธานาธิบดีสหรัฐ

ข้อมูลประธานาธิบดีสหรัฐ

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

ดังนั้นถ้าเราอยากตอบคำถามด้านบนเราก็แค่ออกคำสั่งว่า “แสดงข้อมูลของประธานาธิบดีที่มีอายุตอนตายมากกว่า 60” ตัว Database ก็จะไปเอาข้อมูลออกมาให้ คำสั่งนี่แหละคือ SQL ไง ง่ายไหม SQL ก็คือคำสั่งที่สั่งให้ Database ไปเอาข้อมูลที่ต้องการออกมาให้

ลองสร้าง Database กัน

ตอนผมหัดเล่น SQL ตอนเรียนปี 3 นั้น พบความยุ่งยากเกี่ยวกับการที่ต้องมานั่ง Install ตัว Database server ที่ใช้เก็บข้อมูล เพื่อนผมบางคนลงแล้ว Run ไม่ได้ ถอดใจไม่ลองเล่นเลยก็มี แต่โชคดีตอนนี้เราสามารถสร้าง Database แล้วใช้งานแบบ Online โดยไม่ต้องลงโปรแกรมได้แล้ว โดยเราจะใช้งานผ่าน Web : https://sqliteonline.com/

จากนั้น copy คำสั่งด้านล่างนี้เพื่อเก็บข้อมูลเกี่ยวกับประธานาธิบดีสหรัฐลงใน Database

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
CREATE TABLE IF NOT EXISTS PRESIDENT (
`PRES_NAME` VARCHAR(128) ,
`BIRTH_YR` INT,
`YRS_SERV` INT,
`DEATH_AGE` INT ,
`PARTY` VARCHAR(128) ,
`STATE_BORN` VARCHAR(128)
);
INSERT INTO PRESIDENT VALUES
('Washington G',1732,7,'67','Federalist','Virginia'),
('Adams J',1735,4,'90','Federalist','Massachusetts'),
('Jefferson T',1743,8,'83','Demo-Rep','Virginia'),
('Madison J',1751,8,'85','Demo-Rep','Virginia'),
('Monroe J',1758,8,'73','Demo-Rep','Virginia'),
('Adams J Q',1767,4,'80','Demo-Rep','Massachusetts'),
('Jackson A',1767,8,'78','Democratic','South Carolina'),
('Van Buren M',1782,4,'79','Democratic','New York'),
('Harrison W H',1773,0,'68','Whig','Virginia'),
('Tyler J',1790,3,'71','Whig','Virginia'),
('Polk J K',1795,4,'53','Democratic','North Carolina'),
('Taylor Z',1784,1,'65','Whig','Virginia'),
('Fillmore M',1800,2,'74','Whig','New York'),
('Pierce F',1804,4,'64','Democratic','New Hampshire'),
('Buchanan J',1791,4,'77','Democratic','Pennsylvania'),
('Lincoln A',1809,4,'56','Republican','Kentucky'),
('Johnson A',1808,3,'66','Democratic','North Carolina'),
('Grant U S',1822,8,'63','Republican','Ohio'),
('Hayes R B',1822,4,'70','Republican','Ohio'),
('Garfield J A',1831,0,'49','Republican','Ohio'),
('Arthur C A',1830,3,'56','Republican','Vermont'),
('Cleveland G',1837,8,'71','Democratic','New Jersey'),
('Harrison B',1833,4,'67','Republican','Ohio'),
('McKinley W',1843,4,'58','Republican','Ohio'),
('Roosevelt T',1858,7,'60','Republican','New York'),
('Taft W H',1857,4,'72','Republican','Ohio'),
('Wilson W',1856,8,'67','Democratic','Virginia'),
('Harding W G',1865,2,'57','Republican','Ohio'),
('Coolidge C',1872,5,'60','Republican','Vermont'),
('Hoover H C',1874,4,'90','Republican','Iowa'),
('Roosevelt F D',1882,12,'63','Democratic','New York'),
('Truman H S',1884,7,'88','Democratic','Missouri'),
('Eisenhower D D',1890,8,'79','Republican','Texas'),
('Kennedy J F',1917,2,'46','Democratic','Massachusetts'),
('Johnson L B',1908,5,'65','Democratic','Texas'),
('Nixon R M',1913,5,NULL,'Republican','California'),
('Ford G R',1913,2,NULL,'Republican','Nebraska'),
('Carter J E',1924,4,NULL,'Democratic','Georgia'),
('Reagan R',1911,3,NULL,'Republican','Illinois');

พอกด Run เสร็จจะได้ผลลัพธ์ดังภาพด้านล่าง ซึ่งจะเห็นว่ามีตาราง PRESIDENT โผล่ขึ้นมาแล้ว

ตัว Database แบบนี้นั้นจะเก็บข้อมูลเป็นตาราง โดยสามารถเก็บได้หลายตาราง โดยแต่ละตารางเป็นข้อมูลที่เกี่ยวข้องกันหรือไม่เกี่ยวข้องกันก็ได้ แต่ละตารางสามารถมี Column ที่จะเก็บข้อมูลไม่เหมือนกันก็ได้ เช่น จากตัวอย่าง

ตาราง PRESIDENT

เก็บข้อมูล 5 Column คือ

  • PRES_NAME : ชื่อประธานาธิบดี
  • BIRTH_YR : เกิดปี ค.ศ. อะไร
  • YRS_SERV : จำนวนปีที่ดำรงตำแหน่ง
  • DEATH_AGE : อายุรวมกี่ปีตอนเสียชีวิต
  • STATE_BORN : เกิดที่รัฐไหน

ตาราง DEMO

เก็บข้อมูล 3 Column คือ

  • ID
  • NAME
  • HINT

จะเห็นว่าทั้ง 2 ตารางสามารถเก็บข้อมูลได้ไม่เหมือนกัน ดังนั้นถ้าเราอยากเก็บข้อมูลอะไรใหม่ๆที่อาจจะเกี่ยวหรือไม่เกี่ยวกับตารางที่มีอยู่แล้ว ก็แค่สร้างตารางใหม่ขึ้นมาเก็บข้อมูล แต่ในเรื่องที่เราจะเรียนรู้กันนี้ผมจะเน้นไปที่เรื่องเกี่ยวกับ SELECT เป็นหลัก

ลองคำสั่ง Basic SQL กัน

เรามาลองคำสั่งที่ Basic ที่สุดของภาษา SQL นั่นคือคำสั่ง SELCT * FROM โดยทำการลอง Copy code ข้างล่างไปใส่ในช่อง Query จากนั้นทำการกด Run ตามภาพ

1
2
SELECT *
FROM PRESIDENT

ซึ่งผลลัพธ์ที่ได้คือข้อมูลทั้งหมดในตาราง PRESIDENT ออกมา คราวนี้เราลองเปลี่ยนคำสั่งเป็นคำสั่งด้านล่าง แล้วลอง Run ดู

1
2
SELECT PRES_NAME, BIRTH_YR, DEATH_AGE
FROM PRESIDENT

จะเห็นว่าผลลัพธ์ที่ออกมาจะเหลือแค่ 3 Column คือ PRES_NAME, BIRTH_YR, DEATH_AGE ซึ่งพอลองมาถึงตรงนี้ก็คงจะพอเข้าใจ Key word SELECT กับ FROM แล้ว

อธิบาย

1
2
3
4
5
6
7
8
SELECT PRES_NAME, BIRTH_YR, DEATH_AGE 
-- SELECT เป็นการบอกว่าจะแสดงข้อมูล Column อะไรบ้าง
-- โดยในตัวอย่างคือแสดง Column : PRES_NAME, BIRTH_YR, DEATH_AGE
-- ถ้าเป็น * แปลว่าเอาทุก Column

FROM PRESIDENT
-- FROM เป็นการออกบอกว่าไปเอาข้อมูลจากตารางอะไร
-- ในตัวอย่างนี้คือเอาข้อมูลจากตาราง PRESIDENT

ลองเล่นดูเองบ้าง

คราวนี้เพื่อความเข้าใจลองเล่นคำสั่ง SQL กันเองดูบ้างเช่น เปลี่ยน FROM เป็นค่าอื่น เปลี่ยนค่า SELECT เป็นค่าอื่น แล้วดูว่าจะเกิดอะไรขึ้น

1
2
3
4
5
6
7
8
9
10
11
12
-- SQL 1
SELECT *
FROM demo


-- SQL 2
SELECT PRES_NAME, BIRTH_YR, DEATH_AGE
FROM demo

-- SQL 3
SELECT ID
FROM PRESIDENT

สรุป

สำหรับตอนนี้เราได้รู้จักว่า SQL คืออะไร Database ที่จะใช้กับ SQL เก็บข้อมูลในลักษณะแบบไหน แล้วก็ลองสร้างและใช้ Database ผ่านเว็บ https://sqliteonline.com/ และก็ได้ทดลองใช้คำสั่ง SQL พื้นฐานกัน ในส่วนตอนถัดไปเราจะมาลงลึกเกี่ยวกับ SQL กันต่อ ส่วนตอนนี้ขอจบเท่านี้ครับ

เพลงประกอบการเขียน Blog

เพลง my moon ของ น้องแจม และ น้องข้าวเจ้า