SQL UNION Operator


SQL UNION Operator ใช้เพื่อรวมคำสั่ง SELECT ตั้งแต่ 2 คำสั่งขึ้นไป โดยมีเงื่อนไขว่า

  • SELECT ที่จะใช้คำสั่ง UNION จะต้องมีจำนวนคอลัมน์เท่ากัน
  • ข้อมูลที่อยู่ในคอลัมน์จะต้อใมีข้อมูลที่ค้ลายๆ หรือเหมือนกัน
  • คอลัมน์ที่อ้างถึงในคำสั่ง SELECT จะต้องอยู่ในลำดับเดียวกัน

รูปแบบการใช้คำสั่ง UNION

SELECT column_name(s) FROM table1
UNION
SELECT column_name(s) FROM table2;

รูปแบบการใช้คำสั่ง UNION ALL

ในกรณีที่ต้องการให้มีค่าซ้ำกันได้ ให้ใช้คำสั่ง UNION ALL

SELECT column_name(s) FROM table1
UNION ALL
SELECT column_name(s) FROM table2;

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


ตัวอย่างฐานข้อมูล

ในบทเรียนนี้เราจะใช้ฐานข้อมูลจาก Northwind ซึ่งตารางด้านล่างนี้จะเป็นตาราง “Customers”

CustomerIDCustomerNameContactNameAddressCityPostalCodeCountry
1Alfreds FutterkisteMaria AndersObere Str. 57Berlin12209Germany
2Ana Trujillo Emparedados y heladosAna TrujilloAvda. de la Constitución 2222México D.F05021Mexico
3Antonio Moreno TaqueríaAntonio MorenoMataderos 2312México D.F.05023Mexico

และอีกตารางคือ “Suppliers”

SupplierIDSupplierNameContactNameAddressCityPostalCodeCountry
1Exotic LiquidCharlotte Cooper49 Gilbert St.LondonEC1 4SDUK
2New Orleans Cajun DelightsShelley BurkeP.O. Box 78934New Orleans70117USA
3Grandma Kelly’s HomesteadRegina Murphy707 Oxford Rd.Ann Arbor48104USA


ตัวอย่างการใช้งาน SQL UNION

คำสั่ง SQL นี้จะแสดงค่าเมืองหรือ city (แสดงค่าไม่ซ้ำกัน) จากตาราง “Customers” และ “Suppliers”

SELECT City FROM Customers
UNION
SELECT City FROM Suppliers
ORDER BY City;

หมายเหตุ: หากในตาราง “Customers” และ “Suppliers” มีเมืองที่เหมือนกัน ผลลัพธ์จะแสดงเพียงแค่เมืองเดียว เนื่องจาก UNION จะเลือกเพียงแค่ค่าที่ไม่เหมือนกัน ซึ่งหากต้องการค่าที่ซ้ำกันให้ใช้คำสั่ง UNION ALL


ตัวอย่างการใช้งาน SQL UNION ALL

ผลลัพธ์ของคำสั่งนี้จะแสดงค่าของเมือง หรือ City (แสดงค่าที่ซ้ำกัน) จากตาราง “Customers” และ “Suppliers”

SELECT City FROM Customers
UNION ALL
SELECT City FROM Suppliers
ORDER BY City;

การใช้ SQL UNION กับ WHERE

ผลลัพธ์ของคำสั่งนี้จะแสดงค่าของเมือง German (แสดงค่าไม่ซ้ำกัน) จากตาราง “Customers” และ “Suppliers”

SELECT City, Country FROM Customers
WHERE Country='Germany'
UNION
SELECT City, Country FROM Suppliers
WHERE Country='Germany'
ORDER BY City;

การใช้ SQL UNION ALL กับ WHERE

ผลลัพธ์ของคำสั่งนี้จะแสดงค่าของเมือง German (แสดงค่าที่ซ้ำกัน) จากตาราง “Customers” และ “Suppliers”

SELECT City, Country FROM Customers
WHERE Country='Germany'
UNION ALL
SELECT City, Country FROM Suppliers
WHERE Country='Germany'
ORDER BY City;

ตัวอย่างการใช้ UNION แบบอื่นๆ

คำสั่ง SQL ด้านล่างนี้จะแสดงรายการข้อมูล จากตาราง “Customers” และ “Suppliers” ทั้งหมด

SELECT 'Customer' AS Type, ContactName, City, Country
FROM Customers
UNION
SELECT 'Supplier', ContactName, City, Country
FROM Suppliers;

สังเกตจากคำสั่งด้านบน ที่ใช้คำว่า “As Type” เนื่องจากเป็น alias หรือชื่อแทนที่สร้างขึ้นมาเพื่อตั้งชื่อตารางและคอลัมน์ชั่วคราวในการค้นหาเท่านั้น ดังนั้น จากตัวอย่างคำสั่ง “SELECT ‘Customer’ AS Type” เป็นการสร้างคอลัมน์ชั่วคราวขึ้นมาชื่อว่า “Type” เพื่อใช้ระบุว่าข้อมูลที่แสดงนั้นเป็น “Customers” หรือ “Suppliers”