MySQL WHERE ข้อ: และ, หรือ, ใน, ไม่อยู่ในตัวอย่างแบบสอบถาม

⚡ สรุปอย่างชาญฉลาด

MySQL เงื่อนไข WHERE จะกรองแถวก่อนที่จะส่งไปยังชุดผลลัพธ์ โดยใช้เกณฑ์ที่แม่นยำกับคำสั่ง SELECT, UPDATE และ DELETE การเข้าใจ AND, OR, IN, NOT IN และตัวดำเนินการเปรียบเทียบจะช่วยให้ผู้เริ่มต้นสามารถดึงข้อมูลที่ต้องการได้อย่างถูกต้อง

  • 🔍 วัตถุประสงค์หลัก: เงื่อนไข WHERE จะจำกัดว่าคำสั่งนั้นจะแก้ไขแถวใดบ้าง ดังนั้นคำสั่ง SELECT, UPDATE และ DELETE จะแก้ไขเฉพาะแถวที่ตรงกับเงื่อนไขเท่านั้น
  • 🔗 AND Operaทอร์: ระบบจะแสดงผลลัพธ์เฉพาะเมื่อเงื่อนไขทุกข้อเป็นจริงเท่านั้น ซึ่งจะช่วยจำกัดขอบเขตของชุดผลลัพธ์ให้แคบลง
  • 🔀 OR Operaทอร์: ระบบจะส่งคืนแถวเมื่อเงื่อนไขใดเงื่อนไขหนึ่งเป็นจริง ซึ่งจะทำให้ชุดผลลัพธ์กว้างขึ้น
  • 📋 อยู่ในและไม่ได้อยู่ใน: คำหลัก IN ใช้สำหรับจับคู่กับรายการค่าในนิพจน์หนึ่ง ในขณะที่ NOT IN ใช้สำหรับยกเว้นรายการค่าเหล่านั้น
  • 🇧🇷 การเปรียบเทียบ Operaทอร์: เครื่องหมายเท่ากับ (=), มากกว่า (>), น้อยกว่า (<) และ ไม่เท่ากับ (<>) ใช้สำหรับกรองคอลัมน์ตัวเลข ข้อความ และวันที่
  • ⚠️ การจัดการค่า NULL: NULL จะไม่ตรงกับเครื่องหมาย = หรือ <> ดังนั้นจึงต้องใช้ IS NULL และ IS NOT NULL เพื่อตรวจสอบค่าที่หายไป

อะไรคือ WHERE ข้อใน MySQL?

ข้อที่ in MySQL เป็นคำสำคัญที่ใช้เพื่อระบุเกณฑ์ที่แน่นอนของข้อมูลหรือแถวที่จะได้รับผลกระทบจากคำสั่ง SQL ที่ระบุ สามารถใช้คำสั่ง WHERE ร่วมกับคำสั่ง SQL เช่น INSERT, UPDATE, SELECT และ DELETE เพื่อกรองระเบียนและดำเนินการต่างๆ กับข้อมูล

เราดูวิธีการสืบค้นข้อมูลจาก ฐานข้อมูล โดยใช้คำสั่ง SELECT ในบทช่วยสอนก่อนหน้านี้ คำสั่ง SELECT ส่งคืนผลลัพธ์ทั้งหมดจากตารางฐานข้อมูลที่สอบถาม

อย่างไรก็ตาม บางครั้งเราต้องการจำกัดผลลัพธ์การค้นหาให้เป็นไปตามเงื่อนไขที่กำหนดไว้ คำสั่ง WHERE ใน SQL จะมีประโยชน์ในสถานการณ์เช่นนี้ และทำงานในลักษณะเดียวกัน คำสั่งลบหรืออัปเดต เช่นเดียวกับที่ใช้ในคำสั่ง SELECT

WHERE ข้อใน MySQL

WHERE ไวยากรณ์ส่วนคำสั่ง

ไวยากรณ์พื้นฐานของคำสั่ง WHERE มีดังนี้

SELECT * FROM tableName WHERE condition;

ที่นี่

  • “เลือก * จากชื่อตาราง” เป็นมาตรฐาน คำสั่ง SELECT
  • "ที่ไหน" คือคำหลักที่ใช้จำกัดชุดผลลัพธ์ และ "เงื่อนไข" คือตัวกรองที่ใช้กับผลลัพธ์ ตัวกรองอาจเป็นช่วงค่า ค่าเดียว หรือแบบสอบถามย่อยก็ได้

สมมติว่าเราต้องการรายละเอียดของสมาชิกจากตารางสมาชิก โดยกำหนดหมายเลขสมาชิกเป็น 1 สคริปต์ด้านล่างนี้จะช่วยให้บรรลุเป้าหมายนั้นได้

SELECT * FROM `members` WHERE `membership_number` = 1;

กำลังเรียกใช้สคริปต์นี้ใน MySQL ปรับแต่ง เมื่อค้นหาใน “myflixdb” จะได้ผลลัพธ์ดังต่อไปนี้

membership_number full_names gender date_of_birth physical_address postal_address contct_number email
1 Janet Jones Female 21-07-1980 First Street Plot No 4 Private Bag 0759 253 542 janetjones@yagoo.cm

เงื่อนไขเดียวมักไม่เพียงพอ ส่วนด้านล่างนี้จะรวม WHERE เข้ากับ ตัวดำเนินการเชิงตรรกะ.

WHERE ข้อรวมกับ – AND ตรรกะ OperaTor

ตัวดำเนินการตรรกะ AND จะส่งคืนแถวก็ต่อเมื่อตรงตามเงื่อนไขที่ระบุทั้งหมดเท่านั้น

สมมติว่าเราต้องการภาพยนตร์ทั้งหมดในหมวดที่ 2 ที่ออกฉายในปี 2008 สคริปต์ด้านล่างนี้จะช่วยให้บรรลุเป้าหมายนั้นได้

SELECT * FROM `movies` WHERE `category_id` = 2 AND `year_released` = 2008;

เมื่อรันสคริปต์ข้างต้นกับฐานข้อมูล “myflixdb” จะได้ผลลัพธ์ดังต่อไปนี้

movie_id title director year_released category_id
2 Forgetting Sarah Marshal Nicholas Stoller 2008 2

AND จะทำให้ผลลัพธ์แคบลง OR จะทำให้ผลลัพธ์กว้างขึ้น

WHERE ข้อรวมกับ – OR ตรรกะ OperaTor

เมื่อใช้ตัวดำเนินการ OR ระบบจะส่งคืนแถวข้อมูลหากตรงตามเงื่อนไขที่ระบุไว้ข้อใดข้อหนึ่ง

สคริปต์ต่อไปนี้จะรวบรวมภาพยนตร์ทั้งหมดไว้ในหมวดหมู่ที่ 1 หรือหมวดหมู่ที่ 2

SELECT * FROM `movies` WHERE `category_id` = 1 OR `category_id` = 2;

ชุดผลลัพธ์แสดงอยู่ด้านล่าง

movie_id title director year_released category_id
1 Pirates of the Caribean 4 Rob Marshall 2011 1
2 Forgetting Sarah Marshal Nicholas Stoller 2008 2

การใช้เงื่อนไข OR หลายๆ เงื่อนไขต่อกันจะทำให้การอ่านยาก คำหลัก IN ช่วยแก้ปัญหานี้ได้

WHERE ข้อรวมกับ – IN คำหลัก

เมื่อใช้คำสั่ง WHERE ร่วมกับคำสั่ง IN จะมีผลเฉพาะกับแถวที่มีค่าตรงกับรายการที่ระบุไว้เท่านั้น IN ช่วยลดจำนวนคำสั่ง OR ที่คุณต้องเขียนลง

ดังต่อไปนี้ MySQL คำสั่ง WHERE IN จะแสดงแถวที่ค่า membership_number เป็น 1, 2 หรือ 3

SELECT * FROM `members` WHERE `membership_number` IN (1,2,3);

ชุดผลลัพธ์แสดงอยู่ด้านล่าง

membership_number full_names gender date_of_birth physical_address postal_address contct_number email
1 Janet Jones Female 21-07-1980 First Street Plot No 4 Private Bag 0759 253 542 janetjones@yagoo.cm
2 Janet Smith Jones Female 23-06-1980 Melrose 123 NULL NULL jj@fstreet.com
3 Robert Phil Male 12-07-1989 3rd Street 34 NULL 12345 rm@tstreet.com

คำสั่ง NOT IN จะทำงานตรงข้ามกับตัวกรองเดิม

WHERE ข้อรวมกับ – ไม่อยู่ใน คำหลัก

เมื่อใช้คีย์เวิร์ด NOT IN เงื่อนไข WHERE จะยกเว้นทุกแถวที่มีค่าตรงกับรายการที่ระบุไว้

คำสั่ง SQL ต่อไปนี้จะแสดงแถวที่ membership_number ไม่ใช่ 1, 2 หรือ 3

SELECT * FROM `members` WHERE `membership_number` NOT IN (1,2,3);

ชุดผลลัพธ์แสดงอยู่ด้านล่าง

membership_number full_names gender date_of_birth physical_address postal_address contct_number email
4 Gloria Williams Female 14-02-1984 2nd Street 23 NULL NULL NULL

คำสั่ง WHERE ยังกรองค่าตามขนาดและความเท่าเทียมกัน โดยใช้ตัวดำเนินการเปรียบเทียบด้วย

WHERE ข้อรวมกับ – เปรียบเทียบ Operaโปร

ตัวดำเนินการเปรียบเทียบ น้อยกว่า (<), เท่ากับ (=), มากกว่า (>) และไม่เท่ากับ (<>) สามารถใช้ได้กับคำสั่ง WHERE ทั้งหมด

= เท่ากับ

สคริปต์ต่อไปนี้จะรับสมาชิกหญิงทั้งหมดจากตารางสมาชิกโดยใช้ตัวดำเนินการเปรียบเทียบเท่ากับ

SELECT * FROM `members` WHERE `gender` = 'Female';

ชุดผลลัพธ์แสดงอยู่ด้านล่าง

membership_number full_names gender date_of_birth physical_address postal_address contct_number email
1 Janet Jones Female 21-07-1980 First Street Plot No 4 Private Bag 0759 253 542 janetjones@yagoo.cm
2 Janet Smith Jones Female 23-06-1980 Melrose 123 NULL NULL jj@fstreet.com
4 Gloria Williams Female 14-02-1984 2nd Street 23 NULL NULL NULL

> มากกว่า

สคริปต์ต่อไปนี้จะรับการชำระเงินทั้งหมดที่มากกว่า 2,000 จากตารางการชำระเงิน

SELECT * FROM `payments` WHERE `amount_paid` > 2000;

ชุดผลลัพธ์แสดงอยู่ด้านล่าง

payment_id membership_number payment_date description amount_paid external_reference_number
1 1 23-07-2012 Movie rental payment 2500 11
3 3 30-07-2012 Movie rental payment 6000 NULL

<> ไม่เท่ากับ

สคริปต์ต่อไปนี้จะได้รับภาพยนตร์ทั้งหมดซึ่งมีรหัสหมวดหมู่ไม่ใช่ 1

SELECT * FROM `movies` WHERE `category_id` <> 1;

ชุดผลลัพธ์แสดงอยู่ด้านล่าง

movie_id title director year_released category_id
2 Forgetting Sarah Marshal Nicholas Stoller 2008 2
5 Daddy's Little Girls NULL 2007 8
6 Angels and Demons NULL 2007 6
7 Davinci Code NULL 2007 6
9 Honey mooners John Schultz 2005 8

คู่มืออ้างอิงฉบับย่อ: เงื่อนไข WHERE Operaโปร

ตัวดำเนินการที่มักใช้ร่วมกับ WHERE มีสรุปไว้ด้านล่าง คำจำกัดความฉบับเต็มปรากฏอยู่ในเอกสารอ้างอิง MySQL การอ้างอิงผู้ปฏิบัติงาน.

OperaTor ความหมาย ตัวอย่างเงื่อนไข
= เท่ากับ `gender` = 'Female'
<> ไม่เท่ากับ `category_id` <> 1
> / มากกว่า / น้อยกว่า `จำนวนเงินที่ชำระ` > 2000
และ / หรือ เกณฑ์ทั้งหมด / เกณฑ์ใดๆ `category_id` = 2 และ `year_released` = 2008
ใน / ไม่อยู่ใน ตรงกับ / ไม่รวมอยู่ในรายการ `membership_number` IN (1,2,3)
เป็นค่าว่าง / ไม่เป็นค่าว่าง การทดสอบหาค่าที่หายไป `postal_address` เป็นค่าว่าง

⚠️หมายเหตุ: ค่า NULL จะไม่ตรงกับเครื่องหมาย = หรือ <> ควรใช้ IS NULL หรือ IS NOT NULL เมื่อคอลัมน์นั้นอาจไม่มีค่าใดๆ

ปริศนาลับสมอง: ค้นหาภาพยนตร์ที่ส่งคืนล่าช้า

สมมติว่าเราต้องการค้นหาภาพยนตร์ที่เช่าไปแล้วแต่ยังไม่ถูกส่งคืนภายในวันที่ 25/06/2012 การใช้คำสั่ง WHERE ร่วมกับตัวดำเนินการน้อยกว่า (less than) และ AND จะช่วยให้ได้ผลลัพธ์นั้น

SELECT * FROM `movierentals` WHERE `return_date` < '2012-06-25' AND movie_returned = 0;

ดำเนินการสคริปต์ข้างต้นใน MySQL Workbench ให้ผลลัพธ์ต่อไปนี้

reference_number transaction_date return_date membership_number movie_id movie_returned
14 21-06-2012 24-06-2012 2 2 0

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

ตัวกรอง WHERE จะกรองแต่ละแถวก่อนจัดกลุ่มpingดังนั้นจึงไม่สามารถอ้างอิงฟังก์ชันการรวมได้ HAVING จะกรองกลุ่มหลังจาก GROUP BY ทำงาน ทำให้เป็นสถานที่ที่เหมาะสมสำหรับเงื่อนไขต่างๆ เช่น COUNT(*) > 5

ใช้ IS NULL หรือ IS NOT NULL Operaตัวดำเนินการเช่น = และ <> จะส่งคืนค่าที่ไม่รู้จักสำหรับค่า NULL ดังนั้น `postal_address` = NULL จะไม่ตรงกับอะไรเลย ในขณะที่ `postal_address` IS NULL จะใช้งานได้

ใช่ เมื่อคอลัมน์ที่ถูกกรองได้รับการจัดทำดัชนีแล้ว MySQL อ่านเฉพาะแถวที่ตรงกันแทนที่จะสแกนตารางทั้งหมด ห่อหุ้มping การกำหนดคอลัมน์ในฟังก์ชัน เช่น YEAR(`date_of_birth`) = 1980 จะป้องกันการใช้ดัชนี

ใช่แล้ว ผู้ช่วย AI จะแปลงภาษาอังกฤษธรรมดาให้เป็น SQL และ MySQL ม้านั่งทำงานของช่างเครื่อง สามารถเรียกใช้ผลลัพธ์ได้ Revตรวจสอบเงื่อนไขทุกอย่างกับโครงสร้างข้อมูลของคุณ เพราะโมเดลอาจสร้างชื่อคอลัมน์ขึ้นมาเอง

ทดสอบด้วยคำสั่ง SELECT ก่อน เงื่อนไข WHERE ที่ไม่ถูกต้องอาจทำให้ผิดพลาดได้ คำสั่งลบหรืออัปเดต สามารถแก้ไขได้ทุกแถว ดูตัวอย่างแถวที่ตรงกัน จากนั้นใช้เงื่อนไขเดียวกันสำหรับการเขียนข้อมูล

สรุปโพสต์นี้ด้วย: