สอนการเชื่อม Table Join (INNER , LEFT , RIGHT, FULL) และ การสร้างเงื่อนไขด้วย Case When  SQL Database – 102

มาทำความเข้าใจและวิธีเชื่อมตาราง กับ สร้างเงื่อนไขใน SQL กันคับ

โดยแอดใช้แพลตฟอร์ม SQL LITE : https://sqliteonline.com/ สำหรับการเขียนโค้ดขึ้นมาและสอนวันนี้นะครับ อธิบายเกริ่นๆ ก่อนว่า

การ Join นั้นคือการเชื่อมตารางอีกตารางนึงเข้าหากัน เราสามารถ Join ได้เรื่อยๆ ครับไม่จำกัด

ส่วนการสร้างเงื่อนไข IF / Else เราใช้ Function Case When ซึ่งเหมือนในภาษา Programming ต่างๆเลยครับ เช่น Google Sheet , R , Python

เราจะมาเรียนหัวข้อหลักๆ 2 หัวข้อวันนี้ครับ

  1. การ Join (INNER , LEFT , RIGHT, FULL)
  2. การสร้างเงื่อนไข Case When (IF/Else)

การ JOIN (INNER , LEFT , RIGHT, FULL)

การ Join ใน SQL (INNER, LEFT, RIGHT, FULL)

การ Join ใน SQL เป็นกระบวนการที่ใช้รวมข้อมูลจากหลายตารางเข้าด้วยกัน โดยมีเงื่อนไขการเชื่อมโยงที่กำหนดไว้ ซึ่งแต่ละประเภทของการ Join มีจุดประสงค์และการใช้งานที่แตกต่างกัน ในบทความนี้ เราจะอธิบายประเภทของ Join พร้อมตัวอย่างที่เข้าใจง่าย ซึ่งเราใช้ 2 ตารางนี้เป็นข้อมูลหลักในการอธิบายนะครับ

เตรียมข้อมูล

  • Table A (ข้อมูลสินค้า):
product_idproduct_name
1โทรศัพท์
2คอมพิวเตอร์
3หูฟัง
  • Table B (ข้อมูลราคา):
product_idprice
110000
31500

1. INNER JOIN

INNER JOIN คือ ดึงข้อมูลที่เหมือนกันมา Join ถ้าไม่เหมือนจะไม่แสดง

Query:

SELECT A.product_name, B.price -- เลือกข้อมูลที่ต้องการแสดง
FROM TableA A -- เลือกตาราแรก
INNER JOIN TableB B --ตาราที่จะ Join
ON A.product_id = B.product_id; -- Join Column ที่เหมือกัน

ผลลัพธ์:

product_nameprice
โทรศัพท์10000
หูฟัง1500

อธิบาย: ข้อมูลจะดึงเฉพาะ product_id ที่เหมือนกันคือ 1 กับ 3


2. LEFT JOIN

LEFT JOIN คือการดึงข้อมูลทั้งหมดจากตารางซ้าย (TableA) และข้อมูลที่ตรงกันจากตารางขวา (TableB) หากไม่มีข้อมูลในตารางขวา จะเติมค่า NULL

Query:

SELECT A.product_name, B.price
FROM TableA A -- ตารางแรกจะเป็นฐาน ที่ใช้ ตารางสองเข้ามา
LEFT JOIN TableB B
ON A.product_id = B.product_id;

ผลลัพธ์:

product_nameprice
โทรศัพท์10000
คอมพิวเตอร์NULL
หูฟัง1500

อธิบาย: ตารางซ้าย (TableA) จะถูกแสดงทั้งหมด ถ้าเชื่อมแล้วมีข้อมูลไม่เหมือนกัน (TableB) จะถูกแทนที่ด้วยค่า Null


3. RIGHT JOIN

RIGHT JOIN คือการดึงข้อมูลทั้งหมดจากตารางขวา (TableB) และข้อมูลที่ตรงกันจากตารางซ้าย (TableA) หากไม่มีข้อมูลในตารางซ้าย จะเติมค่า NULL (เหมือน Left Join ครับ เปลี่ยนจาก ซ้ายเป็นขวา )

Query:

SELECT A.product_name, B.price
FROM TableA A
RIGHT JOIN TableB B -- ตารางที่สองจะเป็นฐาน ให้ตารางแรกเข้ามา
ON A.product_id = B.product_id;

ผลลัพธ์:

product_nameprice
โทรศัพท์10000
หูฟัง1500

อธิบาย: ตารางขวา (TableB) จะถูกแสดงทั้งหมด แม้ว่าข้อมูลบางแถวจะไม่มีคู่ในตารางซ้าย (TableA)


4. FULL JOIN

FULL JOIN คือการดึงข้อมูลทั้งหมดจากทั้งสองตาราง หากไม่มีข้อมูลที่ตรงกัน จะเติมค่า NULL

Query:

SELECT A.product_name, B.price
FROM TableA A
FULL JOIN TableB B
ON A.product_id = B.product_id;

ผลลัพธ์:

product_nameprice
โทรศัพท์10000
คอมพิวเตอร์NULL
หูฟัง1500

อธิบาย: ทุกแถวจากทั้งสองตารางจะถูกแสดง โดยข้อมูลที่ไม่มีคู่จะถูกเติมด้วยค่า NULL


สรุปความแตกต่างของการ Join แต่ละประเภท

ประเภทตารางซ้าย (Left)ตารางขวา (Right)เงื่อนไขที่ตรงกันค่า NULL
INNER JOINเฉพาะแถวที่ตรงกันเฉพาะแถวที่ตรงกันไม่มี
LEFT JOINเฉพาะแถวที่ตรงกันเติม NULL ที่ขวา
RIGHT JOINเฉพาะแถวที่ตรงกันเติม NULL ที่ซ้าย
FULL JOINเติม NULL ทั้งสองฝั่ง

เคล็ดลับในการใช้งาน Join :

  1. ตรวจสอบความสัมพันธ์ระหว่างตาราง: ตรวจสอบว่าคอลัมน์ที่ใช้ในเงื่อนไข ON มีความสัมพันธ์กัน เช่น Primary Key กับ Foreign Key (ชื่อ Column เหมือนกัน)
  2. ระบุประเภท Join ให้เหมาะสม: ใช้ INNER JOIN สำหรับข้อมูลที่ต้องการเฉพาะส่วนที่ตรงกัน และใช้ LEFT หรือ FULL JOIN เมื่อข้อมูลทั้งหมดมีความสำคัญ
  3. จัดการประสิทธิภาพ: หากตารางมีข้อมูลจำนวนมาก ใช้ Index เพื่อเพิ่มความเร็วในการ Join

หากเรา Join เฉยๆ Default จะเป็น INNER JOIN นะครับ

CASE WHEN

CASE WHEN เป็นคำสั่งที่ใช้ในการสร้างเงื่อนไขใน SQL เพื่อกำหนดผลลัพธ์ที่แตกต่างกันในแต่ละสถานการณ์ คล้ายกับการใช้ if-else ในภาษาโปรแกรมมิ่งอื่น ๆ โดยสามารถใช้ในคำสั่ง SELECT, UPDATE, หรือแม้แต่ ORDER BY ได้ครับ


รูปแบบคำสั่ง CASE WHEN

CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ...
    ELSE default_result
END
  • CASE : เปิดเงื่อนไข
  • WHEN: สร้างเงื่อน ( IF , ถ้า )
  • THEN: ระบุผลลัพธ์ที่จะคืนค่าเมื่อเงื่อนไขเป็นจริง (ถ้า When เป็นจริง)
  • ELSE: หากไม่มีเงื่อนไขใดเป็นจริงให้ ระบุบว่า ” default_result ” (ไม่จำเป็นต้องระบุ แต่แนะนำให้ใช้เพื่อความครบถ้วน)
  • END: ใช้ปิดคำสั่ง CASE

ตัวอย่างการใช้งาน CASE WHEN

1. การคำนวณคะแนนและกำหนดเกรด

สมมติว่ามีตารางชื่อ Students ที่มีคอลัมน์ score ต้องการคำนวณเกรดตามคะแนน:

student_idnamescore
1สมชาย85
2สมศรี70
3สมปอง50

Query: สร้างเงื่อนไขเพื่อคำนวณเกรด

SELECT
    student_id,
    name,
    score,
    CASE
        WHEN score >= 80 THEN 'A' -- ถ้า score มากกว่าหรือเท่ากับให้ขึ้น A
        WHEN score >= 70 THEN 'B'
        WHEN score >= 60 THEN 'C'
        WHEN score >= 50 THEN 'D'
        ELSE 'F' -- คะแนนต่ำกว่า 50 ขึ้น F
    END AS grade
FROM Students;

ผลลัพธ์:

student_idnamescoregrade
1สมชาย85A
2สมศรี70B
3สมปอง50D

ผลลัพธ์ได้แบบนี้เลยครับ ง่ายมากก


2. การจัดกลุ่มข้อมูลตามเงื่อนไข

สมมติว่ามีตาราง Orders ที่มีคอลัมน์ order_amount และต้องการจัดกลุ่มคำสั่งซื้อว่าเป็น “เล็ก”, “กลาง”, หรือ “ใหญ่”:

order_idcustomer_nameorder_amount
101คุณหนึ่ง500
102คุณสอง1200
103คุณสาม3000

Query: สร้างเงื่อนไขจัดกลุ่ม

SELECT
    order_id,
    customer_name,
    order_amount,
    CASE
        WHEN order_amount < 1000 THEN 'เล็ก' --น้อยกว่า 1000 เล็ก
        WHEN order_amount BETWEEN 1000 AND 2000 THEN 'กลาง' 
        ELSE 'ใหญ่'
    END AS order_size
FROM Orders;

เราสามารถใช้ BETWEEN , AND สำหรับระบุช่วงค่าระหว่างกลางได้

ผลลัพธ์:

order_idcustomer_nameorder_amountorder_size
101คุณหนึ่ง500เล็ก
102คุณสอง1200กลาง
103คุณสาม3000ใหญ่

3. การใช้ใน ORDER BY เพื่อจัดลำดับตามเงื่อนไข

สมมติว่าต้องการจัดลำดับข้อมูลในตาราง Employees ตามตำแหน่ง (Position) โดยให้ผู้จัดการ (Manager) ขึ้นก่อน ตามด้วยพนักงาน (Staff):

employee_idnameposition
1นาย AStaff
2นางสาว BManager
3นาย CStaff

Query:

SELECT
    employee_id,
    name,
    position
FROM Employees
ORDER BY
    CASE
        WHEN position = 'Manager' THEN 1
        ELSE 2
    END;

ผลลัพธ์:

employee_idnameposition
2นางสาว BManager
1นาย AStaff
3นาย CStaff

เคล็ดลับในการใช้งาน CASE WHEN

  1. ระวังลำดับของ WHEN: เงื่อนไขจะถูกตรวจสอบจากบนลงล่าง ดังนั้นควรเรียงลำดับให้เหมาะสมเพื่อหลีกเลี่ยงข้อผิดพลาด
  2. ใช้ ELSE เพื่อความปลอดภัย: การเพิ่ม ELSE ช่วยให้มั่นใจได้ว่าจะครอบคลุมทุกกรณีที่อาจเกิดขึ้น
  3. สามารถซ้อน CASE ได้: ในบางสถานการณ์ สามารถซ้อนคำสั่ง CASE เพื่อจัดการเงื่อนไขที่ซับซ้อนได้

เป็นอย่างไรกันบ้างครับ หวังว่าบทความนี้จะช่วยให้คุณเข้าใจการ Join และ การสร้างเงื่อนไขใน SQL ได้นะครับบ ภูมิใจทุกคนมากที่อ่านมาถึงตรงนี้ ขอบคุณและเก่งๆมากค้าบทุกคน 👏😊

Leave a comment