SQL Academy · บทเรียน

ตัวกรอง WHERE: ตัวดำเนินการเปรียบเทียบและตรรกะ

กรองแถวด้วย =, <>, , AND, OR, NOT และทำความเข้าใจลำดับความสำคัญของตัวดำเนินการกับวงเล็บ

บทเรียน 2 จาก 413 ขั้นตอน

ตัวกรอง WHERE: ตัวดำเนินการเปรียบเทียบและตรรกะ เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

บทบาทของ WHERE

WHERE ใช้กรองแถวก่อนการจัดกลุ่มหรือการรวมข้อมูล โดยจะส่งคืนเฉพาะแถวที่เพรดิเคตเป็น TRUE

ตัวดำเนินการเปรียบเทียบ

การเปรียบเทียบมาตรฐานใช้ได้กับชนิดข้อมูลที่สามารถเปรียบเทียบกันได้ทั้งหมด

SELECT * FROM products WHERE price > 100;
SELECT * FROM products WHERE price >= 100;
SELECT * FROM products WHERE price < 50;
SELECT * FROM products WHERE price <= 50;
SELECT * FROM products WHERE category = 'books';
SELECT * FROM products WHERE category <> 'books';   -- != also works

AND, OR, NOT

รวมเพรดิเคตเข้าด้วยกันด้วยตัวดำเนินการทางตรรกะ

-- Both true:
SELECT * FROM products
WHERE category = 'books' AND price < 50;

-- Either true:
SELECT * FROM products
WHERE category = 'books' OR category = 'music';

-- Negation:
SELECT * FROM products
WHERE NOT (category = 'books');

ลำดับความสำคัญของตัวดำเนินการ

ลำดับความสำคัญ (จากสูงไปต่ำ) คือ NOT → AND → OR ควรใส่วงเล็บให้เพรดิเคตที่ซับซ้อนเสมอเพื่อความชัดเจน

-- Without parens — almost certainly wrong:
SELECT * FROM orders
WHERE status = 'open' OR status = 'pending' AND total > 100;
-- means:  status = open  OR  (status = pending AND total > 100)

-- With parens — clearer:
SELECT * FROM orders
WHERE (status = 'open' OR status = 'pending') AND total > 100;

IN และ NOT IN

ทางลัดสำหรับเงื่อนไข OR หลายรายการ

SELECT * FROM users
WHERE country IN ('US', 'CA', 'GB', 'AU');

-- Equivalent to:
SELECT * FROM users
WHERE country = 'US' OR country = 'CA' OR country = 'GB' OR country = 'AU';

BETWEEN

การตรวจสอบช่วงแบบรวมค่าขอบเขต

SELECT * FROM orders
WHERE total BETWEEN 100 AND 500;

-- Equivalent to:  total >= 100 AND total <= 500

ตัวกรองที่ปลอดภัยเมื่อมี NULL

การเปรียบเทียบกับ NULL จะให้ผลเป็น NULL (ไม่ใช่ FALSE) และ WHERE จะตัดแถวที่มี NULL ออก ใช้ IS NULL / IS NOT NULL อย่างชัดเจนเมื่อต้องการ

-- Returns users where deleted_at is unknown:
SELECT * FROM users WHERE deleted_at IS NULL;

-- IS DISTINCT FROM treats NULL as a comparable value:
SELECT * FROM events WHERE status IS DISTINCT FROM 'closed';

คอลัมน์บูลีน

คอลัมน์ BOOLEAN ไม่จำเป็นต้องใช้การเปรียบเทียบ

SELECT * FROM tasks WHERE done;       -- = TRUE
SELECT * FROM tasks WHERE NOT done;    -- = FALSE or NULL
SELECT * FROM tasks WHERE done IS NOT TRUE;  -- FALSE or NULL only

การจับคู่รูปแบบด้วย LIKE

% ตรงกับสตริงใด ๆ ส่วน _ ตรงกับอักขระหนึ่งตัวพอดี:

SELECT * FROM users WHERE email LIKE '%@gmail.com';
SELECT * FROM products WHERE sku LIKE 'A_-___';

-- Case-insensitive in PostgreSQL:
SELECT * FROM users WHERE email ILIKE '%@GMAIL.com';

ตัวกรองและประสิทธิภาพ

ส่วนคำสั่ง WHERE คือจุดที่ดัชนีแสดงประโยชน์ออกมาอย่างเต็มที่ ตัวกรองแบบเท่ากับ (=) และแบบช่วง (<, BETWEEN) บนคอลัมน์ที่มีดัชนีจะเปลี่ยนการสแกนทั้งตารางให้เป็นการค้นหาที่ใช้เวลาเพียงระดับมิลลิวินาที

ลำดับการประเมินผล

ในเชิงตรรกะ ฐานข้อมูลจะประเมินตามลำดับ: FROM → WHERE → GROUP BY → HAVING → SELECT → ORDER BY → LIMIT ดังนั้น WHERE จะเห็นแถวดิบ ส่วนชื่อแฝงของคอลัมน์จาก SELECT ยังไม่ได้ถูกกำหนด

-- This fails — alias not visible in WHERE:
SELECT total * 0.9 AS discounted
FROM orders WHERE discounted > 100;     -- ERROR

-- Repeat the expression instead, or wrap in a subquery.

สรุป

WHERE เป็นเครื่องมือหลักสำหรับเลือกแถว

  • ตัวดำเนินการเปรียบเทียบและตรรกะมาตรฐาน
  • ใส่วงเล็บให้กับ AND/OR ที่ผสมกัน
  • ใช้ IS NULL — อย่าใช้ = NULL
  • WHERE บนคอลัมน์ที่มีดัชนีทำงานได้รวดเร็ว

ตรวจสอบความเข้าใจ

predicate ใดจะเก็บไว้เฉพาะแถวที่ age มากกว่าหรือเท่ากับ 18 และ country เป็น US

เริ่มต้นได้ฟรี

เรียนรู้ SQL ด้วย AI tutor — ฟรี

เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป

คอร์ส
46
บทเรียน
183

คำถามที่พบบ่อย

บทเรียน “ตัวกรอง WHERE: ตัวดำเนินการเปรียบเทียบและตรรกะ” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ตัวกรอง WHERE: ตัวดำเนินการเปรียบเทียบและตรรกะ” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ตัวกรอง WHERE: ตัวดำเนินการเปรียบเทียบและตรรกะ”

กรองแถวด้วย =, <>, , AND, OR, NOT และทำความเข้าใจลำดับความสำคัญของตัวดำเนินการกับวงเล็บ คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “ตัวกรอง WHERE: ตัวดำเนินการเปรียบเทียบและตรรกะ” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม

ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การเลือกคอลัมน์และนิพจน์
  2. ตัวกรอง WHERE: ตัวดำเนินการเปรียบเทียบและตรรกะ
  3. ORDER BY สำหรับคอลัมน์เดียวและหลายคอลัมน์
  4. พื้นฐาน LIMIT, OFFSET และการแบ่งหน้า
← กลับไปที่ SQL Academy