การสร้างฐานข้อมูล (CREATE DATABASE)
- การใช้ฐานข้อมูล (USE)
- การสร้างตาราง (CREATE TABLE)
- การเพิ่มข้อมูล (INSERT INTO)
- การแสดงข้อมูล (SELECT)
- การแก้ไขข้อมูล (UPDATE)
- การลบข้อมูล (DELETE)
- การลบตารางและฐานข้อมูล (DROP)
1. สร้างฐานข้อมูล
-- สร้างฐานข้อมูลชื่อ my_school
CREATE DATABASE my_school;
-- เลือกใช้ฐานข้อมูลนี้
USE my_school;
2. สร้างตาราง
-- สร้างตาราง student
CREATE TABLE student (
student_id INT AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
age INT,
grade VARCHAR(10)
);
3. เพิ่มข้อมูลลงในตาราง
-- เพิ่มนักเรียน 3 คน
INSERT INTO student (first_name, last_name, age, grade)
VALUES
('Pan', 'Somsri', 15, 'Grade 9'),
('Anya', 'Rakdee', 14, 'Grade 8'),
('Mark', 'Chen', 16, 'Grade 10');
4. แสดงข้อมูลจากตาราง
-- แสดงนักเรียนทั้งหมด
SELECT * FROM student;
-- แสดงเฉพาะนักเรียนที่อยู่ Grade 9
SELECT * FROM student WHERE grade = 'Grade 9';
5. แก้ไขข้อมูล
-- เปลี่ยนชื่อของนักเรียนที่มี student_id = 2
UPDATE student
SET first_name = 'Anyarin', age = 15
WHERE student_id = 2;
6. ลบข้อมูล
-- ลบนักเรียนที่มี student_id = 3
DELETE FROM student WHERE student_id = 3;
7. ลบตารางและฐานข้อมูล (ใช้ด้วยความระมัดระวัง)
-- ลบตาราง student
DROP TABLE student;
-- ลบฐานข้อมูล my_school
DROP DATABASE my_school;
ตัวอย่างรวมทั้งหมด (Script รันทีเดียว)
-- เริ่มต้นจากศูนย์
DROP DATABASE IF EXISTS my_school;
CREATE DATABASE my_school;
USE my_school;
CREATE TABLE student (
student_id INT AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(50),
last_name VARCHAR(50),
age INT,
grade VARCHAR(10)
);
INSERT INTO student (first_name, last_name, age, grade)
VALUES
('Pan', 'Somsri', 15, 'Grade 9'),
('Anya', 'Rakdee', 14, 'Grade 8'),
('Mark', 'Chen', 16, 'Grade 10');
SELECT * FROM student;
UPDATE student SET age = 15 WHERE student_id = 2;
DELETE FROM student WHERE student_id = 3;
SELECT * FROM student;
สำหรับการ JOIN ตาราง สามารถทำด้านล่างนี้เลยครับ
เตรียมฐานข้อมูลตัวอย่าง
-- สร้างตาราง A
CREATE TABLE A (
key_id INT,
value_a VARCHAR(50)
);
-- สร้างตาราง B
CREATE TABLE B (
key_id INT,
value_b VARCHAR(50)
);
-- เพิ่มข้อมูลในตาราง A
INSERT INTO A VALUES
(1, 'Apple'),
(2, 'Banana'),
(3, 'Cherry'),
(4, 'Date');
-- เพิ่มข้อมูลในตาราง B
INSERT INTO B VALUES
(3, 'Carrot'),
(4, 'Dragonfruit'),
(5, 'Elderberry'),
(6, 'Fig');
JOIN แบบต่าง ๆ
1. INNER JOIN
(แสดงเฉพาะข้อมูลที่ key_id ตรงกันในทั้งสองตาราง)
SELECT *
FROM A
INNER JOIN B ON A.key_id = B.key_id;
แสดงเฉพาะ key_id = 3, 4
2. FULL JOIN
(แสดงข้อมูลทั้งหมดของ A และ B ไม่ว่าจะ match หรือไม่)
❗ MySQL ไม่รองรับ
FULL JOIN
โดยตรง → ใช้UNION
แทน
SELECT *
FROM A
LEFT JOIN B ON A.key_id = B.key_id
UNION
SELECT *
FROM A
RIGHT JOIN B ON A.key_id = B.key_id;
3. FULL JOIN with NULL filter
(แสดงเฉพาะข้อมูลที่ไม่ match กัน)
SELECT *
FROM A
LEFT JOIN B ON A.key_id = B.key_id
WHERE B.key_id IS NULL
UNION
SELECT *
FROM A
RIGHT JOIN B ON A.key_id = B.key_id
WHERE A.key_id IS NULL;
4. LEFT JOIN
(แสดงข้อมูลจาก A ทั้งหมด แม้ไม่ match กับ B)
SELECT *
FROM A
LEFT JOIN B ON A.key_id = B.key_id;
5. LEFT JOIN ที่ไม่ match เท่านั้น
SELECT *
FROM A
LEFT JOIN B ON A.key_id = B.key_id
WHERE B.key_id IS NULL;
6. RIGHT JOIN
(แสดงข้อมูลจาก B ทั้งหมด แม้ไม่ match กับ A)
SELECT *
FROM A
RIGHT JOIN B ON A.key_id = B.key_id;
7. RIGHT JOIN ที่ไม่ match เท่านั้น
SELECT *
FROM A
RIGHT JOIN B ON A.key_id = B.key_id
WHERE A.key_id IS NULL;
สรุปผลลัพธ์ของแต่ละ JOIN
JOIN Type | แสดงอะไรบ้าง |
---|---|
INNER JOIN | แสดงเฉพาะ key ที่ตรงกันเท่านั้น |
FULL JOIN | แสดงทุกแถว ทั้ง A และ B |
FULL JOIN + WHERE | แสดงเฉพาะแถวที่ไม่ match (A หรือ B) |
LEFT JOIN | แสดง A ทั้งหมด + B ถ้ามี |
LEFT JOIN + WHERE | แสดงเฉพาะ A ที่ไม่ match กับ B |
RIGHT JOIN | แสดง B ทั้งหมด + A ถ้ามี |
RIGHT JOIN + WHERE | แสดงเฉพาะ B ที่ไม่ match กับ A |