Seven SQL: 7 คำสั่ง SQL พื้นฐานในการทำงานกับ Database สำหรับผู้เริ่มต้น พร้อมตัวอย่างจาก Chinook Database

SQL ย่อมาจาก Structured Query Language เป็นภาษาที่ใช้ทำงานกับ database และถูกพัฒนาโดย IBM ในช่วง ค.ศ. 1970s

แม้ SQL จะมีมานานแล้ว แต่ SQL ยังเป็นทักษะที่สำคัญในยุคนี้ที่ data เป็น resource ที่สำคัญ ทั้งในการใช้ชีวิตและการทำงาน

.

ถ้าเราใช้ SQL เป็น เราจะสามารถ:

  • สร้างและจัดการ database
  • เรียกดูข้อมูลจาก database
  • จัดการข้อมูลบน database
  • วิเคราะห์ข้อมูลบน database

.

ในบทความนี้ เราจะทำความรู้จักกับ 7 คำสั่ง SQL ที่สำคัญ ผ่านตัวอย่างของ Chinook database กัน:

  1. SELECT
  2. WHERE
  3. ORDER BY
  4. GROUP BY
  5. Aggregate functions
  6. JOIN
  7. LIMIT

(พร้อม best practices แนะนำ resources ในการพัฒนา SQL ต่อ)

ถ้าพร้อมแล้วไปเริ่มกันเลย


  1. 💽 Example Database: Chinook
  2. 1️⃣ Statement #1: SELECT
  3. 2️⃣ Statement #2: WHERE
  4. 3️⃣ Statement #3: ORDER BY
  5. 4️⃣ Statement #4: GROUP BY
  6. 5️⃣ Statement #5: Aggregate Functions
  7. 6️⃣ Statement #6: JOIN
  8. 7️⃣ Statement #7: LIMIT
  9. 💪Put It All Together
  10. 🍩 Bonus: SQL Best Practice
  11. ⏭️Next: Sharpen Your SQL
    1. 😺 GitHub
    2. 🔨 Free Tool
    3. 🎒 Free Course
    4. 📖 Free Tutorial
  12. 📃 References

💽 Example Database: Chinook

สำหรับบทความนี้ เราจะใช้ Chinook database ซึ่งเป็น database ที่มักใช้ฝึก SQL เป็นตัวอย่างกัน

Chinook database เป็นข้อมูลร้านขายมีเดียออนไลน์ และแบ่งออกเป็น 11 ชุดข้อมูล (tables):

No.Table NameDescription
1Albumข้อมูลอัลบัม
2Artistข้อมูลศิลปิน
3Customerข้อมูลลูกค้า
4Employeeข้อมูลพนักงาน
5Genreข้อมูลแนวเพลง
6Invoiceข้อมูลใบเสร็จขายของ
7InvoiceLineข้อมูลรายการซื้อในใบเสร็จ
8MediaTypeข้อมูลประเภทมีเดีย
9Playlistข้อมูลเพลย์ลิสต์
10PlaylistTrackข้อมูลสำหรับจับคู่เพลย์ลิสต์กับเพลง
11Trackข้อมูลเพลง

เรามาดูวิธีเขียน 7 คำสั่ง SQL กันด้วย Chinook database กัน


1️⃣ Statement #1: SELECT

Usage:

คำสั่งพื้นฐาน สำหรับเลือกข้อมูลจาก database

.

Syntax:

SELECT columns
FROM table
  • columns ให้ระบุชื่อ columns ที่เราต้องการ (ระบุได้มากกว่า 1 โดยใช้ , คั่น)
  • table ให้ระบุ ชื่อ table ที่มีข้อมูลที่เราต้องการ

.

Example:

เลือกดูชื่อเพลง (Name) และรหัสอัลบัม (AlbumID) จาก Track:

SELECT Name, AlbumId
FROM Track;

ผลลัพธ์:

Note:

เราสามารถเลือกข้อมูลทั้งหมดจาก table ได้ โดยใช้ * เช่น:

SELECT *
FROM Tracks;

โดยผลลัพธ์จะแสดงข้อมูลทุก columns และ rows ใน Track

นอกจากนี้ เราสามารถตั้งชื่อ column ได้ โดยใช้ AS เช่น:

SELECT Name AS Song, AlbumId AS Album
FROM Track;

ผลลัพธ์:

จะเห็นว่า ข้อมูลจะเหมือนเดิม แต่ชื่อ column จะเปลี่ยนไป


2️⃣ Statement #2: WHERE

Usage:

ใช้กรองข้อมูลที่เรียกมาแสดง

.

Syntax:

WHERE conditions
  • conditions ให้ระบุเงื่อนไขในการกรอง

.

Example:

หาเพลงที่มีราคา (UnitPrice) สูงกว่า $0.99:

SELECT Name, UnitPrice
FROM Track
WHERE UnitPrice > 0.99;

ผลลัพธ์:

.

WHERE operators:

ในการกรอง เราสามารถใช้ operators เหล่านี้ในการกำหนดเงื่อนไขได้:

OperatorMeaningExample
=เท่ากับUnitPrice = 0.99
<> หรือ !=ไม่เท่ากับUnitPrice <> 0.99
>มากกว่าUnitPrice > 0.99
<น้อยกว่าUnitPrice < 0.99
>=มากกว่า/เท่ากับUnitPrice >= 0.99
<=น้อยกว่า/เท่ากับUnitPrice <= 0.99
BETWEENกรองข้อมูลตามช่วงUnitPrice BETWEEN 0.99 and 1.99
INกรองข้อมูลตามเซตข้อมูลUnitPrice IN (0.99, 1.99, 2.99)

นอกจากนี้ เรายังสามารถใช้ LIKE กับ WHERE เพื่อกรอง text ได้อีกด้วย

โดย LIKE ใช้คู่กับ 2 อย่าง:

OperatorMeaning
_แทน 1 characters
%แทน 0, 1, หรือมากกว่า 1 characters

เช่น:

SELECT FirstName, LastName
FROM Customer
WHERE FirstName LIKE '_ohn';

ผลลัพธ์:

ผลลัพธ์: เราจะได้ข้อมูลทั้งหมดที่มี FirstName ขึ้นต้นด้วยตัวอักษรใด ๆ 1 ตัว + “ohn”

เช่น:

  • John
  • Gohn
  • Wohn

อย่างในตัวอย่าง เราจะได้ “John Gordon” ขึ้นมา:

หรือ:

SELECT FirstName, LastName
FROM Customer
WHERE FirstName LIKE 'J%';

ผลลัพธ์:

เราจะได้ข้อมูลที่ FirstName เริ่มด้วย J และตามด้วยตัวอักษรใด ๆ + กี่ตัวก็ได้

เช่น:

  • John
  • Jo
  • Jane
  • James

อย่างในตัวอย่าง เราจะได้ชื่อเหล่านี้มา:


3️⃣ Statement #3: ORDER BY

Usage:

จัดลำดับข้อมูล

.

Syntax:

ORDER BY columns
  • columns ให้ระบุชื่อ column ที่ใช้ในการจัดลำดับ (ใส่ได้มากกว่า 1)

.

Example:

ดึงรายชื่อลูกค้า ให้แสดงตามชื่อจริง (FirstName):

SELECT FirstName, LastName
FROM Customer
ORDER BY FirstName;

ผลลัพธ์:

Note:

Default ของ ORDER BY จะเป็นการเรียงแบบ ascending (A-Z)

ถ้าเราอยากเรียงแบบ descending (Z-A) ให้ใส่ DESC ต่อท้าย เช่น:

SELECT FirstName, LastName
FROM Customer
ORDER BY FirstName DESC;

ผลลัพธ์:


4️⃣ Statement #4: GROUP BY

Usage:

จับกลุ่มข้อมูล

.

Syntax:

GROUP BY columns
  • columns ระบุชื่อ column ที่ใช้จับกลุ่ม (ระบุได้มากกว่า 1)

.

Example:

นับจำนวนเพลงในแต่ละอัลบัม:

SELECT AlbumId, COUNT(*) AS TrackCount
FROM Track
GROUP BY AlbumId;

ผลลัพธ์:

จากตัวอย่าง เราจะเห็นว่า album ที่ 1 มี 10 เพลง, album ที่ 2 มี 1 เพลง, ไปเรื่อย ๆ


5️⃣ Statement #5: Aggregate Functions

Usage:

สรุป (aggregate) ข้อมูล

.

Syntax:

SELECT agg(column)
  • agg ให้ระบุ aggregate function ที่ต้องการใช้งาน
  • column ให้ระบุชื่อ column ที่เป็น input ของ aggregate function

.

Common aggregate functions:

ใน SQL, เรามี 5 aggregate functions ที่มักใช้บ่อย ได้แก่:

No.AggregateDescription
1COUNT()นับจำนวนข้อมูล
2SUM()หาผลรวม (sum)
3AVG()หาค่าเฉลี่ย (mean)
4MIN()หาค่าต่ำสุด
5MAX()หาค่าสูงสุด

.

Example:

เราต้องการรู้ข้อมูลการใช้จ่ายของลูกค้าแต่ละคน

โดยเราต้องการรู้:

  • จำนวนครั้งในการซื้อ (count)
  • เงินที่เคยใช้จ่ายทั้งหมด (sum)
  • ค่าใช้จ่ายโดยเฉลี่ย (mean)
SELECT CustomerId, COUNT(*), SUM(Total) AS TotalSpent, AVG(Total) AS AverageSpent
FROM Invoice
GROUP BY CustomerId;

ผลลัพธ์:

Note:

เพื่อให้ข้อมูลอ่านง่าย เราสามารถใช้ ROUND() เพื่อกำหนดจุดทศนิยมได้ เช่น:

SELECT CustomerId, COUNT(*), ROUND(SUM(Total), 2) AS TotalSpent, ROUND(AVG(Total), 2) AS AverageSpent
FROM Invoice
GROUP BY CustomerId;

ผลลัพธ์:

สังเกตว่า ข้อมูลใน TotalSpent และ AverageSpent จะแสดงทศนิยมแค่ 2 ตำแหน่ง


6️⃣ Statement #6: JOIN

Usage:

เชื่อม tables เข้าด้วยกัน

.

Syntax:

SELECT columns
FROM table1
JOIN table2
ON table1.key1 on table2.key2
  • table1, table2 คือ tables ที่เราต้องการเชื่อมกัน
  • key1, key2 คือ column ที่ใช้ระบุว่า ข้อมูลไหนจะเชื่อมกับข้อมูลไหน (primary key, foreign key)

.

Example:

เราอยากรู้ว่าเพลงไหนอยู่ในอัลบัลอะไร ให้เชื่อม Track เข้ากับ Album เพื่อหาคำตอบ:

SELECT Track.Name AS TrackName, Album.Title AS AlbumName
FROM Track
JOIN Album
ON Track.AlbumId = Album.AlbumId;

ผลลัพธ์:


7️⃣ Statement #7: LIMIT

Usage:

จำกัดจำนวนข้อมูลที่จะแสดง

.

Syntax:

LIMIT x
  • x ให้ใส่จำนวนที่ต้องการ

.

Example:

SELECT FirstName, LastName
FROM Customer
LIMIT 10;

ผลลัพธ์:


💪Put It All Together

เราสามารถใช้คำสั่ง SQL ทั้งหมดร่วมกัน เพื่อตอบโจทย์ data ที่ซับซ้อนได้

ตัวอย่างเช่น หา 5 อัลบัมที่ขายดีที่สุด ซึ่งมีเพลงราคาตั้งแต่ $0.99 ขึ้นไป:

SELECT Album.Title AS AlbumName, SUM(Track.UnitPrice) AS TotalRevenue
FROM Album
JOIN Track
ON Album.AlbumId = Track.AlbumId
WHERE Track.UnitPrice > 0.99
GROUP BY Album.AlbumId
ORDER BY TotalRevenue DESC
LIMIT 5;
  • เราใช้ SELECT เพื่อเลือกชื่ออัลบัมและหาผลรวมยอดขาย (SUM)
  • เชื่อม tables (JOIN) เพื่อดึงข้อมูลราคาเพลง จาก Track
  • กรองข้อมูลเฉพาะเพลงที่มีราคาตั้งแต่ $0.99 (WHERE)
  • จับกลุ่มข้อมูล (GROUP BY) เพื่อหาผลรวมของแต่ละอัลบัม
  • จัดเรียงข้อมูล (ORDER BY) ตามผลรวมยอดขาย จากมากไปน้อย (DESC)
  • เลือกแสดงข้อมูล 5 อันดับแรก (LIMIT)

ผลลัพธ์:


🍩 Bonus: SQL Best Practice

เพื่อเป็นความรู้เพิ่มเติม มาดู 3 best practices ในการเขียน SQL กัน:

  1. ใช้ UPPERCASE ในเขียนคำสั่ง เช่น:
    1. ✅ Do: SELECT, WHERE, GROUP BY
    2. ❌ Don’t: select, where, group by
  2. ใช้ snake_case ในการตั้งชื่อ tables และ columns เช่น:
    1. user_id
    2. order_date
    3. duration_ms
  3. ใช้ indentation (เคาะย่อหน้า) และแบ่งบรรทัด เพื่อความอ่านง่าย เช่น:
-- เขียนแบบนี้:

SELECT
	FirstName,
	LastName
FROM Customer
ORDER BY LastName;

-- แทนแบบนี้:
SELECT FirstName, LastName
FROM Customer
ORDER BY LastName;

Note:

  • จะเห็นว่า ตัวอย่างในบทความ ยังไม่ได้ทำตาม ข้อ 2 และ 3 😅
  • อ่าน best practices อื่น ๆ เพิ่มเติมได้ที่ SQL Style Guide

⏭️Next: Sharpen Your SQL

.

😺 GitHub

ดู database และตัวอย่าง SQL ทั้งหมดในบทความ ได้ที่ GitHub

.

🔨 Free Tool

สำหรับใครที่อยากเริ่มฝึก SQL สามารถใช้ SQL ได้ฟรี ผ่าน https://sqliteonline.com/

.

🎒 Free Course

สำหรับคนที่สนใจเรียน SQL แนะนำคอร์สเรียน SQL Crash Course จาก DataRockie

  • ง่าย
  • ฟรี
  • ใช้เวลาเรียนเพียง 30 นาที
  • ได้ certificate หลังเรียนจบ

.

📖 Free Tutorial

สำหรับใครที่อยากศึกษาคำสั่ง SQL นอกเหนือจากนี้ สามารถอ่านเพิ่มได้ที่ SQL Tutorial จาก W3Schools

  • ฟรี
  • เข้าใจง่าย

📃 References

Comments

Leave a comment