รายวิชานี้สอนการจัดการข้อมูลอย่างเป็นระบบ ผ่าน ฐานข้อมูลเชิงสัมพันธ์ (Relational Database) และภาษา SQL ซึ่งเป็นพื้นฐานสำคัญของทุกระบบงานในยุคดิจิทัล
แอปพลิเคชันทุกตัวต้องจัดเก็บข้อมูล:
- Facebook: โพสต์, เพื่อน, รูปภาพหมื่นล้านรายการ
- ธนาคาร: บัญชี, ธุรกรรม, ยอดเงิน
- E-Commerce: สินค้า, คำสั่งซื้อ, ลูกค้า
ถ้าไม่มีฐานข้อมูล:
- ❌ ข้อมูลสูญหาย (File หาย)
- ❌ ข้อมูลซ้ำซ้อน (Copy ไฟล์หลายที่)
- ❌ ข้อมูลไม่สอดคล้อง (แก้ที่หนึ่ง อีกที่ไม่เปลี่ยน)
ใช้ฐานข้อมูล:
- ✅ ข้อมูลปลอดภัย (Backup, Recovery)
- ✅ ข้อมูลไม่ซ้ำ (Normalization)
- ✅ ค้นหาเร็ว (Indexing)
- ✅ หลายคนใช้พร้อมกันได้ (Concurrency)
- Database Concepts - ER Diagram, Normalization
- SQL Basics - SELECT, INSERT, UPDATE, DELETE
- Table Design - Primary Key, Foreign Key
- Relationships - One-to-Many, Many-to-Many
- Joins - INNER JOIN, LEFT JOIN
- Advanced SQL - Subqueries, Aggregations, Views
แผนภาพแสดงความสัมพันธ์ระหว่างตาราง
ตัวอย่าง: ระบบห้องสมุด
[Book] ----< [Borrow] >---- [Member]
| |
ISBN, Title MemberID, Name
- 1NF: ไม่มีข้อมูลซ้อนกันในช่องเดียว
- 2NF: แยกข้อมูลที่ไม่ขึ้นกับ Primary Key ออก
- 3NF: แยกข้อมูลที่ขึ้นกับฟิลด์อื่นที่ไม่ใช่ Key
-- Primary Key: unique identifier
CREATE TABLE students (
student_id INT PRIMARY KEY,
name VARCHAR(100)
);
-- Foreign Key: reference ไปตารางอื่น
CREATE TABLE enrollments (
id INT PRIMARY KEY,
student_id INT,
FOREIGN KEY (student_id) REFERENCES students(student_id)
);สร้างและแก้ไขโครงสร้าง
-- สร้างตาราง
CREATE TABLE products (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(100),
price DECIMAL(10,2),
stock INT
);
-- แก้ไขตาราง
ALTER TABLE products ADD COLUMN category VARCHAR(50);
-- ลบตาราง
DROP TABLE products;จัดการข้อมูล (CRUD)
-- INSERT (Create)
INSERT INTO products (name, price, stock)
VALUES ('Laptop', 25000, 10);
-- SELECT (Read)
SELECT * FROM products WHERE price > 10000;
-- UPDATE
UPDATE products SET price = 24000 WHERE id = 1;
-- DELETE
DELETE FROM products WHERE stock = 0;-- เงื่อนไขเดียว
SELECT * FROM products WHERE price > 10000;
-- หลายเงื่อนไข (AND)
SELECT * FROM products WHERE price > 5000 AND stock > 0;
-- OR
SELECT * FROM products WHERE category = 'Electronics' OR category = 'Computers';
-- LIKE (ค้นหาแบบคล้ายๆ)
SELECT * FROM products WHERE name LIKE '%Laptop%';
-- IN
SELECT * FROM products WHERE category IN ('Electronics', 'Computers');
-- BETWEEN
SELECT * FROM products WHERE price BETWEEN 10000 AND 50000;SELECT orders.id, customers.name, orders.total
FROM orders
INNER JOIN customers ON orders.customer_id = customers.id;SELECT customers.name, orders.total
FROM customers
LEFT JOIN orders ON customers.id = orders.customer_id;
-- ลูกค้าที่ไม่เคยสั่งจะแสดง total เป็น NULL-- นับจำนวน
SELECT COUNT(*) FROM products;
-- หาผลรวม
SELECT SUM(price) FROM products;
-- หาค่าเฉลี่ย
SELECT AVG(price) FROM products;
-- หาค่าสูงสุด/ต่ำสุด
SELECT MAX(price), MIN(price) FROM products;
-- จัดกลุ่ม (GROUP BY)
SELECT category, COUNT(*), AVG(price)
FROM products
GROUP BY category;
-- กรองกลุ่ม (HAVING)
SELECT category, COUNT(*) as count
FROM products
GROUP BY category
HAVING count > 5;SELECT name FROM products
WHERE price > (SELECT AVG(price) FROM products);CREATE VIEW expensive_products AS
SELECT * FROM products WHERE price > 20000;
SELECT * FROM expensive_products;Database-System-1/
├── README.md ← ไฟล์นี้
└── lab/ ← Lab SQL Scripts
├── [Lab 1-12] → SQL Queries, Database Design
└── [Schema Files] → .sql files
วิชานี้มี Lab SQL Scripts ที่ฝึกทั้ง DDL และ DML รายสัปดาห์:
พื้นฐาน SQL - การเริ่มต้น
- CREATE DATABASE และ CREATE TABLE
- INSERT ข้อมูลพื้นฐาน
- SELECT แบบง่าย
WHERE และ Operators
- การกรองข้อมูลด้วย WHERE
- Comparison Operators (=, <, >, BETWEEN)
- LIKE สำหรับค้นหา Pattern
Aggregate Functions
- COUNT, SUM, AVG, MAX, MIN
- GROUP BY และ HAVING
- สถิติพื้นฐาน
Joins - เชื่อมตาราง
- INNER JOIN
- LEFT JOIN และ RIGHT JOIN
- Multiple Table Joins
Advanced Queries
- Subqueries (Query ซ้อน Query)
- UNION และ INTERSECT
- Complex Data Retrieval
Main Schema - ฐานข้อมูลหลัก
- โครงสร้างฐานข้อมูลที่สมบูรณ์
- Sample Data สำหรับฝึกหัด
วิธีใช้งาน: เปิดไฟล์ .sql ด้วย MySQL Workbench หรือรันผ่าน Command Line:
mysql -u root -p < filename.sql
- MySQL - Database Server
- MySQL Workbench - GUI Tool
- หรือใช้ phpMyAdmin (มากับ XAMPP)
- PostgreSQL: ฐานข้อมูลทางเลือก
- DB Browser for SQLite: สำหรับ SQLite
- DBeaver: Universal Database Tool
-
ติดตั้ง MySQL:
- Download จาก mysql.com
- หรือติดตั้ง XAMPP (มี MySQL มาด้วย)
-
เปิด MySQL Server:
- XAMPP: Start MySQL
- Standalone:
mysql.server start
วิธีที่ 1: MySQL Command Line
mysql -u root -p
> CREATE DATABASE mydb;
> USE mydb;
> SOURCE schema.sql;วิธีที่ 2: MySQL Workbench
- เปิด MySQL Workbench
- Connect to Server
- File → Open SQL Script
- Execute (⚡)
วิธีที่ 3: phpMyAdmin
- เปิด
http://localhost/phpmyadmin - สร้าง Database ใหม่
- Import ไฟล์ .sql
- เข้าใจ Concept ก่อน: ER Diagram, Normalization สำคัญมาก
- ฝึก SQL ทุกวัน: SQL ต้องพิมพ์เอง จะจำได้
- วาด ER Diagram: จะทำให้เห็นภาพชัดเจน
- ทำโปรเจกต์จริง: ออกแบบ Database ของระบบที่สนใจ
- ตั้งชื่อตารางเป็นพหูพจน์:
usersไม่ใช่user - ใช้ Primary Key เสมอ: ทุกตารางต้องมี
- Foreign Key บังคับ Relationship: ป้องกันข้อมูลผิดพลาด
- Backup ข้อมูลบ่อยๆ:
mysqldumpหรือ Export - ใช้ Transaction: สำหรับงานที่ต้องทำหลายขั้นตอน
- W3Schools SQL - Tutorial + Try it
- MySQL Documentation
- SQLZoo - Interactive SQL Tutorial
- DB-Fiddle - Online SQL Playground
- ❌ ลืม WHERE ใน UPDATE/DELETE (แก้/ลบทั้งตาราง!)
- ❌ ใช้ SELECT * (ช้า, ควรระบุฟิลด์)
- ❌ ไม่ได้ normalize (ข้อมูลซ้ำซ้อน)
- ❌ ลืม ; ท้าย SQL Statement
- ❌ Case-sensitive ใน Linux (ตารางต้องเป็นตัวเล็ก)
โค้ดในโปรเจกต์นี้เป็นส่วนหนึ่งของการเรียนการสอนในรายวิชา COM 1602 Database System 1
Happy Querying! 🗄️💾
"In SQL we trust, all others bring data."