MySQL บทช่วยสอนการใช้ไวด์การ์ด: ชอบ, ไม่ชอบ, หลีก, ( % ), ( _ )

สิ่งที่เป็น MySQL ไวด์การ์ด?

MySQL สัญลักษณ์แทน เป็นอักขระที่ช่วยค้นหาข้อมูลที่ตรงตามเกณฑ์ที่ซับซ้อน ไวล์ดการ์ดจะใช้ร่วมกับตัวดำเนินการเปรียบเทียบ LIKE หรือตัวดำเนินการเปรียบเทียบ NOT LIKE

เหตุใดจึงต้องใช้ WildCards ?

หากคุณคุ้นเคยกับการใช้ SQL คุณอาจคิดว่าคุณสามารถค้นหาข้อมูลที่ซับซ้อนได้โดยใช้คำสั่ง SELECT และ WHERE แล้วทำไมจึงต้องใช้ Wildcards ล่ะ

ก่อนที่เราจะตอบคำถามนั้น มาดูตัวอย่างกันก่อน สมมติว่าแผนกการตลาดของคลังวิดีโอ Myflix ดำเนินการส่งเสริมการขายในเมืองเท็กซัส และต้องการรับคำติชมเกี่ยวกับจำนวนสมาชิก

ที่ลงทะเบียนจากเท็กซัส คุณสามารถใช้คำสั่ง SELECT ต่อไปนี้ร่วมกับคำสั่ง WHERE เพื่อรับข้อมูลที่ต้องการ

SELECT * FROM members WHERE postal_address = 'Austin , TX' OR  postal_address = Dallas , TX OR postal_address = Iola,TX OR postal_adress = Houston ,TX';

ดังที่คุณเห็นจากข้อความค้นหาข้างต้น “WHERE ข้อ” กลายเป็นเรื่องซับซ้อน อย่างไรก็ตาม การใช้ไวด์การ์ดจะทำให้การค้นหาง่ายขึ้น เนื่องจากเราสามารถใช้สิ่งที่เรียบง่าย เช่น สคริปต์ที่แสดงด้านล่าง

SELECT * FROM  members  WHERE postal_address  like '% TX';

กล่าวโดยสรุป ไวด์การ์ดช่วยให้เราสามารถพัฒนาเครื่องมือค้นหาที่มีประสิทธิภาพลงในแอปพลิเคชันที่ขับเคลื่อนด้วยข้อมูลของเรา

ประเภทของไวด์การ์ด

% เปอร์เซ็นต์

% อักขระเปอร์เซ็นต์ที่ใช้ในการระบุรูปแบบของ อักขระศูนย์ (0) หรือมากกว่า. มีโครงสร้างพื้นฐานดังต่อไปนี้

SELECT statements... WHERE fieldname LIKE 'xxx%';

ที่นี่

  • "คำสั่ง SELECT…” คือคำสั่ง SQL SELECT มาตรฐาน
  • “WHERE” คือคำสำคัญที่ใช้กรองข้อมูล
  • “LIKE” คือตัวดำเนินการเปรียบเทียบที่ใช้ร่วมกับไวด์การ์ด
  • 'xxx' คือรูปแบบเริ่มต้นที่ระบุ เช่น อักขระเดี่ยวหรือมากกว่า และ "%" จะจับคู่อักขระจำนวนเท่าใดก็ได้โดยเริ่มจากศูนย์ (0)

เพื่อให้เข้าใจข้อความข้างต้นได้อย่างเต็มที่ เรามาดูตัวอย่างที่ใช้งานได้จริงกัน

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

SELECT * FROM movies WHERE title LIKE '%code%';

ดำเนินการสคริปต์ข้างต้นใน MySQL ปรับแต่ง เทียบกับ myflixdb ให้ผลลัพธ์ตามที่แสดงด้านล่าง

movie_id title director year_released category_id
4 Code Name Black Edgar Jimz 2010 NULL
7 Davinci Code NULL NULL 6

โปรดสังเกตว่าแม้ว่าคำสำคัญในการค้นหา "code" จะปรากฏที่จุดเริ่มต้นหรือจุดสิ้นสุดของชื่อ คำนั้นก็ยังคงส่งคืนในชุดผลลัพธ์ของเรา เนื่องจากโค้ดของเรามีอักขระจำนวนเท่าใดก็ได้ในตอนต้น จากนั้นจะตรงกับรูปแบบ "โค้ด" ตามด้วยอักขระจำนวนเท่าใดก็ได้ในตอนท้าย

ตอนนี้เรามาแก้ไขสคริปต์ด้านบนเพื่อรวมเปอร์เซ็นต์ไวด์การ์ดที่จุดเริ่มต้นของเกณฑ์การค้นหาเท่านั้น

SELECT * FROM movies WHERE title LIKE '%code';

ดำเนินการสคริปต์ข้างต้นใน MySQL โต๊ะทำงานเทียบกับ myflixdb ให้ผลลัพธ์ตามที่แสดงด้านล่าง

movie_id title director year_released category_id
7 Davinci Code NULL NULL 6

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

ตอนนี้ให้เลื่อนไวล์ดการ์ดเปอร์เซ็นต์ไปที่จุดสิ้นสุดของรูปแบบที่ระบุเพื่อให้ตรงกัน สคริปต์ที่แก้ไขจะแสดงด้านล่าง

SELECT * FROM movies WHERE title LIKE 'code%';
ดำเนินการสคริปต์ข้างต้นใน MySQL โต๊ะทำงานเทียบกับ myflixdb ให้ผลลัพธ์ตามที่แสดงด้านล่าง
movie_id title director year_released category_id
4 Code Name Black Edgar Jimz 2010 NULL

สังเกตว่ามีเพียงระเบียนเดียวเท่านั้นที่ถูกส่งคืนจากฐานข้อมูล เนื่องจากรหัสของเราตรงกับชื่อทั้งหมดที่ขึ้นต้นด้วยรูปแบบ “รหัส” ตามด้วยอักขระจำนวนเท่าใดก็ได้

_ ขีดเส้นใต้ไวด์การ์ด

มีการใช้ไวด์การ์ดขีดล่างเพื่อ ตรงกับอักขระหนึ่งตัว- สมมติว่าเราต้องการค้นหาภาพยนตร์ทั้งหมดที่ออกฉายในปี 200x โดยที่ x คืออักขระหนึ่งตัวที่สามารถมีค่าเท่าใดก็ได้ เราจะใช้ไวด์การ์ดขีดล่างเพื่อบรรลุเป้าหมายนั้น สคริปต์ด้านล่างเลือกภาพยนตร์ทั้งหมดที่เข้าฉายในปี “200x”

SELECT * FROM movies WHERE year_released LIKE '200_';

ดำเนินการสคริปต์ข้างต้นใน MySQL โต๊ะทำงานเทียบกับ myflixdb ให้ผลลัพธ์ตามที่แสดงด้านล่าง

movie_id title director year_released category_id
2 Forgetting Sarah Marshal Nicholas Stoller 2008 2
9 Honey mooners Jhon Shultz 2005 8

โปรดสังเกตว่าเฉพาะภาพยนตร์ที่มีตัวละครใดๆ ก็ตามในปีที่ออกฉาย 200 เรื่องเท่านั้นที่ถูกส่งคืนในชุดผลลัพธ์ของเรา เนื่องจากสัญลักษณ์ตัวแทนขีดล่างตรงกับรูปแบบ 200 ตามด้วยอักขระตัวเดียว

ไม่ชอบ

ตัวดำเนินการเชิงตรรกะ NOT สามารถใช้ร่วมกับไวด์การ์ดเพื่อส่งคืนแถวที่ไม่ตรงกับรูปแบบที่ระบุ

สมมติว่าเราต้องการดูภาพยนตร์ที่ไม่ได้ออกฉายในปี 200x เราจะใช้ตัวดำเนินการตรรกะ NOT ร่วมกับไวล์ดการ์ดขีดล่างเพื่อรับผลลัพธ์ ด้านล่างนี้คือสคริปต์ที่ใช้ดำเนินการดังกล่าว

SELECT * FROM movies WHERE year_released NOT LIKE '200_';

movie_id title director year_released category_id
1 Pirates of the Caribean 4 Rob Marshall 2011 1
4 Code Name Black Edgar Jimz 2010 NULL
8 Underworld-Awakeninh Michahel Eal 2012 6

โปรดทราบว่าผลลัพธ์ที่ได้จะแสดงเฉพาะภาพยนตร์ที่ไม่ได้เริ่มต้นด้วย 200 ในปีที่ออกฉายเท่านั้น เนื่องจากเราใช้ตัวดำเนินการตรรกะ NOT ในการค้นหารูปแบบไวด์การ์ด

หนีคำสำคัญ

คีย์เวิร์ด ESCAPE ใช้เพื่อ อักขระจับคู่รูปแบบการหลีก เช่น เปอร์เซ็นต์ (%) และขีดล่าง (_) หากเป็นส่วนหนึ่งของข้อมูล

สมมติว่าเราต้องการตรวจสอบสตริง “67%” ที่เราสามารถใช้ได้

LIKE '67#%%' ESCAPE '#';

หากเราต้องการค้นหาภาพยนตร์เรื่อง “67% Guilty” เราสามารถใช้สคริปต์ที่แสดงด้านล่างเพื่อค้นหา

SELECT * FROM movies WHERE title LIKE '67#%%' ESCAPE '#';

สังเกตว่ามีคู่ “%%” ในส่วนคำสั่ง LIKE อันแรกเป็นสีแดง “%” ถือเป็นส่วนหนึ่งของสตริงที่จะค้นหา อีกอันหนึ่งใช้เพื่อจับคู่อักขระจำนวนเท่าใดก็ได้ที่ตามมา

ข้อความค้นหาเดียวกันนี้จะใช้งานได้หากเราใช้สิ่งที่ต้องการ

SELECT * FROM movies WHERE title LIKE '67=%%' ESCAPE '=';

สรุป

  • เครื่องมืออันทรงพลัง Like & Wildcards ที่ช่วยค้นหาข้อมูลที่ตรงกับรูปแบบที่ซับซ้อน
  • มีไวด์การ์ดจำนวนหนึ่งที่ประกอบด้วยเปอร์เซ็นต์ ขีดล่าง และรายการชาร์ท (ไม่รองรับโดย MySQL ) ท่ามกลางคนอื่น ๆ
  • เปอร์เซ็นต์ไวด์การ์ดใช้เพื่อจับคู่อักขระจำนวนเท่าใดก็ได้โดยเริ่มจากศูนย์ (0) และอื่นๆ
  • ไวด์การ์ดขีดล่างใช้เพื่อจับคู่อักขระหนึ่งตัวเท่านั้น

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