PostgreSQL Union, Union ALL พร้อมตัวอย่าง

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

PostgreSQL คำสั่ง UNION จะรวมผลลัพธ์จากคำสั่ง SELECT สองคำสั่งขึ้นไปเข้าเป็นชุดผลลัพธ์เดียวและลบแถวที่ซ้ำกันออก ในขณะที่ UNION ALL จะเก็บทุกแถวไว้ ซึ่งเป็นตัวเลือกที่เร็วกว่าเมื่อไม่สนใจแถวที่ซ้ำกัน

  • 🔗 รวมกัน: คำสั่ง UNION จะรวมแถวจากคำสั่ง SELECT หลายคำสั่งเข้าเป็นชุดผลลัพธ์เดียว
  • 🧹 ซ้ำ: คำสั่ง UNION จะลบแถวที่ซ้ำกันออก ในขณะที่ UNION ALL จะเก็บทุกแถวที่ตรงกันไว้
  • 📐 กฎ: คำสั่ง SELECT แต่ละคำสั่งจะต้องส่งคืนจำนวนคอลัมน์ที่เท่ากันและมีชนิดข้อมูลที่เข้ากันได้
  • ↕️ สั่งโดย: การใช้คำสั่ง ORDER BY เพียงครั้งเดียวในตอนท้ายจะเรียงลำดับชุดผลลัพธ์ที่รวมกันแล้ว
  • ประสิทธิภาพ: คำสั่ง UNION ALL ทำงานได้เร็วกว่าเพราะข้ามขั้นตอนการลบข้อมูลซ้ำซ้อนไป
  • 🤖 ความช่วยเหลือจาก AI: ผู้ช่วย AI จะจัดเรียงคอลัมน์และเลือกใช้ระหว่าง UNION และ UNION ALL

PostgreSQL ยูเนี่ยนและยูเนี่ยนทั้งหมด

ความหมายของ PostgreSQL ยูเนี่ยน?

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

  • คำสั่ง SELECT ต้องส่งคืนจำนวนคอลัมน์เท่ากัน
  • ประเภทข้อมูลของคอลัมน์ที่เกี่ยวข้องทั้งหมดต้องเข้ากันได้

ตัวดำเนินการ UNION มักใช้เพื่อรวมข้อมูลจากตารางที่เกี่ยวข้องซึ่งยังไม่ได้รับการทำให้เป็นมาตรฐานอย่างสมบูรณ์

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

SELECT expression_1, expression_2, ... expression_n
FROM tables
[WHERE condition(s)]
UNION
SELECT expression_1, expression_2, ... expression_n
FROM tables
[WHERE condition(s)];

นี่คือคำอธิบายสำหรับพารามิเตอร์ข้างต้น:

expression_1, expression_2, … expression_n คือการคำนวณหรือคอลัมน์ที่คุณต้องการดึงข้อมูล

ตารางคือตารางที่คุณต้องการดึงข้อมูลบันทึก

เงื่อนไข WHERE คือเงื่อนไขที่ต้องปฏิบัติตามจึงจะสามารถดึงข้อมูลบันทึกได้

หมายเหตุ เนื่องจากตัวดำเนินการ UNION ไม่ส่งคืนค่าซ้ำ การใช้ UNION DISTINCT จึงไม่มีผลกระทบต่อผลลัพธ์

PostgreSQL สหภาพ

ตัวดำเนินการ UNION จะลบข้อมูลที่ซ้ำกันออก ในลักษณะเดียวกับที่ เลือกความแตกต่าง ใช่แล้ว เรามาลองสาธิตกันดู เรามีฐานข้อมูลชื่อ Demo ซึ่งประกอบด้วยตารางดังต่อไปนี้:

หนังสือ:

PostgreSQL สหภาพ

ราคา:

PostgreSQL สหภาพ

ให้เรารันคำสั่งต่อไปนี้:

SELECT id
FROM Book
UNION
SELECT id
FROM Price;

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

PostgreSQL สหภาพ

คอลัมน์ ID จะปรากฏทั้งในตารางหนังสือและราคา อย่างไรก็ตาม จะปรากฏเพียงครั้งเดียวในผลลัพธ์ เหตุผลก็คือว่า PostgreSQL ตัวดำเนินการ UNION ไม่ส่งคืนค่าซ้ำ

PostgreSQL ยูเนี่ยนทั้งหมด

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

ไวยากรณ์:

SELECT expression_1, expression_2, ... expression_n
FROM tables
[WHERE condition(s)]
UNION ALL
SELECT expression_1, expression_2, ... expression_n
FROM tables
[WHERE condition(s)];

นี่คือคำอธิบายสำหรับพารามิเตอร์ข้างต้น:

expression_1, expression_2, … expression_n คือการคำนวณหรือคอลัมน์ที่คุณต้องการดึงข้อมูล

ตารางคือตารางที่คุณต้องการดึงข้อมูลบันทึก

เงื่อนไข WHERE คือเงื่อนไขที่ต้องปฏิบัติตามจึงจะสามารถดึงข้อมูลบันทึกได้

หมายเหตุ คำสั่ง SELECT ทั้งสองคำสั่งต้องมีจำนวนนิพจน์เท่ากัน

เราจะใช้ตารางดังต่อไปนี้:

หนังสือ:

PostgreSQL ยูเนี่ยนทั้งหมด

ราคา:

PostgreSQL ยูเนี่ยนทั้งหมด

เรียกใช้คำสั่งต่อไปนี้:

SELECT id
FROM Book
UNION ALL
SELECT id
FROM price;

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

PostgreSQL ยูเนี่ยนทั้งหมด

รายการซ้ำยังไม่ได้ถูกลบออก

สั่งโดย

การขอ PostgreSQL ตัวดำเนินการ UNION สามารถใช้ร่วมกับคำสั่ง ORDER BY เพื่อจัดลำดับผลลัพธ์ของแบบสอบถาม เพื่อสาธิต เราจะใช้ตารางต่อไปนี้:

ราคา:

สั่งโดย

ราคา2:

สั่งโดย

ต่อไปนี้คือคำสั่งที่สาธิตวิธีใช้ตัวดำเนินการ UNION ร่วมกับคำสั่ง ORDER BY:

SELECT *
FROM Price
UNION
SELECT *
FROM Price2
ORDER BY price;

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

สั่งโดย

บันทึกถูกจัดเรียงตามคอลัมน์ราคา ส่วนคำสั่งจะเรียงลำดับระเบียนจากน้อยไปมากตามค่าเริ่มต้น หากต้องการเรียงลำดับจากมากไปน้อย ให้เพิ่มส่วนคำสั่ง DESC ดังที่แสดงด้านล่าง:

SELECT *
FROM Price
UNION
SELECT *
FROM Price2
ORDER BY price DESC;

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

สั่งโดย

บันทึกได้รับการเรียงลำดับตามคอลัมน์ราคาจากมากไปน้อย

ควรใช้ Union เมื่อใด และควรใช้ Union All เมื่อใด?

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

ใช้ตัวดำเนินการ UNION ALL เมื่อคุณไม่จำเป็นต้องลบหรือกำจัดข้อมูลที่ซ้ำกัน

การใช้งาน pgAdmin

ต่อไปนี้เรามาดูกันว่าการดำเนินการทั้งสามอย่างนี้ทำได้อย่างไรโดยใช้ pgAdmin

วิธีใช้ PostgreSQL ยูเนี่ยนใช้ pgAdmin

ต่อไปนี้เป็นขั้นตอนการใช้งานโดยละเอียด PostgreSQL การเชื่อมต่อ UNION ผ่านทาง pgAdmin:

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

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

ใช้ PostgreSQL ยูเนี่ยนใช้ pgAdmin

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

SELECT *
FROM Price
UNION
SELECT *
FROM Price2
ORDER BY price DESC;

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

ใช้ PostgreSQL ยูเนี่ยนใช้ pgAdmin

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

ใช้ PostgreSQL ยูเนี่ยนใช้ pgAdmin

ยูเนี่ยนทั้งหมด

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

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

ใช้ PostgreSQL รวมทั้งหมดใช้ pgAdmin

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

SELECT id
FROM Book
UNION ALL
SELECT id
FROM price;

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

ใช้ PostgreSQL รวมทั้งหมดใช้ pgAdmin

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

ใช้ PostgreSQL รวมทั้งหมดใช้ pgAdmin

สั่งโดย

ตัวดำเนินการ UNION ALL สามารถใช้ร่วมกับคำสั่ง ORDER BY เพื่อจัดลำดับผลลัพธ์ในชุดผลลัพธ์ ตัวอย่างเช่น:

SELECT id
FROM Book
UNION ALL
SELECT id
FROM price
ORDER BY id;

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

ใช้ PostgreSQL สั่งซื้อโดยใช้ pgAdmin

สั่งผลแล้ว.

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

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

UNION ALL เร็วกว่าเพราะมันแค่รวมแถวเข้าด้วยกัน ส่วน UNION ต้องเรียงลำดับหรือสร้างแฮชให้กับแถวที่รวมกันเพื่อลบข้อมูลซ้ำ ซึ่งจะเพิ่มภาระการทำงาน ดังนั้นเมื่อข้อมูลซ้ำไม่สำคัญ UNION ALL จึงเป็นตัวเลือกที่มีประสิทธิภาพมากกว่า

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

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

คำสั่ง UNION จะเรียงแถวของชุดผลลัพธ์สองชุดในแนวตั้งลงในรายการคอลัมน์เดียว โดยลบรายการที่ซ้ำกันออก ในขณะที่คำสั่ง JOIN จะรวมคอลัมน์จากตารางที่แตกต่างกันในแนวนอนโดยใช้คีย์ที่เกี่ยวข้อง ดังนั้นจึงเป็นการขยายแถวแทนที่จะต่อแถวเข้าด้วยกัน

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

ผู้ช่วย AI เช่น GitHub Copilot จะจัดเรียงรายการคอลัมน์ของแต่ละคำสั่ง SELECT ให้ตรงกัน ตรวจสอบประเภทข้อมูลที่ไม่ตรงกัน และแนะนำให้ใช้ UNION หรือ UNION ALL โดยพิจารณาจากว่าควรเก็บข้อมูลที่ซ้ำกันไว้หรือไม่ ซึ่งช่วยลดข้อผิดพลาดในการค้นหาข้อมูลที่พบบ่อย

ใช่แล้ว ด้วยการตรวจสอบตารางและเป้าหมายของคุณ ผู้ช่วย AI สามารถบอกได้ว่ามีแถวซ้ำกันหรือไม่ และมีความสำคัญหรือไม่ จากนั้นจะแนะนำให้ใช้ UNION ALL เมื่อยอมรับแถวซ้ำได้เพื่อเพิ่มความเร็ว หรือแนะนำให้ใช้ UNION เมื่อจำเป็นต้องลบแถวซ้ำออก

UNION จะส่งคืนแถวที่พบในทั้งสองคำสั่งค้นหา INTERSECT จะส่งคืนเฉพาะแถวที่ปรากฏในทั้งสองคำสั่งค้นหา และ EXCEPT จะส่งคืนแถวในคำสั่งค้นหาแรกแต่ไม่ส่งคืนในคำสั่งค้นหาที่สอง ทั้งสามคำสั่งนี้จะลบข้อมูลซ้ำออกโดยอัตโนมัติ

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