DataRockie

ฝึกเขียน SQL ใน 10 นาที – ตอนที่ 1

บทความวันนี้ เรามาสอนเขียน basic SQL ใช้เวลาแค่ 10 นาที สำหรับเพื่อนๆที่ยังไม่เคยเรียนด้านนี้มาก่อนเลย และมีความสนใจอยากทำงานด้าน data analysis/ data science

[su_spoiler title=”SQL ย่อมาจากคำว่าอะไร”]SQL ย่อมาจากคำว่า Structured Query (English) Language เป็นภาษาทางการไว้ทำงานกับฐานข้อมูล ใช้กันมาตั้งแต่ปี 1970s[/su_spoiler]

อธิบายสั้นๆ SQL คือภาษาที่เราใช้ทำงานกับ database หลักๆเพื่อดึงข้อมูลออกมาทำ data analysis ถ้าเขียน SQL เก่งๆ ก็ไปอยู่ได้เกือบทุกบริษัทเลย ทำไม? เพราะทุกบริษัทมี database !!

Set Up

SQL db browser
DB Browser สำหรับฝึกเขียน SQL ฟรี

ก่อนจะเริ่มทำตาม tutorial วันนี้ เพื่อนๆต้อง set up โปรแกรม ทำตาม 3 ขั้นตอนด้านล่าง

  1. ติดตั้งโปรแกรมฟรี DB Browser และดาวน์โหลด Chinook database สำหรับ tutorial นี้
  2. เปิดโปรแกรม DB Browser ขึ้นมา ไปที่ File > Open Database > Browse หาไฟล์ chinook.db > Open
  3. เสร็จแล้วไปที่แท๊บ Execute SQL เพื่อเริ่มเขียน query

Basic Rules

กฏเบื้องต้นสำหรับการเขียน SQL query

  • SQL syntax เป็นแบบ case-insensitive แปลว่าตัวพิมพ์เล็กใหญ่ ไม่มีผล (ยกเว้นเวลาเขียน text ในเครื่องหมายคำพูด เช่น ‘USA’ หรือ ‘McDonald’)
  • ตามธรรมเนียมเราจะเขียน SQL clause หรือ keywords ด้วยตัวพิมพ์ใหญ่ เช่น SELECT FROM WHERE ฯลฯ
  • SQL syntax ที่เราจะเขียนด้วยกันวันนี้เรียกว่า query โดยแต่ละ query จะปิดท้ายด้วยเครื่องหมาย ;
  • ใน DB Browser พอเขียน SQL query เสร็จแล้ว กดปุ่ม F5 ในคีย์บอร์ดเพื่อดูผล query ง่ายๆ

tutorial นี้เราจะสอนเขียน SQL query ง่ายๆเพื่อดึงข้อมูลจาก database อย่างที่เราต้องการ


SELECT

2 นาทีแรก – เขียน query เพื่อดึง column(s) ที่เราต้องการจาก table ด้วย SELECT clause

select all columns from table customers
SELECT * FROM customers;
select column firstname, lastname, email, phone from customers
SELECT
firstname,
lastname,
email,
phone
FROM customers;
view raw .sql hosted with ❤ by GitHub

ถ้าต้องการดึงทุกคอลัมน์ออกมาจาก table customers แค่เขียนว่า SELECT * FROM customers;

หรือเราสามารถเขียนชื่อคอลัมน์ที่เราต้องการได้เลย เช่น SELECT firstname, lastname, email, phone FROM customers; แต่ละคอลัมน์จะถูกแยกด้วยเครื่องหมาย comma

ลองทำแบบฝึกหัด 3 ข้อด้านล่างใน DB Browser

  1. เลือกทุกคอลัมน์จาก table tracks
  2. เลือกคอลัมน์ invoiceid, customerid, invoicedate, total จาก table invoices
  3. เลือกคอลัมน์ firstname, lastname, birthdate, email จาก table employees

WHERE

4 นาทีต่อมา – เขียน query เพื่อฟิลเตอร์ row(s) ที่เราต้องการจาก table ด้วย WHERE clause

การเขียน WHERE คือการเขียน condition เงื่อนไขที่เราต้องการฟิลเตอร์ record ใน database

where clause used to filter rows
filter only customers from USA
SELECT *
FROM customers
WHERE country = 'USA';
view raw .sql hosted with ❤ by GitHub

เราสามารถเขียนได้มากกว่าหนึ่งเงื่อนไข ด้วยการใช้ AND และ OR operator ดูตัวอย่างด้านล่าง

filter customers from USA who also live in CA state
SELECT *
FROM customers
WHERE country = 'USA' AND state = 'CA';
filter customers from USA or Brazil
SELECT *
FROM customers
WHERE country = 'USA' OR country = 'Brazil';
view raw .sql hosted with ❤ by GitHub

ก่อนจะไปที่ session สุดท้ายของ tutorial นี้ อ่านวิธีการเขียน WHERE เพิ่มเติมได้ที่นี่ และลองทำแบบฝึกหัดสามข้อด้านล่างใน DB Browser

  1. เพลง trackid = 100 ใน table tracks ชื่อว่าอะไร?
  2. เลือกเฉพาะลูกค้าใน table customers ที่ใช้อีเมล์ @gmail.com (hint – ใช้ LIKE operator)
  3. เลือกเฉพาะลูกค้าใน table customers ที่อยู่ในเมือง Oslo หรือ New York (hint – ใช้ IN operator)

ผ่านไปแล้ว 6 นาที ตอนนี้เพื่อนๆสามารถเขียน SQL query ง่ายๆในการดึงข้อมูล column(s) / row(s) ที่เราต้องการจาก database ด้วย select และ where clauses

JOIN

4 นาทีสุดท้าย – เขียน query เพื่อเชื่อมหลายๆ table(s) เข้าด้วยกัน

พลังอันยิ่งใหญ่ของ SQL อยู่ที่การเขียน query เพื่อดึงข้อมูลจากหลายๆ tables พร้อมกัน ด้วย JOIN clause ลองดู ER diagram ของ chinook.db เพื่อเข้าใจภาพรวมของ database ใน tutorial นี้ให้ดียิ่งขึ้น

query ด้านล่างเรา JOIN ตาราง artists และ albums เข้าด้วยกัน โดยเงื่อนไขในการเขียนเชื่อมสองตารางอยู่ใน ON artists.artistid = albums.artistid จะเชื่อมสองตารางได้ ทั้งสองตารางต้องมี 1 column ที่สามารถ match กันได้พอดี (คล้ายๆการเขียน VLOOKUP ใน Excel)

JOIN two tables: album and artist
SELECT *
FROM artists
JOIN albums
ON artists.artistid = albums.artistid;
view raw .sql hosted with ❤ by GitHub

เราสามารถเขียน JOIN มากกว่าสอง tables และใช้ WHERE เพื่อฟิลเตอร์เฉพาะ records ที่เราต้องการ เช่น ดึงมาเฉพาะเพลงของ Aerosmith

JOIN more than two tables
SELECT
artists.name,
albums.title,
tracks.name
FROM artists
JOIN albums
ON artists.artistid = albums.artistid
JOIN tracks
ON tracks.albumid = albums.albumid
WHERE artists.name = 'Aerosmith';
view raw .sql hosted with ❤ by GitHub

สังเกตว่าเวลาเราเขียนใน select และ on clause เราจะเขียน table_name.column_name เช่น artists.name, albums.title, customers.firstname ฯลฯ เพื่อระบุชื่อคอลัมน์แบบชัดๆว่ามันอยู่ใน table ไหน

Aerosmith
รูปภาพวง Aerosmith

อ่านเพิ่มเติมเรื่องการเขียน JOIN ได้ที่นี่ และลองทำแบบฝึกหัดสามข้อด้านล่างใน DB Browser

  1. เลือกคอลัมน์ genreid, name จาก table genres และคอลัมน์ name จาก table tracks (hint – เขียน SELECT … FROM genres JOIN tracks ON …)
  2. เลือกคอลัมน์ invoiceid, customerid, invoicedate, total จาก table invoices และคอลัมน์ firstname, lastname จาก table customers
  3. ต่อเนื่องมาจากแบบฝึกหัดข้อสอง ลูกค้า invoiceid = 10 มีชื่อจริงว่าอะไร (hint – ใช้ where หลังจาก join ทั้งสอง tables เพื่อเลือก invoiceid ที่เราต้องการ)

Summary

tutorial นี้เราเรียนการเขียน SQL query เบื้องต้นภายในเวลาแค่ 10 นาที สรุปกันอีกที

  • SELECT ... FROM ... – เลือกคอลัมน์ที่เราต้องการจาก table (2 min)
  • WHERE ... – เขียนเงื่อนไขเพื่อเลือก record ที่เราต้องการ (4 min)
  • JOIN ... ON ... – เขียนเชื่อมหลายๆตารางเข้าด้วยกัน (4 min)

ยังมีอะไรให้เรียนอีกเยอะ ถ้าอยากเข้าใจ SQL แบบเต็มๆ? สมัครเรียนกับเราได้ฟรีที่ DataRockie School โรงเรียนออนไลน์ด้าน data science ที่คูลที่สุดในประเทศไทย

7 responses to “ฝึกเขียน SQL ใน 10 นาที – ตอนที่ 1”

  1. […] SQL ตอนที่ 1 – Understand Basic SQL in 10 Minutes […]

    1. SQL คือภาษาที่เราใช้ทำงานกับ database เพื่อดึงข้อมูลออกมาทำรายงานหรือวิเคราะห์

  2. […] อ่านบทความเก่าของเรา – หัดเขียน SQL เป็นใน 10 นาที […]

  3. […] SQL ตอนที่ 1 – Understand Basic SQL in 10 Minutes […]

  4. […] SQL ลองอ่านบทความสอนพื้นฐานของเราได้ที่นี่ ดาวน์โหลดไฟล์ตัวอย่าง […]

  5. […] ภาษาที่ Data Engineer ชำนาญมากที่สุดคือ SQL […]

  6. ข้อ 2กับ 3เขียน codeยังไงค่ะ ขอคำแนะนำด้วยคะ

Leave a Reply