On this page
SQL เจาะลึก
ภาษาสำหรับคุยกับฐานข้อมูล — สร้าง ดึง แก้ ลบ และรวมข้อมูลข้ามตารางด้วย JOIN
SQL (Structured Query Language) คือภาษาที่ใช้สั่งงานฐานข้อมูล relational ทุกตัว หัวข้อนี้ครอบคลุมตั้งแต่คำสั่งพื้นฐานจนถึง JOIN และ GROUP BY ที่ใช้บ่อยในงานจริง
CRUD พื้นฐาน
-- สร้างตาราง
CREATE TABLE users (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
age INTEGER
);
-- เพิ่มข้อมูล
INSERT INTO users (name, age) VALUES ('Aph', 25);
-- ดึงข้อมูล
SELECT * FROM users;
SELECT name, age FROM users WHERE age >= 18;
-- แก้ไข
UPDATE users SET age = 26 WHERE name = 'Aph';
-- ลบ
DELETE FROM users WHERE id = 1;DELETE FROM users; (ไม่มี WHERE) = ลบทุกแถวในตาราง! เช่นเดียวกับ UPDATE ที่ไม่มี WHERE จะแก้ทุกแถว — ตรวจ WHERE ให้ดีก่อนรันเสมอ โดยเฉพาะบนฐานข้อมูลจริง
WHERE, ORDER BY, LIMIT
SELECT * FROM users
WHERE age >= 18 AND name LIKE 'A%' -- เงื่อนไข (LIKE = คล้าย)
ORDER BY age DESC -- เรียงจากมากไปน้อย
LIMIT 10; -- เอาแค่ 10 แถวJOIN — รวมข้อมูลข้ามตาราง
JOIN เชื่อมตารางเข้าด้วยกันผ่าน key เช่น เอาโพสต์มาแสดงพร้อมชื่อเจ้าของ INNER JOIN เอาเฉพาะที่จับคู่ได้, LEFT JOIN เอาฝั่งซ้ายทั้งหมด
-- เอาโพสต์พร้อมชื่อผู้เขียน
SELECT posts.title, users.name
FROM posts
INNER JOIN users ON posts.user_id = users.id;
-- LEFT JOIN: เอา users ทุกคน แม้ไม่มีโพสต์ (โพสต์เป็น NULL)
SELECT users.name, posts.title
FROM users
LEFT JOIN posts ON users.id = posts.user_id;GROUP BY + aggregate
จัดกลุ่มแล้วสรุปด้วยฟังก์ชันรวม: COUNT, SUM, AVG, MAX, MIN
-- นับจำนวนโพสต์ของแต่ละผู้ใช้
SELECT user_id, COUNT(*) AS post_count
FROM posts
GROUP BY user_id;
-- อายุเฉลี่ยแยกตามเมือง (เฉพาะกลุ่มที่เกิน 1 คน)
SELECT city, AVG(age) AS avg_age
FROM users
GROUP BY city
HAVING COUNT(*) > 1; -- HAVING = WHERE สำหรับหลัง GROUP BYสรุปหัวข้อนี้
- CRUD: CREATE/INSERT/SELECT/UPDATE/DELETE — DELETE/UPDATE ต้องมี WHERE
- WHERE กรอง, ORDER BY เรียง, LIMIT จำกัดจำนวน
- JOIN รวมตารางผ่าน key: INNER (จับคู่ได้) / LEFT (ซ้ายทั้งหมด)
- GROUP BY + COUNT/SUM/AVG สรุปตามกลุ่ม; HAVING กรองหลังกลุ่ม
1) เขียน SELECT ดึงผู้ใช้อายุ >= 20 เรียงตามชื่อ 2) JOIN posts กับ users เอา title + ชื่อผู้เขียน 3) นับจำนวนโพสต์ต่อผู้ใช้ด้วย GROUP BY 4) หาเมืองที่มีผู้ใช้มากกว่า 2 คน (HAVING)