SQL (Structured Query Language) คือภาษามาตรฐานสำหรับจัดการฐานข้อมูลเชิงสัมพันธ์ ใช้สร้างตาราง เพิ่มข้อมูล อ่านข้อมูล แก้ไข ลบ และเชื่อมข้อมูลหลายตารางเข้าด้วยกัน
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#fabd2f", "primaryTextColor": "#282828", "primaryBorderColor": "#b57614", "lineColor": "#7c6f64", "secondaryColor": "#83a598", "tertiaryColor": "#b8bb26", "background": "#fbf1c7", "mainBkg": "#ebdbb2", "fontFamily": "Tahoma, sans-serif"}}}%%
flowchart LR
subgraph Era1["ยุคไฟล์ข้อมูล / File Era"]
A["CSV/Text File
ค้นหาและเชื่อมข้อมูลยาก"]
end
subgraph Era2["ยุค Relational DB / SQL Era"]
B["Table + Row
โครงสร้างชัดเจน"]
C["SQL
ภาษาจัดการข้อมูล"]
end
subgraph Era3["ยุค Analytics / Modern SQL"]
D["JOIN + Aggregate
วิเคราะห์ข้อมูล"]
E["Index + Query Plan
เพิ่มประสิทธิภาพ"]
end
A --> B --> C --> D --> E
CREATE TABLE, ALTER TABLE, DROP TABLESELECT, INSERT, UPDATE, DELETEWHERE, ORDER BY, LIMIT| JOIN | ความหมาย | เหมาะกับ |
|---|---|---|
| INNER JOIN | เอาเฉพาะแถวที่ match กัน | รายการที่มีข้อมูลสัมพันธ์ครบ |
| LEFT JOIN | เอาฝั่งซ้ายทั้งหมด | ผู้ใช้ทั้งหมด แม้ยังไม่มี order |
| RIGHT JOIN | เอาฝั่งขวาทั้งหมด | กรณีเน้นตารางขวา |
| FULL OUTER JOIN | เอาทั้งสองฝั่ง | ตรวจข้อมูลที่ไม่ match |
%%{init: {"theme": "base", "themeVariables": {"primaryColor": "#fabd2f", "primaryTextColor": "#282828", "primaryBorderColor": "#b57614", "lineColor": "#7c6f64", "secondaryColor": "#83a598", "tertiaryColor": "#b8bb26", "background": "#fbf1c7", "mainBkg": "#ebdbb2", "fontFamily": "Tahoma, sans-serif"}}}%%
flowchart TD
A["SQL Query
คำสั่ง SQL"] --> B["Parser
ตรวจ syntax"]
B --> C["Planner
วางแผน query"]
C --> D["Executor
อ่าน/เขียนข้อมูล"]
D --> E["Result Set
ผลลัพธ์"]
-- สร้างตาราง users และ posts
CREATE TABLE users (
id SERIAL PRIMARY KEY,
name VARCHAR(100) NOT NULL,
email VARCHAR(150) UNIQUE NOT NULL,
age INT
);
CREATE TABLE posts (
id SERIAL PRIMARY KEY,
user_id INT REFERENCES users(id),
title VARCHAR(200) NOT NULL
);
-- เพิ่มข้อมูล
INSERT INTO users (name, email, age)
VALUES ('Ana', 'ana@example.com', 21);
-- อ่านข้อมูลพร้อมเงื่อนไข
SELECT * FROM users
WHERE age > 18
ORDER BY name
LIMIT 10;
-- แก้ไขข้อมูล
UPDATE users SET name = 'Bob'
WHERE id = 1;
-- JOIN ข้อมูลผู้ใช้กับโพสต์
SELECT users.name, posts.title
FROM users
INNER JOIN posts ON posts.user_id = users.id;
-- สรุปจำนวนโพสต์ต่อผู้ใช้
SELECT users.name, COUNT(posts.id) AS post_count
FROM users
LEFT JOIN posts ON posts.user_id = users.id
GROUP BY users.id, users.name
HAVING COUNT(posts.id) >= 0;
-- ตัวอย่างการใช้งาน:
-- นำคำสั่งไปรันใน PostgreSQL หรือ SQLite ที่ปรับชนิดข้อมูลให้ตรงระบบ
users และ coursesSELECT แบบมี WHERE และ ORDER BYJOIN เพื่อเชื่อมข้อมูลสองตาราง