กลับไปหน้าบทความ

🗄️ SQL (สอนแบบครบระดับ)

SQL คือภาษาสำหรับจัดการฐานข้อมูลเชิงสัมพันธ์ ครอบคลุมการอ่าน/เขียน/วิเคราะห์ข้อมูลด้วยคำสั่งมาตรฐาน

📋 เนื้อหา (พื้นฐาน)

  • 🧭 SQL คืออะไร
  • 🔎 SELECT พื้นฐาน
  • 🧹 WHERE + ORDER BY
  • ➕ INSERT/UPDATE/DELETE
  • 🏁 สรุป
  • 📝 แบบฝึกหัด

🧭 SQL คืออะไร

ทำไมต้องเรียน SQL?

SQL (Structured Query Language) เป็นภาษามาตรฐานสำหรับจัดการฐานข้อมูลเชิงสัมพันธ์

  • • Universal: ใช้ได้กับทุก RDBMS
  • • Powerful: ดึง/แก้ไข/วิเคราะห์ข้อมูล
  • • Essential: พื้นฐานสำหรับ Backend/Data

ฐานข้อมูลยอดนิยม

MySQL

Open source, เว็บทั่วไป

PostgreSQL

Advanced features, JSON

SQL Server

Enterprise, .NET

SQLite

Embedded, mobile

โครงสร้างตาราง

-- สร้างตาราง
CREATE TABLE users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(100) NOT NULL,
    email VARCHAR(255) UNIQUE,
    age INT,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

🔎 SELECT พื้นฐาน

ดึงข้อมูล

-- ดึงทุก column
SELECT * FROM users;

-- ดึงเฉพาะ column ที่ต้องการ
SELECT id, name, email FROM users;

-- ตั้งชื่อ alias
SELECT name AS user_name, email AS user_email
FROM users;

-- DISTINCT - ค่าไม่ซ้ำ
SELECT DISTINCT status FROM orders;

-- LIMIT - จำกัดจำนวน
SELECT * FROM users LIMIT 10;
SELECT * FROM users LIMIT 10 OFFSET 20;  -- skip 20

🧹 WHERE + ORDER BY

WHERE - กรองข้อมูล

-- เปรียบเทียบ
SELECT * FROM users WHERE age >= 18;
SELECT * FROM users WHERE status = 'active';

-- AND / OR
SELECT * FROM products
WHERE price > 100 AND category = 'electronics';

SELECT * FROM users
WHERE age < 18 OR status = 'inactive';

-- BETWEEN
SELECT * FROM products
WHERE price BETWEEN 100 AND 500;

-- IN
SELECT * FROM users
WHERE country IN ('TH', 'JP', 'KR');

-- LIKE (pattern matching)
SELECT * FROM users WHERE name LIKE 'Som%';     -- ขึ้นต้นด้วย Som
SELECT * FROM users WHERE email LIKE '%@gmail.com';  -- ลงท้ายด้วย

-- NULL
SELECT * FROM users WHERE phone IS NULL;
SELECT * FROM users WHERE phone IS NOT NULL;

ORDER BY - เรียงลำดับ

-- เรียงจากน้อยไปมาก (default)
SELECT * FROM users ORDER BY name ASC;

-- เรียงจากมากไปน้อย
SELECT * FROM users ORDER BY created_at DESC;

-- หลาย column
SELECT * FROM products
ORDER BY category ASC, price DESC;

➕ INSERT/UPDATE/DELETE

INSERT - เพิ่มข้อมูล

-- เพิ่ม 1 row
INSERT INTO users (name, email, age)
VALUES ('Somchai', '[email protected]', 20);

-- เพิ่มหลาย rows
INSERT INTO users (name, email, age) VALUES
    ('John', '[email protected]', 25),
    ('Jane', '[email protected]', 22),
    ('Bob', '[email protected]', 30);

UPDATE - แก้ไขข้อมูล

-- แก้ไขตาม condition
UPDATE users
SET age = 21, status = 'active'
WHERE id = 1;

-- ⚠️ ระวัง! ถ้าไม่มี WHERE จะแก้ทุก row
UPDATE products SET price = price * 1.1;  -- ขึ้นราคา 10%

DELETE - ลบข้อมูล

-- ลบตาม condition
DELETE FROM users WHERE id = 1;

-- ลบหลาย rows
DELETE FROM users WHERE status = 'inactive';

-- ⚠️ ระวัง! ลบทุก row
DELETE FROM logs WHERE created_at < '2024-01-01';

🏁 สรุป

  • ✅ SELECT ดึงข้อมูล, * หรือเลือก columns
  • ✅ WHERE กรอง, ORDER BY เรียง
  • ✅ LIKE สำหรับ pattern matching
  • ✅ INSERT/UPDATE/DELETE แก้ไขข้อมูล
  • ✅ ระวัง UPDATE/DELETE ที่ไม่มี WHERE

📝 แบบฝึกหัด

SELECT

  1. ดึงชื่อและอีเมลของ users ทั้งหมด
  2. หา products ราคา 100-500 เรียงตามราคา

Modify

  1. เพิ่ม user ใหม่ 3 คน
  2. อัปเดตราคา product id=5
  3. ลบข้อมูลที่ status=inactive