PostgreSQL ชอบ, ไม่ชอบ, ไวด์การ์ด (%, _ ) ตัวอย่าง

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

PostgreSQL คำสั่ง LIKE ใช้สำหรับเปรียบเทียบข้อความกับรูปแบบโดยใช้สัญลักษณ์ตัวแทนสองตัว คือ เครื่องหมายเปอร์เซ็นต์ (%) และเครื่องหมายขีดล่าง (_) บทเรียนนี้จะแสดงวิธีการใช้ LIKE และ NOT LIKE ในคำสั่ง SELECT พร้อมตัวอย่างการใช้งาน psql และ pgAdmin สำหรับแต่ละกรณี

  • 🔍 แกน Operaทอร์: ฟังก์ชัน LIKE จะเปรียบเทียบค่าในคอลัมน์หรือนิพจน์กับรูปแบบตัวอักษรแทนค่า (wildcard pattern) และจะส่งคืนค่า true หากตรงกัน
  • 🌟 สองไวลด์การ์ด: % ตรงกับอักขระศูนย์ตัวขึ้นไป; _ ตรงกับอักขระหนึ่งตัว
  • การจับคู่แบบผกผัน: รวม NOT กับ LIKE เพื่อแสดงผลลัพธ์ที่ตรงตามเงื่อนไข ไม่ ตรงตามแบบแผน
  • 🛠️ สองอินเทอร์เฟซ: เรียกใช้คำสั่ง SQL เดียวกันจากบรรทัดคำสั่ง psql หรือผ่านทางกราฟิกภายใน pgAdmin ก็ได้
  • 🎯 ตัวละครหลบหนี: ใช้คำสั่ง ESCAPE เพื่อจับคู่ตัวอักษร % หรือ _ ที่อยู่ภายในรูปแบบ
  • 🤖 AI Boost: เครื่องมือฐานข้อมูล AI แปลงความต้องการค้นหาในภาษาธรรมดาให้เป็นรูปแบบ LIKE และแนะนำ ILIKE เมื่อต้องการการจับคู่ที่ไม่คำนึงถึงตัวพิมพ์ใหญ่เล็ก

PostgreSQL ชอบ, ไม่ชอบ, ไวด์การ์ด (%, _ ) ตัวอย่าง

การขอ PostgreSQL LIKE ตัวดำเนินการ LIKE จะจับคู่ค่าข้อความกับรูปแบบโดยใช้สัญลักษณ์ตัวแทน (wildcards) หากนิพจน์การค้นหาตรงกับรูปแบบ ฟังก์ชัน LIKE จะส่งคืนค่า trueไวลด์การ์ดใช้งานได้ใน WHERE ข้อของ SELECT, UPDATE, INSERTหรือ DELETE.

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

PostgreSQL รองรับการใช้สัญลักษณ์ตัวแทน LIKE สองตัว:

  • เครื่องหมายเปอร์เซ็นต์ (%): ตรงกับอักขระหรือตัวเลขศูนย์ตัว หนึ่งตัว หรือหลายตัวก็ได้
  • ขีดล่าง (_): ตรงกับอักขระหรือตัวเลขเพียงหนึ่งตัวเท่านั้น

สัญลักษณ์ทั้งสองสามารถใช้ร่วมกันได้ภายในรูปแบบเดียวกัน หากใช้ LIKE โดยไม่มีสัญลักษณ์ตัวแทนใดๆ จะทำงานเหมือนกับเครื่องหมายเท่ากับ (=) ตัวดำเนินการ

PostgreSQL ไวยากรณ์ LIKE

ไวยากรณ์พื้นฐานของคำสั่ง LIKE คือ:

expression LIKE pattern [ ESCAPE 'escape-character' ]
  • การแสดงออก — นิพจน์อักขระ ซึ่งโดยทั่วไปจะเป็นชื่อคอลัมน์หรือชื่อฟิลด์
  • Belt hold — นิพจน์อักขระที่มีสัญลักษณ์ตัวแทน (wildcards)
  • ตัวละครหนี — ตัวเลือกเสริม ช่วยให้คุณจับคู่ตามตัวอักษรได้ % or _ อักขระ เมื่อละเว้น เครื่องหมายแบ็กสแลช (\) คืออักขระหลีกเริ่มต้น

PostgreSQL ชอบด้วยสัญลักษณ์ % แทนค่าปกติ

การขอ % เครื่องหมายตรงกับอักขระศูนย์ หนึ่ง หรือมากกว่านั้น พิจารณาสิ่งต่อไปนี้ Book ตาราง:

ตารางตัวอย่างที่ใช้ในตัวอย่าง LIKE

หากต้องการค้นหาหนังสือที่มีชื่อขึ้นต้นด้วย “Lear” ให้ใช้คำสั่งค้นหาด้านล่างนี้

SELECT *
FROM
   Book
WHERE
   name LIKE 'Lear%';

ผลลัพธ์ของการค้นหา:

LIKE Lear% ผลการค้นหาที่ส่งคืนหนังสือที่ตรงกัน

วิธีการค้นหาหนังสือที่มีคำว่า “โดย” อยู่ในชื่อหนังสือ:

SELECT *
FROM
   Book
WHERE
   name LIKE '%by%';

ผลลัพธ์ของการค้นหา:

ผลลัพธ์การค้นหาแบบ LIKE %by% ที่มีหนังสือตรงกัน

PostgreSQL ชอบด้วยสัญลักษณ์ _ (Wildcard)

การขอ _ เครื่องหมายตรงกับอักขระเพียงตัวเดียว คำสั่งค้นหาต่อไปนี้จะค้นหาชื่อที่อักขระตัวแรกเป็นตัวอักษรเดี่ยวใดๆ ตามด้วย "earn" และตามด้วยคำต่อท้ายใดๆ:

SELECT *
FROM
   Book
WHERE
   name LIKE '_earn%';

ผลลัพธ์ของการค้นหา:

ผลลัพธ์การค้นหา LIKE _earn% ที่มีคำนำหน้าเป็นอักขระตัวเดียวตรงกัน

อีกตัวอย่างหนึ่ง — จับคู่ข้อความใดๆ ก็ตามที่ลงท้ายด้วย “Beginner” บวกกับอักขระอีกหนึ่งตัว:

SELECT *
FROM
   Book
WHERE
   name LIKE '%Beginner_';

ผลลัพธ์ของการค้นหา:

LIKE %Beginner_ ผลลัพธ์การค้นหาที่ตรงกับอักขระเดี่ยวที่ต่อท้าย

PostgreSQL ไม่ชอบ OperaTor

รวม LIKE กับ NOT เพื่อแสดงผลลัพธ์ที่ตรงกัน ไม่ ตรงตามรูปแบบ ตัวอย่างเช่น จงแสดงรายการหนังสือทุกเล่มที่ชื่อไม่ขึ้นต้นด้วยคำว่า “Post”:

SELECT *
FROM
   Book
WHERE
   name NOT LIKE 'Post%';

ผลลัพธ์ของการค้นหา:

ไม่ชอบผลลัพธ์ Post% ที่ไม่รวมหนังสือที่ขึ้นต้นด้วย Post

มีหนังสือเพียงเล่มเดียวที่ตรงตามเงื่อนไขนี้ ตอนนี้จงเขียนรายชื่อหนังสือทุกเล่มที่มีชื่อตรงตามเงื่อนไขนี้ ไม่ มีคำว่า “Made” อยู่ด้วย:

SELECT *
FROM
   Book
WHERE
   name NOT LIKE '%Made%';

ผลลัพธ์ของการค้นหา:

ไม่เหมือนกับผลลัพธ์ %Made% ที่แสดงหนังสือที่ตรงกันสามเล่ม

มีสามแถวที่ตรงตามเงื่อนไข

การใช้ LIKE ร่วมกับ pgAdmin

นอกจากนี้ ยังสามารถเรียกใช้คำสั่งค้นหาเดียวกันนี้ในรูปแบบกราฟิกภายในเครื่องมือค้นหาของ pgAdmin ได้อีกด้วย

% ตัวอักษรตัวแทนใน pgAdmin

ขั้นตอน 1) เข้าสู่ระบบ pgAdmin

ขั้นตอน 2) ในแถบนำทางด้านซ้าย ให้คลิก ฐานข้อมูลจากนั้นคลิก ทดลอง.

แผนผังการนำทางของ pgAdmin พร้อมฐานข้อมูลและส่วนสาธิตที่ขยายออก

ขั้นตอน 3) พิมพ์คำสั่งค้นหาลงในตัวแก้ไขคำสั่งค้นหา:

SELECT *
FROM
   Book
WHERE
   name LIKE 'Lear%';

ขั้นตอน 4) คลิก ดำเนินงาน.

เครื่องมือค้นหาข้อมูล pgAdmin พร้อมปุ่ม Execute บนแถบเครื่องมือ

ช่องแสดงผลลัพธ์จะแสดงหนังสือที่ตรงกับเงื่อนไข:

ช่องแสดงผลลัพธ์ pgAdmin สำหรับคำสั่ง LIKE Lear%

วิธีการค้นหาหนังสือที่มีคำว่า “โดย” อยู่ในชื่อ:

ขั้นตอน 1) พิมพ์ข้อความต่อไปนี้ลงในตัวแก้ไขแบบสอบถาม:

SELECT *
FROM
   Book
WHERE
   name LIKE '%by%';

ขั้นตอน 2) คลิก ดำเนินงาน.

เครื่องมือค้นหา pgAdmin กำลังเรียกใช้คำสั่ง LIKE %by%

หน้าต่างแสดงผลลัพธ์แสดงดังนี้:

ช่องแสดงผลลัพธ์ของ pgAdmin สำหรับคำสั่ง LIKE %by%

_ ไวลด์การ์ดใน pgAdmin

ขั้นตอน 1) เข้าสู่ระบบ pgAdmin

ขั้นตอน 2) ในแถบนำทางด้านซ้าย ให้คลิก ฐานข้อมูลจากนั้นคลิก ทดลอง.

แผนผังการนำทางของ pgAdmin ที่แสดงแผนผังฐานข้อมูล

ขั้นตอน 3) พิมพ์คำสั่งค้นหาลงในตัวแก้ไขคำสั่งค้นหา:

SELECT *
FROM
   Book
WHERE
   name LIKE '_earn%';

ขั้นตอน 4) คลิก ดำเนินงาน.

เครื่องมือค้นหา pgAdmin กำลังทำงานด้วยคำสั่งค้นหา LIKE _earn%

หน้าต่างแสดงผลลัพธ์แสดงดังนี้:

ช่องแสดงผลลัพธ์ pgAdmin สำหรับคำสั่ง LIKE _earn%

ขั้นตอน 5) เรียกใช้ตัวอย่างที่สอง:

  1. พิมพ์คำสั่งค้นหาลงในตัวแก้ไขคำสั่งค้นหา:
SELECT *
FROM
   Book
WHERE
   name LIKE '%Beginner_';
  1. คลิก ดำเนินงาน.

เครื่องมือค้นหา pgAdmin กำลังทำงานเหมือนการค้นหา %Beginner_

หน้าต่างแสดงผลลัพธ์แสดงดังนี้:

ช่องแสดงผลลัพธ์ pgAdmin สำหรับคำสั่ง LIKE %Beginner_

ไม่เหมือนกับใน pgAdmin

ขั้นตอน 1) เข้าสู่ระบบ pgAdmin

ขั้นตอน 2) ในแถบนำทางด้านซ้าย ให้คลิก ฐานข้อมูลจากนั้นคลิก ทดลอง.

ตัวอย่างแผนผังการนำทางของ pgAdmin สำหรับ NOT LIKE

ขั้นตอน 3) หากต้องการแสดงรายชื่อหนังสือทุกเล่มที่ชื่อไม่ขึ้นต้นด้วย “Post” ให้พิมพ์:

SELECT *
FROM
   Book
WHERE
   name NOT LIKE 'Post%';

ขั้นตอน 4) คลิก ดำเนินงาน.

เครื่องมือค้นหา pgAdmin กำลังทำงานโดยไม่เหมือนกับการค้นหา Post%

หน้าต่างแสดงผลลัพธ์แสดงดังนี้:

ช่องแสดงผลลัพธ์ pgAdmin สำหรับคำสั่ง NOT LIKE Post%

รายละเอียดผลลัพธ์ pgAdmin เพิ่มเติมสำหรับคำสั่ง NOT LIKE

เพื่อแสดงรายชื่อหนังสือที่ชื่อหนังสือไม่มีคำว่า “Made”:

ขั้นตอน 1) พิมพ์ข้อความต่อไปนี้ลงในตัวแก้ไขแบบสอบถาม:

SELECT *
FROM
   Book
WHERE
   name NOT LIKE '%Made%';

ขั้นตอน 2) คลิก ดำเนินงาน.

เครื่องมือค้นหา pgAdmin กำลังทำงาน ไม่เหมือนกับคำสั่งค้นหา %Made%

หน้าต่างแสดงผลลัพธ์แสดงดังนี้:

ช่องแสดงผลลัพธ์ของ pgAdmin สำหรับคำสั่ง NOT LIKE %Made%

ดาวน์โหลดฐานข้อมูลที่ใช้ในบทช่วยสอนนี้.

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

คำสั่ง LIKE จะคำนึงถึงตัวพิมพ์ใหญ่เล็ก ในขณะที่ ILIKE จะไม่คำนึงถึงตัวพิมพ์ใหญ่เล็กในการจับคู่ ILIKE คือ... PostgreSQL ส่วนขยาย ตัวอย่างเช่น ชื่อ ILIKE 'lear%' จะตรงกับคำว่า “Learn” และ “LEAR” เหมือนกัน ใช้ ILIKE เมื่อไม่สามารถคาดเดาตัวพิมพ์ใหญ่เล็กของข้อมูลที่ผู้ใช้ป้อนได้

ใช้คำสั่ง ESCAPE เพื่อประกาศอักขระหลีก จากนั้นใส่อักขระตัวแทน (wildcard) ไว้ข้างหน้า ตัวอย่างเช่น โค้ด WHERE LIKE '50!%%' ESCAPE '!' จะค้นหาค่าที่ขึ้นต้นด้วย “50%” เนื่องจากเครื่องหมายอัศเจรีย์ (!) หลีกเครื่องหมายเปอร์เซ็นต์ (%)

ใช้ LIKE สำหรับการจับคู่คำนำหน้า คำต่อท้าย หรือสตริงย่อยแบบง่ายๆ เปลี่ยนไปใช้ regex ของ POSIX (~ และ ~*) เมื่อต้องการคลาสอักขระ ทางเลือก หรือตัวกำหนดปริมาณ Regex มีประสิทธิภาพมากกว่า แต่โดยทั่วไปแล้วจะช้ากว่า LIKE สำหรับรูปแบบพื้นฐาน

ใช่. AI ตัวช่วยต่างๆ เช่น ตัวแปลข้อความเป็น SQL จะแปลข้อความแจ้งเตือน เช่น “ค้นหาลูกค้าที่มีอีเมลประกอบด้วยคำว่า acme” ให้เป็น name LIKE '%acme%' และอธิบายตรรกะของตัวอักษรตัวแทน (wildcard) ซึ่งช่วยเร่งการสร้างรายงานแบบเฉพาะกิจ

AI แบบ Generative จะตรวจสอบแผนการสืบค้น แนะนำดัชนีไตรแกรม (pg_trgm) สำหรับการค้นหา LIKE ที่ใช้ไวด์การ์ดนำหน้า และเขียนรูปแบบใหม่ที่ป้องกันการใช้ดัชนี วิธีนี้จะเปลี่ยนการสแกนตารางทั้งหมดให้เป็นการค้นหาในเวลาเพียงไม่กี่มิลลิวินาทีสำหรับข้อมูลขนาดใหญ่ PostgreSQL ตาราง

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