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

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

