PostgreSQL IN ไม่ใช่ IN พร้อมตัวอย่าง

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

PostgreSQL ตัวดำเนินการ IN จะตรวจสอบว่าค่าปรากฏอยู่ในรายการหรือซับควอรีภายในเงื่อนไข WHERE หรือไม่ โดยจะแทนที่เงื่อนไข OR หลายรายการในคำสั่ง SELECT, UPDATE, INSERT และ DELETE เพื่อการกรองที่สะอาดกว่า เร็วกว่า และอ่านง่ายกว่า

  • 📋 ไวยากรณ์: value IN (list) จะคืนค่า true เมื่อค่าตรงกับรายการใดรายการหนึ่งในลิสต์
  • 🔤 รายชื่อตัวละคร: ใส่ค่าข้อความไว้ในเครื่องหมายอัญประกาศเดี่ยวภายในวงเล็บ
  • 🔢 รายการตัวเลข: เปรียบเทียบตัวเลขโดยตรง โดยไม่ต้องใส่เครื่องหมายคำพูด เพื่อให้ได้ผลลัพธ์ที่ตรงกันทุกประการ
  • ???? ไม่มีใน: ส่งคืนแถวที่มีค่าไม่ตรงกับรายการที่ระบุ
  • ⚠️ กับดักค่าว่าง: การใช้ค่า NULL ภายในคำสั่ง NOT IN อาจส่งผลให้ได้ผลลัพธ์เป็นศูนย์แถวโดยไม่มีการแจ้งเตือนใดๆ
  • 🤖 คำถามจาก AI: ผู้ช่วยจะสร้างเงื่อนไข IN และแจ้งเตือนค่า NULL และความเสี่ยงด้านประสิทธิภาพ

PostgreSQL IN, NOT IN พร้อมตัวอย่าง

ความหมายของ PostgreSQL ใน?

ตัวดำเนินการ IN ใช้ในส่วน WHERE เพื่อตรวจสอบว่าค่าหนึ่งๆ มีอยู่ในรายการค่าอื่นๆ หรือไม่ การดำเนินการ IN ช่วยลดความจำเป็นในการใช้เงื่อนไข OR หลายๆ เงื่อนไขในคำสั่ง SELECT, UPDATE, INSERT หรือ DELETE

วากยสัมพันธ์

ตัวดำเนินการ IN มีรูปแบบดังต่อไปนี้:

value IN (value_1, value_2, ...)

ค่าคือค่าที่คุณกำลังตรวจสอบในรายการ

value_1, value_2… คือค่ารายการ

หากพบค่าในรายการ ตัวดำเนินการจะส่งคืนค่าเป็นจริง

รายการดังกล่าวอาจเป็นชุดตัวเลขหรือสตริง หรือแม้กระทั่งผลลัพธ์ที่ได้จากการประมวลผล คำสั่ง SELECT ดังต่อไปนี้:

value IN (SELECT value FROM table-name);

คำสั่งที่อยู่ในวงเล็บเรียกว่าแบบสอบถามย่อย

PostgreSQL ด้วยบุคลิกที่โดดเด่น

ให้เราสาธิตวิธีการใช้ตัวดำเนินการ IN กับค่าอักขระ

พิจารณาตารางต่อไปนี้:

พนักงาน:

PostgreSQL ด้วยบุคลิกที่โดดเด่น

ให้เราลองรันแบบสอบถามต่อไปนี้กับตารางด้านบน:

SELECT * FROM Employees WHERE name IN ('James John', 'Mercy Bush', 'Kate Joel');

ผลลัพธ์ที่ได้มีดังนี้:

PostgreSQL ผลลัพธ์ IN พร้อมตัวอักษร

เรามีรายชื่ออยู่สามชื่อ เรากำลังค้นหาว่าเราสามารถพบชื่อใดชื่อหนึ่งในสามชื่อนี้ในคอลัมน์ชื่อของตารางพนักงานได้หรือไม่ ปรากฏว่า Kate Joel ตรงกับข้อมูลในตารางหนึ่ง และได้รับรายละเอียดของเธอแล้ว

PostgreSQL IN พร้อมตัวเลข

ตอนนี้มาดูกันว่าเราสามารถใช้ตัวดำเนินการ IN กับค่าตัวเลขได้อย่างไร

พิจารณาตารางราคาที่ระบุด้านล่าง:

ราคา:

PostgreSQL IN พร้อมตัวเลข

เราสามารถรันแบบสอบถามต่อไปนี้กับตารางได้:

SELECT * FROM Price WHERE price IN (200, 308, 250, 550);

สิ่งนี้ส่งคืนสิ่งต่อไปนี้:

PostgreSQL IN พร้อมผลลัพธ์เชิงตัวเลข

เราได้สร้างรายการที่มีค่าตัวเลข 4 ค่า เรากำลังตรวจสอบว่าสามารถจับคู่ค่าใด ๆ เหล่านี้กับค่าที่อยู่ในคอลัมน์ราคาของตารางราคาได้หรือไม่ โดยค่า XNUMX ค่าได้รับการจับคู่และรายละเอียดของค่าทั้งสองค่าได้รับการส่งคืน

การใช้ NOT OperaTor

ตัวดำเนินการ IN สามารถใช้ร่วมกับตัวดำเนินการ NOT ได้ โดยจะคืนค่าที่ไม่พบในคอลัมน์ที่ระบุ เราจะใช้ตารางราคาเพื่อสาธิต

SELECT * FROM Price WHERE price NOT IN (200, 400, 190, 230);

สิ่งนี้จะส่งคืนสิ่งต่อไปนี้:

PostgreSQL ในการใช้ตัวดำเนินการ NOT

เราได้สร้างรายการที่มีค่าตัวเลข 4 ค่า เรากำลังตรวจสอบคอลัมน์ราคาของตารางราคาสำหรับค่าที่ไม่อยู่ในรายการ ไม่พบค่า 250 และ 300 ดังนั้นจึงได้ส่งคืนรายละเอียดของค่าเหล่านี้

การใช้งาน pgAdmin

นอกเหนือจากการใช้ SQL shell แล้ว ยังสามารถเรียกใช้คำสั่ง IN และ NOT IN เดียวกันได้ผ่านทางอินเทอร์เฟซ pgAdmin ได้อีกด้วย

ด้วยตัวละคร

หากต้องการบรรลุผลเช่นเดียวกันผ่าน pgAdmin ให้ทำดังนี้:

ขั้นตอน 1) เข้าสู่ระบบบัญชี pgAdmin ของคุณ

ขั้นตอน 2)

  1. จากแถบนำทางด้านซ้าย คลิกฐานข้อมูล
  2. คลิกสาธิต

การใช้ pgAdmin พร้อมอักขระ

ขั้นตอน 3) พิมพ์แบบสอบถามในตัวแก้ไขแบบสอบถาม:

SELECT * FROM Employees WHERE name IN ('James John', 'Mercy Bush', 'Kate Joel');

ขั้นตอน 4) คลิกปุ่มดำเนินการ

การใช้งาน pgAdmin ร่วมกับการค้นหาอักขระ

ควรส่งคืนสิ่งต่อไปนี้:

การใช้ pgAdmin กับผลลัพธ์ที่เป็นอักขระ

ด้วยตัวเลข

หากต้องการบรรลุผลเช่นเดียวกันผ่าน pgAdmin ให้ทำดังนี้:

ขั้นตอน 1) เข้าสู่ระบบบัญชี pgAdmin ของคุณ

ขั้นตอน 2)

  1. จากแถบนำทางด้านซ้าย คลิกฐานข้อมูล
  2. คลิกสาธิต

การใช้ pgAdmin ด้วยตัวเลข

ขั้นตอน 3) พิมพ์แบบสอบถามในตัวแก้ไขแบบสอบถาม:

SELECT * FROM Price WHERE price IN (200, 308, 250, 550);

ขั้นตอน 4) คลิกปุ่มดำเนินการ

การใช้งาน pgAdmin ร่วมกับการค้นหาข้อมูลเชิงตัวเลข

ควรส่งคืนสิ่งต่อไปนี้:

การใช้งาน pgAdmin กับผลลัพธ์ที่เป็นตัวเลข

การใช้ NOT OperaTor

หากต้องการบรรลุผลเช่นเดียวกันผ่าน pgAdmin ให้ทำดังนี้:

ขั้นตอน 1) เข้าสู่ระบบบัญชี pgAdmin ของคุณ

ขั้นตอน 2)

  1. จากแถบนำทางด้านซ้าย คลิกฐานข้อมูล
  2. คลิกสาธิต

การใช้ตัวดำเนินการ NOT ใน pgAdmin

ขั้นตอน 3) พิมพ์แบบสอบถามในตัวแก้ไขแบบสอบถาม:

SELECT * FROM Price WHERE price NOT IN (200, 400, 190, 230);

ขั้นตอน 4) คลิกปุ่มดำเนินการ

การใช้ตัวดำเนินการ NOT ในการค้นหาข้อมูลใน pgAdmin

ควรส่งคืนสิ่งต่อไปนี้:

การใช้ตัวดำเนินการ NOT ส่งผลให้เกิด pgAdmin

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

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

In PostgreSQLโดยทั่วไปแล้ว คำสั่ง EXISTS จะทำงานเร็วกว่าคำสั่ง IN ในซับเควรีขนาดใหญ่ เพราะมันจะหยุดที่การจับคู่ครั้งแรก สำหรับรายการขนาดเล็กและคงที่ คำสั่ง IN นั้นง่ายและมีประสิทธิภาพ ทดสอบทั้งสองคำสั่งด้วย EXPLAIN ANALYZE บนข้อมูลของคุณเอง

คำสั่ง NOT IN ถือว่าค่า NULL เป็นค่าที่ไม่ทราบ ดังนั้นหากรายการหรือซับเควรีมีค่า NULL เงื่อนไขทั้งหมดอาจประเมินค่าเป็นไม่ทราบและส่งคืนแถวศูนย์แถว ควรกรองค่า NULL ออกหรือใช้คำสั่ง NOT EXISTS แทน

คำสั่ง IN แทนที่เงื่อนไข OR ที่ยาวเหยียดด้วยข้อความเดียวที่อ่านง่าย เช่น WHERE id IN (1,2,3) เท่ากับ WHERE id=1 OR id=2 OR id=3 แต่สั้นกว่า ชัดเจนกว่า และดูแลรักษาง่ายกว่า

ใช่. PostgreSQL ถือว่า x IN (a, b, c) เทียบเท่ากับ x = ANY (ARRAY[a, b, c]) ทั้งสองแบบให้ผลลัพธ์เหมือนกันและโดยปกติจะมีแผนการสืบค้นข้อมูลเหมือนกัน

ผู้ช่วย AI สร้างเงื่อนไข IN จากภาษาอังกฤษธรรมดา แนะนำรายการค่าที่ถูกต้อง และแจ้งเตือนความเสี่ยงของค่า NULL ในเงื่อนไข NOT IN นอกจากนี้ยังเขียนคำสั่ง SQL ที่ทำงานช้าใหม่ และเพิ่มคำแนะนำ EXPLAIN เพื่อการปรับแต่ง

ใช่แล้ว เครื่องมือ AI Copilot ตรวจจับเงื่อนไข OR ที่ซ้ำกันในคอลัมน์เดียว และปรับโครงสร้างใหม่ให้เป็นรายการ IN เดียว ช่วยปรับปรุงความอ่านง่ายและลดโอกาสเกิดข้อผิดพลาดทางตรรกะ

ใช่แล้ว ใส่คำสั่ง SELECT ไว้ในวงเล็บ: WHERE id IN (SELECT id FROM orders) คำสั่งภายใน หรือที่เรียกว่าซับควอรี จะแสดงรายการค่าที่ตรวจสอบโดยเงื่อนไข IN

สำหรับตารางขนาดใหญ่ คำสั่ง NOT EXISTS หรือ LEFT JOIN ร่วมกับ IS NULL มักให้ผลลัพธ์ที่ดีกว่า NOT IN เนื่องจาก PostgreSQL สร้าง anti-join ที่มีประสิทธิภาพ นอกจากนี้ โปรดตรวจสอบให้แน่ใจว่าคอลัมน์ที่เปรียบเทียบนั้นมีการสร้างดัชนีไว้แล้ว

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